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

如何使用DBMS_REPAIR检测和修补数据坏块

 2008-11-10 12:58:38 来源:WEB开发网   
核心提示: SQL> select object_name, block_id, corrupt_type, marked_corrupt,2 corrupt_description, repair_description3 from repair_table;OBJECT_NAME BLOCK

  SQL> select object_name, block_id, corrupt_type, marked_corrupt,
  2 corrupt_description, repair_description
  3 from repair_table;
  OBJECT_NAME BLOCK_ID CORRUPT_TYPE MARKED_COR
  ------------------------------ ---------- ------------ ----------
  CORRUPT_DESCRIPTION
  --------------------------------------------------------------------------------
  REPAIR_DESCRIPTION
  --------------------------------------------------------------------------------
  T1 3 1 FALSE
  kdbchk: row locked by non-existent transaction
  table=0 slot=0
  lockid=32 ktbbhitc=1
  mark block software corrupt

三、从坏块中进行数据抽取

从repair_table中可以知道file 6的block 3 坏了,但注意此时这个块还没有被标识为坏块,因此要在这个时候将任何有意义的数据赶快抽取出来。一旦该块被标识为坏块,整个块就会被跳过。

1、 通过ALTER SYSTEM DUMP或trace中来获取块中包含的记录数 (nrows = 3).

2、 查询损坏的object,尽量抽取尽可能多的信息。

下面的查询可以用来从坏块中抢救数据。

建立一个临时表(temp_t1)以方便数据的插入:

  SQL> create table temp_t1 as
  2 select * from system.t1
  3 where dbms_rowid.rowid_block_number(rowid) = 3
  4 and dbms_rowid.rowid_to_absolute_fno (rowid, 'SYSTEM','T1') = 6;
  Table created.
  SQL> select col1 from temp_t1;
  COL1
  ----------
  2
  3

上一页  1 2 3 4 5 6 7 8 9  下一页

Tags:如何 使用 DBMS

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