ITPub博客

首页 > Linux操作系统 > Linux操作系统 > (摘录)没有备份表分区文件损坏的解决办法

(摘录)没有备份表分区文件损坏的解决办法

原创 Linux操作系统 作者:lxz3000 时间:2008-09-29 10:01:15 0 删除 编辑
以下摘自itpub  yaanzy  分区表对应的数据文件出错后如何重建该分区

谢谢分享!

今天客户那边有个数据文件坏了,数据库未做备份,幸好对应的分区表都是些历史数据,数据丢了也就算了。但要删除该表空间时报分区表也被包含在其它表空间,不能删除。解决方法也挺简单,主要使用exchange语法将分区和另一个新建的临时表进行交换即可。

下面举一个例子来描述该流程。

1、模拟出错情况

SQL> create table t1
2 ( id number(2),
3 name varchar2(15))
4 partition by range (id)
5 (partition p1 values less than (10) tablespace users,
6 partition p2 values less than (20) tablespace test,
7 partition p3 values less than (30)) tablespace shailesh;

SQL> select * from t1;

ID NAME
---------- ---------------
1 XXX
12 XXX
25 XXX

SQL> alter database datafile 'D:ORACLEORADATAORA92test001' offline drop;

Database altered.

Accessing the partitioned table t1 will give the following errror:

SQL> select * from t1;
ERROR:
ORA-00376: file 14 cannot be read at this time
ORA-01110: data file 14: 'D:ORACLEORADATAORA92TEST001'

SQL> drop tablespace test INCLUDING CONTENTS;
drop tablespace test INCLUDING CONTENTS
*
ERROR at line 1:
ORA-14404: partitioned table contains partitions in a different tablespace

Now you want to get back the partition segment structure (without any data)
and avoid this error.

2、解决方案

1) 首先创建一个结构和分区表一致的临时表,不要有数据。

SQL> create table test as select * from t1 where 1=2;

Table created.

2) 交换这个临时表和出问题的分区。
WITHOUT VALIDATION语法是指临时表中的数据移动到分区中不必检验分区键的分区范围,即
临时表中的数据即使不在p2分区的范围内,也会移动到分区p2中;如果想进行检验的话,就要使
用WITH VALIDATION语法,或者就不写这段,缺省是要检验的。

SQL> ALTER TABLE t1 EXCHANGE PARTITION p2 WITH TABLE test WITHOUT VALIDATION;

Table altered.

3) 现在分区表可以访问了

SQL> select * from t1;

ID NAME
---------- ---------------
1 XXX
25 XXX

4) 删除包含出错数据文件的表空间,再重建一个新的表空间。

SQL> drop tablespace test including contents and datafiles;

Tablespace dropped.

SQL> CREATE TABLESPACE test DATAFILE 'D:ORACLEORADATAORA92test001' SIZE 5M
2 EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT manual;

Tablespace created.

5) 将那个表分区Move到新的表空间中去。

SQL> ALTER TABLE t1 MOVE PARTITION p2 TABLESPACE test;

Table altered.

SQL> select * from t1;

ID NAME
---------- ---------------
1 XXX
25 XXX

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/10341434/viewspace-466122/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-01-13

  • 博文量
    44
  • 访问量
    92497