聯機日誌檔案損壞問題

RAYSUNNNY發表於2014-01-02

聯機日誌檔案分2種: 當前聯機日誌 和 非當前聯機日誌
非當前聯機日誌的丟失並不會產生太大的影響,但當前聯機日誌的丟失,非常有可能會造成資料的丟失。
以下操作均在歸檔模式下操作

在啟動資料庫時,發現只是啟動到mount狀態下,報ORA-00312ORA-00313錯誤。
select * from v$log;
檢視丟失或損壞日誌是不是當前日誌。

如果丟失的是非當前聯機日誌,它的恢復是比較簡單的。
1.如果損壞的日誌檔案已經歸檔。
alter database clear logfile group n;
--用上述命令對這個日誌檔案進行重建
2.如果損壞的日誌檔案還沒有歸檔
alter database clear unarchived logfile group n;
-------------------------------------------------------------------------------------
最後就可以正常開啟資料庫了
alter database open;
由於是非當前日誌丟失,此恢復過程並不會造成資料丟失。

如果丟失的書當前聯機日誌,它非常有可能造成資料丟失
首先如果有資料庫全備份的話,使用rman先修復一下
restore database;
recover database until cancel;--能恢復到什麼程度就恢復到什麼程度
選擇auto進行恢復,出錯不管它
alter database open resetlogs;
以上做的一致性的不完全恢復,會跑日誌到現在可以用到的日誌,並回滾未提交的事務資料,丟失的是當前聯機重做日誌中的資料。
如果沒有備份的話,就只能進行不一致性恢復。
修改一致性校驗引數
alter system set "_allow_resetlogs_corruption" =true scope=spfile;
重新啟動資料庫到mount
recover database until cancel;
alter database open resetlogs;
alter system set "_allow_resetlogs_corruption" =false scope=spfile;--將引數修改回來
利用現有資料,重新建庫

     _allow_resetlogs_corruption引數設定為true時,只要資料庫啟動需要的各個物理檔案都在的話,就算資料檔案頭部和控制檔案中的那些scn值不相等,它也可以強行開啟資料庫。
這種方法是萬不得已才用的,這種做法會導致資料庫不一致,就是有可能出現已提交的資料沒被寫到資料檔案中,而未提及的事務的資料寫到了資料檔案中。

 

 

實驗1:

丟失當前聯機重做日誌檔案,用備份進行一致性的不完全恢復。

 

 

手動刪除當前日誌

 

強制重新啟動資料庫,出錯

 

rman恢復資料檔案

 

 

開啟資料庫後,檢視資料是否還在,已經不存在

 

實驗2

丟失當前日誌檔案,假設沒有備份,進行不一致性不完全恢復

 

 

 

刪除當前日誌檔案

 

 

 

開啟資料庫後,重置一致性引數

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29227735/viewspace-1066330/,如需轉載,請註明出處,否則將追究法律責任。

相關文章