Oracle如何跳过坏块,oracle数据块损坏

oracle 物理坏块 怎么不trace

如果数据库是归档方式下,并且有完整的物理备份,就可以使用此方法来恢复。

10年积累的网站设计、做网站经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先做网站后付款的网站建设流程,更有三都免费网站建设让你可以放心的选择与我们合作。

步骤如下:

1) 先offline受影响的数据文件,执行以下的语句:

ALTER DATABASE DATAFILE 'name_file' OFFLINE;

2) 保留有坏块的数据文件,然后拷贝备份的数据文件。如果恢复的数据文件要求路径不同,执行以下的语句:

ALTER DATABASE RENAME FILE 'old_name' TO 'new_name';

3) 恢复数据文件,执行以下语句:

RECOVER DATAFILE 'name_of_file';

4) Online恢复后的数据文件,执行以下的语句:

ALTER DATABASE DATAFILE 'name_of_file' ONLINE;

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

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

步骤如下:

使用RMAN的BLOCKRECOVER命令 :

Rmanrun{blockrecover datafile 5 block 11,16;}

也可以强制使用某个SCN号之前的备份,恢复数据块。

Rmanrun{blockrecover datafile 5 block 11,16 restore until sequence 8505;}

Ø 通过ROWID RANGE SCAN 保存数据

1) 先取得坏块中ROW ID的最小值,执行以下的语句:

SELECT dbms_rowid.rowid_create(1,OBJ_ID,RFN,BL,0) from DUAL;

2)取得坏块中的ROW ID的最大值,执行以下的语句:

SELECT dbms_rowid.rowid_create(1,OBJ_ID,RFN,BL+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 owner.tablename A WHERE rowid 'low_rid';

INSERT INTO salvage_table SELECT /*+ ROWID(A) */ * FROM owner.tablename A WHERE rowid = 'hi_rid‘;

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

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

可以在session级别设定:

ALTER SESSION SET EVENTS '10231 TRACE NAME CONTEXT FOREVER, LEVEL 10';

也可以在数据库级别上设定,在初始化参数中加入:event="10231 trace name context forever, level 10" ,然后重启数据库。

然后从存在坏块的表中取出不存在坏块的数据,执行以下的语句:

CREATE TABLE salvage_emp AS SELECT * FROM corrupt_table;

最后rename生成的corrupt_table为原来表的名字,并重建表上的索引和限制。

Ø 使用dbms_repair包进行恢复

使用dbms_repair标记有坏块的表,在做全表扫描的时候跳过坏块,执行以下的语句:

Execute DBMS_REPAIR.SKIP_CORRUPT_BLOCKS('schema','tablename');

然后使用exp工具或者createtable as select的方法取出没有坏块数据,然后重建表,表上的索引和限制。

oracle system01和users文件有坏块如何完美解决

开启了归档 每天都有备份

如果确实是块损坏/坏块 那么在有物理备份和归档的前提下 直接对坏块做recover 就可以了,没有那么麻烦。

如果自己搞不定可以找诗檀软件专业ORACLE数据库修复团队成员帮您恢复!

诗檀软件专业数据库修复团队

oracle如何跳过损坏数据文件将其他数据exp导出

---设置内部事件,使exp导出数据时跳过坏块

alter

system

set

events='10231

trace

name

context

forever,level

10';

导出的数据需要与备份数据合并拼接,数据恢复后

alter

system

set

events='10231

trace

name

context

off';

参考资料:

exp/imp(expdp/impdp)恢复损坏的数据块

Oracle 数据库中的出现坏块问题,该如何处理

oracle数据库的坏块问题是个让人比较头痛的问题,主要分为逻辑坏块和物理坏块,逻辑坏块就是数据文件里的逻辑关系出现的混乱,这一般是由于数据库的BUG导致的。物理坏块就是数据文件中的数据不存在任何意义,没有任何逻辑和结构,造成物理坏块多因为服务器IO系统故障导致的。


分享题目:Oracle如何跳过坏块,oracle数据块损坏
当前地址:http://azwzsj.com/article/dsdhses.html