大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
如果数据库是归档方式下,并且有完整的物理备份,就可以使用此方法来恢复。
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的方法取出没有坏块数据,然后重建表,表上的索引和限制。
开启了归档 每天都有备份
如果确实是块损坏/坏块 那么在有物理备份和归档的前提下 直接对坏块做recover 就可以了,没有那么麻烦。
如果自己搞不定可以找诗檀软件专业ORACLE数据库修复团队成员帮您恢复!
诗檀软件专业数据库修复团队
---设置内部事件,使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数据库的坏块问题是个让人比较头痛的问题,主要分为逻辑坏块和物理坏块,逻辑坏块就是数据文件里的逻辑关系出现的混乱,这一般是由于数据库的BUG导致的。物理坏块就是数据文件中的数据不存在任何意义,没有任何逻辑和结构,造成物理坏块多因为服务器IO系统故障导致的。