[Oracle]DBMS_REPAIR包修复损坏数据块(3)
文章作者 100test 发表时间 2007:03:14 13:53:42
来源 100Test.Com百考试题网
orphan key count: 549
PL/SQL 过程已成功完成。
SQL> DECLARE
2 num_orphans INT.
3 BEGIN
4 num_orphans := 0.
5 DBMS_REPAIR.DUMP_ORPHAN_KEYS (
6 SCHEMA_NAME => YANGTK ,
7 OBJECT_NAME => IND_TEST_NAME ,
8 OBJECT_TYPE => dbms_repair.index_object,
9 REPAIR_TABLE_NAME => REPAIR_TABLE ,
10 ORPHAN_TABLE_NAME=> ORPHAN_KEY_TABLE ,
11 KEY_COUNT => num_orphans).
12 DBMS_OUTPUT.PUT_LINE( orphan key count: || TO_CHAR(num_orphans)).
13 END.
14 /
orphan key count: 549
PL/SQL 过程已成功完成。
注意对每个索引都要执行DUMP_ORPHAN_KEYS过程。
4.使用REBUILD_FREELISTS过程来修改FREELISTS。
如果坏块发生在FREELIST列表中的中部,则FREELIST列表后面的块都无法访问。在这个例子中,模拟产生的错误的位置不在FREELIST中,因此可以跳过这一步骤,一般情况下,由于无法定位确定坏块的位置,则需要执行此过程。
SQL> BEGIN
2 DBMS_REPAIR.REBUILD_FREELISTS (
3 SCHEMA_NAME => YANGTK ,
4 OBJECT_NAME => TEST ,
5 OBJECT_TYPE => dbms_repair.table_object).
6 END.
7 /
PL/SQL 过程已成功完成。
5.执行SKIP_CORRUPT_BLOCKS过程,使后续的DML操作跳过坏块
SQL> BEGIN
2 DBMS_REPAIR.SKIP_CORRUPT_BLOCKS (
3 SCHEMA_NAME => YANGTK ,
4 OBJECT_NAME => TEST ,
5 OBJECT_TYPE => dbms_repair.table_object,
6 FLAGS => dbms_repair.skip_flag).
7 END.
8 /
PL/SQL 过程已成功完成。
SQL> SELECT OWNER, TABLE_NAME, SKIP_CORRUPT FROM DBA_TABLES
2 WHERE OWNER = YANGTK .
OWNER TABLE_NAME SKIP_COR