WEB开发网
开发学院数据库Oracle 如何使用DBMS_REPAIR检测和修补数据坏块 阅读

如何使用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>

注意此时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工程师的指导下进行。

上一页  4 5 6 7 8 9 

Tags:如何 使用 DBMS

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接