如何使用DBMS_REPAIR检测和修补数据坏块
2008-11-10 12:58:38 来源:WEB开发网注意此时pk index还没有被修正。不能往t1 table中插入数据
SQL> insert into system.t1 values (1,'aaaa');
insert into system.t1 values (1,'aaaa')
*
SQL> select * from system.t1 where col1 = 1;
no rows selected
七、使用DBMS_REPAIR.REBUILD_FREELISTS重建freelists
REBUILD_FREELISTS重建指定object的freelists。
SQL> declare
2 begin
3 dbms_repair.rebuild_freelists (
4 schema_name => 'SYSTEM',
5 object_name => 'T1',
6 object_type => dbms_repair.table_object);
7 end;
8 /
PL/SQL procedure successfully completed.
八、重建Index
在orphan_key_table中确定的每一个index都必须重建,以保证查询结果的一致。
SQL> alter index system.t1_pk rebuild online;
Index altered.
重建index后,就能往t1 table中插入数据。
SQL> insert into system.t1 values (1, 'aaaa');
1 row created.
SQL> select * from system.t1;
COL1 COL2
--------------------------------------------
4 dddd
5 eeee
1 aaaa
以上的insert语句只是提供一个简单的例子。如果我们真能知道丢失的数据内容,那当然是最好的。临时表(temp_t1)应该用来存放所有从坏块中抽取的记录。
到此时table T1已经可以被再用,但同时数据也有丢失。一般来说,在使用DBMS_REPAIR package之前,应认真考虑数据的丢失问题,因为从index segment和table dump中采集信息非常复杂,同时逻辑上的不一致也可能被引入。要记住:在DBMS_REPAIR package 初始版本中,“修补坏块”的功能仅仅是“将块标识为由软件引起的坏块”而已。
在进行上述操作前,必须先阅读〈Oracle8i Administrator's Guide〉中“Detecting and Repairing Data Block Corruption"章节,同时对风险进行评估。所有操作最好是在Oracle工程师的指导下进行。
更多精彩
赞助商链接