Oracle數(shù)據(jù)庫Redo故障的恢復
Oracle數(shù)據(jù)庫功能性很好,應用也很廣泛,在進行Oracle數(shù)據(jù)庫的操作時難免會出現(xiàn)一些故障,本文主要為大家介紹Oracle數(shù)據(jù)庫Redo故障的恢復。
一.丟失inactive日志文件組的恢復:
由于inactive日志文件組表示已經(jīng)完成了檢查點(dirty數(shù)據(jù)已經(jīng)被寫入數(shù)據(jù)文件)。數(shù)據(jù)庫本身不會發(fā)生數(shù)據(jù)庫丟失,如果在這個時候相應的redo丟失/損壞,可以通過clear重建日志文件組恢復。
通過命令:
alter database clear logfile group n
如果數(shù)據(jù)庫模式是archived的,則需要強制清除
alter database clear unarchived logfile group n
二.丟失active或current日志文件組的恢復:
丟失情況分兩種:
一個是正常關閉數(shù)據(jù)庫(如shutdown immediate)
另一個是異常關閉數(shù)據(jù)庫(如shutdown abort)
1.在損失當前日志時,數(shù)據(jù)庫是正常關閉狀態(tài)。
由于shutdown immediate會執(zhí)行全面的checkpoint,所以當前日志在實例恢復時可以不需要redo
在Oracle 8i中我們完全可以通過alter database clear logfile group n來進行恢復.
但是在Oracle 9i中,則可能無法對current的redo日志進行clear,需要通過recoverdatabaseuntil cancel恢復后(必須要做的)
用resetlogs選項打開。
比如:
alter database clear logfile group n
recover database until cancel;
alter database open resetlogs;
2.在損失當前日志時,數(shù)據(jù)庫是異常關閉的:
這種情況下,由于沒有在執(zhí)行全面檢查點時,數(shù)據(jù)庫就已經(jīng)關閉了,那么Oracle在進行實例恢復的時候必須要求當前的日志,否則Oracle數(shù)據(jù)庫將無法open.
這樣的情況下,我們通常需要從備份中恢復數(shù)據(jù)文件,通過應用歸檔日志進行向前推演。直到***一個完好的日志文件,然后可以通過resetlogs啟動數(shù)據(jù)庫完成恢復。那么丟失的數(shù)據(jù)則是被損壞的日志文件中的數(shù)據(jù)。
注意:_allow_resetlogs_corruption是Oracle中的一個隱含參數(shù),如果系統(tǒng)實在不能resetlogs方式打開的后只能出此下策,在pfile進行相應設置打開數(shù)據(jù)庫。該函數(shù)的含義是,允許在破壞一致性的情況下強制重置日志,打開數(shù)據(jù)庫。_allow_resetlogs_corruption將使用所有數(shù)據(jù)文件最舊的SCN打開數(shù)據(jù)庫,所以通常來講需要保證SYSTEM表空間擁有最舊的SCN。在強制打開數(shù)據(jù)庫之后,可能因為各種原因會有ora-600。
上文介紹的知識Oracle數(shù)據(jù)庫Redo故障恢復的部分方法,如果大家知道更好更有效的恢復方法,歡迎與大家分享。
【編輯推薦】
- Oracle數(shù)據(jù)庫索引創(chuàng)建要做到三個適當
 - 如何將Oracle數(shù)據(jù)庫的普通表轉換成分區(qū)表
 - 講解Oracle數(shù)據(jù)庫提供的多種安全性措施
 















 
 
 
 
 
 
 