WEB开发网
开发学院数据库Oracle 处理Oracle数据库中的坏块 阅读

处理Oracle数据库中的坏块

 2007-05-08 12:10:02 来源:WEB开发网   
核心提示: 3) 恢复数据文件,执行以下语句RECOVER DATAFILE 'name_of_file';4) Online恢复后的数据文件,处理Oracle数据库中的坏块(3),执行以下的语句ALTER DATABASE DATAFILE 'name_of_file'

3) 恢复数据文件,执行以下语句RECOVER DATAFILE 'name_of_file';

4) Online恢复后的数据文件,执行以下的语句ALTER DATABASE DATAFILE 'name_of_file' ONLINE;

只恢复坏的block(9i以上版本可用)

使用这种方法要求数据库版本是9.2.0以上,要求配置了Rman的catalog数据库,数据库为归档方式,并且有完整的物理备份。

步骤如下:

使用RMAN的BLOCKRECOVER命令

Rman>run{blockrecover datafile 5 block 11,16;}

也可以强制使用某个SCN号之前的备份,恢复数据块。Rman>run{blockrecover datafile 5 block 11,16 restore until sequence 8505;}

通过ROWID RANGE SCAN 保存数据:

1) 先取得坏块中ROW ID的最小值,执行以下的语句SELECT dbms_rowid.rowid_create(1,,,,0) from DUAL;

2)取得坏块中的ROW ID的最大值,执行以下的语句SELECT dbms_rowid.rowid_create(1,,,+1,0) from DUAL;

3)建议一个临时表存储那些没有坏块的数据,执行以下的语句CREATE TABLE salvage_table AS SELECT * FROM corrupt_tab Where 1=2;

4)保存那些不存在坏块的数据到临时表中,执行以下的语句  INSERT INTO salvage_table SELECT /*+ ROWID(A) */ * FROM A WHERE rowid < '';
INSERT INTO salvage_table SELECT /*+ ROWID(A) */ * FROM A WHERE rowid >= '‘;

5) 根据临时表中的数据重建表,重建表上的索引,限制。

使用10231诊断事件,在做全表扫描的时候跳过坏块

可以在session级别设定ALTER SESSION SET EVENTS '10231 TRACE NAME CONTEXT FOREVER, LEVEL 10';

上一页  1 2 3 4  下一页

Tags:处理 Oracle 数据库

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