快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

万博娱乐manbext客户端:oracle处理损坏数据块



无意偶尔oracle的数据文件并没有完全被毁坏,而是只毁坏了某些数据块。孕育发生的缘故原由主如果间断或随机的I/O差错或是内存块的差错。这时可以不用做全部数据文件的规复万博娱乐manbext客户端,使datafile仍旧处在在线的状态。对此可以进行下面几种处置惩罚操作。

**oracle 9i 今后可以应用block万博娱乐manbext客户端recover敕令(BMR):

可以先经由过程视图v$database_block_corruption获适合前被毁坏的数据块信息。此视图中记录了物理和逻辑两类block corruption。

@ 物理的corruption:无法辨识该数据块,checksum、header、footer校验差错

@ 逻辑corruption:chechsum、header、footer校验是精确的,然则该数据块的内容时不同等的。

留意:BMR是不能用于规复逻辑上的cor万博娱乐manbext客户端ruption的。在backup敕令中checksum的校验是默认开启的,可以经由过程NOCHECKSUM选项属性关闭。逻辑的校验默认是关闭的,可以在backup、restore、recover、validate敕令中添加CHECK LOGICAL开启。

详细的操作措施为:

rman> blockrecover datafile n1 block n1b1,n1b2 datafile n2 block n2b1,n2b2;

**对付用户治理的备份和规复措施。假如要规复毁坏的DB,只能进行全部数据文件的规复。

sql> alter database datafile 2 offline;

sql> host ‘cp /backup/datafile1.bak /opt/demo/datafile1.dt’;

sql> recover automatic datafile 2;

sql> alter database datafile 2 online;

**假如对付存在corruption block的表的应用不频繁,在可以忍受的环境下,可以先樊篱这些blocks,待今后再规复。这就要应用dbms_repair包了。详细如下:

@ 建立修复表(修复表用于寄放表、表分区或索引的毁坏块信息)。

sql> exec dbms_repair.admin_tables(’REPAIR_TABLE’, DBMS_REPAIR.REPAIR_TABLE, DBMS_REPAIR.CREATE_ACTION);

@ 确定毁坏块的个数

sql> var cc number

sql> exec dbms_repair.check_object(’万博娱乐manbext客户端TBSPNAME’, ‘TABNAME’, corrupt_count=>:cc);

sql> print cc

@ 标记毁坏块。

sql> var fc number

sql> exec dbms_repair.fix_corrupt_blocks(’TBSPNAME’, ‘TABNAME’,fix_count=>:fc);

sql> print fc;

@ 跳过毁坏块。此操作可以使涉及到毁坏块的查询sql继承履行,跳过该blocks,然则对付DML,则仍会显示差错信息。

sql> exec dbms_repair.skip_corrupt_blocks(’TBSPNAME’, ‘TABNAME’);

@ 确定指向毁坏块的索引进口。当上面确定了表的毁坏块后,仍有可能存在索引指向毁坏块,这些索引称为“伶仃键值”。对此可以应用dbms_repair包对伶仃键值进行治理:

sql> exec dbms_repair.admin_tables(’ORPHAN_TAB’, DBMS_REPAIR, ORPHAN_TABLE, DBMS_REPAIR, CREATE_ACTION);

sql> var kc number

sql> exec dbms_repair.dump_orphar_keys(’TBSPNAME’,'INDEXNAME’, orphan_table万博娱乐manbext客户端_name=> ‘ORPHAN_TAB’, key_count=> :kc);

sql> print kc;

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

您可能还会对下面的文章感兴趣: