Oracle處理?yè)p壞數(shù)據(jù)塊的處理操作
你是否在實(shí)際操作中遇到過(guò)這樣的狀況,有的時(shí)侯Oracle的數(shù)據(jù)文件只損壞了相關(guān)的數(shù)據(jù)塊而其他的東西卻完好無(wú)損。產(chǎn)生這樣的原因主要是因?yàn)殚g斷或隨機(jī)的I/O錯(cuò)誤或是內(nèi)存塊的錯(cuò)誤。這時(shí)可以不用做整個(gè)數(shù)據(jù)文件的恢復(fù),使datafile仍然處在在線的狀態(tài)。對(duì)此可以進(jìn)行下面幾種Oracle處理?yè)p壞數(shù)據(jù)塊的處理操作。
** Oracle 9i 以后可以使用blockrecover命令(BMR):
可以先通過(guò)視圖v$database_block_corruption獲得當(dāng)前被損壞數(shù)據(jù)的數(shù)據(jù)塊信息。此視圖中記錄了物理和邏輯兩類block corruption。
@ 物理的corruption:無(wú)法辨識(shí)該數(shù)據(jù)塊,checksum、header、footer校驗(yàn)錯(cuò)誤
@ 邏輯corruption:chechsum、header、footer校驗(yàn)是正確的,但是該數(shù)據(jù)塊的內(nèi)容時(shí)不一致的。
注意:BMR是不能用于恢復(fù)邏輯上的corruption的。在backup命令中checksum的校驗(yàn)是默認(rèn)開(kāi)啟的,可以通過(guò)NOCHECKSUM選項(xiàng)屬性關(guān)閉。邏輯的校驗(yàn)?zāi)J(rèn)是關(guān)閉的,可以在backup、restore、recover、validate命令中添加CHECK LOGICAL開(kāi)啟。
具體的操作方法為:
- rman> blockrecover datafile n1 block n1b1,
n1b2 datafile n2 block n2b1,n2b2;
** 對(duì)于用戶管理的備份和恢復(fù)方法。如果要恢復(fù)Oracle處理?yè)p壞數(shù)據(jù)的DB,只能進(jìn)行整個(gè)數(shù)據(jù)文件的恢復(fù)。
- 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;
** 如果對(duì)于存在corruption block的表的使用不頻繁,在可以忍受的情況下,可以先屏蔽這些blocks,待以后再恢復(fù)。這就要使用dbms_repair包了。具體如下:
@ 建立修復(fù)表(修復(fù)表用于存放表、表分區(qū)或索引的損壞塊信息)。
- sql> exec dbms_repair.admin_tables
(’REPAIR_TABLE’, DBMS_REPAIR.REPAIR_TABLE, DBMS_REPAIR.CREATE_ACTION);
@ 確定Oracle處理?yè)p壞數(shù)據(jù)塊的個(gè)數(shù)
- sql> var cc number
- sql> exec dbms_repair.check_object
(’TBSPNAME’, ‘TABNAME’, corrupt_count=>:cc);- sql> print cc
@ 標(biāo)記損壞塊。
- sql> var fc number
- sql> exec dbms_repair.fix_corrupt_blocks
(’TBSPNAME’, ‘TABNAME’,fix_count=>:fc);- sql> print fc;
@ 跳過(guò)損壞塊。此操作可以使涉及到損壞塊的查詢sql繼續(xù)執(zhí)行,跳過(guò)該blocks,但是對(duì)于DML,則仍會(huì)顯示錯(cuò)誤信息。
- sql> exec dbms_repair.skip_corrupt_blocks(’TBSPNAME’, ‘TABNAME’);
@ 確定指向Oracle處理?yè)p壞數(shù)據(jù)塊的索引入口。當(dāng)上面確定了表的損壞塊后,仍有可能存在索引指向Oracle處理?yè)p壞數(shù)據(jù)塊,這些索引稱為“孤立鍵值”。對(duì)此可以使用dbms_repair包對(duì)孤立鍵值進(jìn)行管理:
- 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_name=> ‘ORPHAN_TAB’, key_count=> :kc);- sql> print kc;
上述的相關(guān)內(nèi)容就是對(duì)Oracle處理?yè)p壞數(shù)據(jù)塊的描述,希望會(huì)給你帶來(lái)一些幫助在此方面。
【編輯推薦】