Oracle中修復數(shù)據(jù)塊的損壞
1、先創(chuàng)建一個用于實驗的表空間
create tablespace block datafile size 1M extent management local–因為是11g所以使用了AMS
alter user ff default tablespace block;
alter user ff quota unlimited on block;
2、損壞數(shù)據(jù)文件
關閉database后用編輯器隨便修改幾個字符,然后啟動database
當訪問相關被損壞的block時,將會遇到錯誤
3、對此使用dbv檢查數(shù)據(jù)文件
dbv file=block.dbf blocksize=8192
假設獲得第35塊被損壞了
4、恢復步驟
①select tablespace_name, segment_type, owner, segment_name from dba_extents where file_id=4 and 35 between block_id and block_id+blocks-1;
如果確定損失的是數(shù)據(jù),就ok
設置內部事件,設置在全表掃描時跳過損壞的數(shù)據(jù)塊
alter system set events=’10231 trace name context forever,level 10′;
隨后,可以用exp和imp進行導入導出,進行恢復。但這畢竟導致相依blocks中數(shù)據(jù)的丟失。
②rman的塊媒體恢復(BMR)
使用BMR恢復可以大量降低恢復的時間,可以使datafile仍然處于在線的狀態(tài)。RMAN在BMR恢復時,先在full或level 0的備份集中查詢相應的塊的內容,并恢復,隨后使用 redo log進行恢復,而不使用level 1備份集。
在恢復之前,首先要查找到corrupt blocks:在db中,v$database_block_corruption 視圖顯示了rman、analyze、dbv和sql查詢等操作中獲悉的corrupt block信息。此視圖記錄的記錄數(shù)據(jù)有兩類:
*物理的corruption:無法辨識該數(shù)據(jù)塊,checksum、header、footer校驗錯誤
*邏輯corruption:chechsum、header、footer校驗是正確的,但是該數(shù)據(jù)塊的內容時不一致的。
注意:BMR是不能用于恢復邏輯上的corruption的。在backup命令中checksum的校驗是
默認開啟的,可以通過NOCHECKSUM選項屬性關閉。邏輯的校驗默認是關閉的,可以
在backup、restore、recover、validate命令中添加CHECK LOGICAL開啟。
@@進行BMR的條件
1)target db必須運行在歸檔模式下,并以當前的控制文件open或mounted
2)If the target database is a standby database, then it must be in a consistent state, recovery cannot be in session, and the backup must be older than the corrupted file.
3)數(shù)據(jù)文件的備份集必須是full或level 0
4)對于BMR,rman只使用已經歸檔的redo logs
5)flashback db開啟時,rman可以用flashback logs查找corrupt block在corrupt之前的鏡像,用于恢復,加快恢復速度。
使用恢復命令恢復指定的數(shù)據(jù)塊
相關文章:
1. oracle8i學習筆記(3)2. Oracle數(shù)據(jù)庫中單行字符串函數(shù)簡介3. 講解Oracle show parameter命令的小技巧4. 省時又省力 用Oracle擴展SQL跟蹤數(shù)據(jù)5. 四大數(shù)據(jù)庫的比較(SQL Server、Oracle、Sybase和DB2)6. 講解Oracle數(shù)據(jù)庫冷備份恢復的具體步驟7. 六則Oracle數(shù)據(jù)庫系統(tǒng)使用經驗8. Oracle數(shù)據(jù)字典詳解9. Oracle 數(shù)據(jù)類型10. 關于Oracle數(shù)據(jù)庫熱備份腳本深入剖析
