丟失當前的聯機重做日誌檔案 redo檔案

2021-08-26 16:41:24 字數 3271 閱讀 1217

首先需要說明,如果當前的聯機重做日誌檔案丟失,即使有備份,也肯定會丟失資料(運氣好的話,也許不會丟失業務資料,不過這種機率非常非常小)。

1.模擬檔案丟失

手動刪除當前的聯機重做日誌檔案(如何確定哪個重做日誌檔案才是當前狀態,就不用再描述了吧),這裡注意一點,資料庫在開啟狀態時,丟失當前的聯機重做日誌檔案會造成資料庫崩潰,也就是資料庫應該是處於不一致狀態,為了盡可能貼近實際情況,這裡在關閉資料庫時通過shutdown abort方式關閉:

sql>shutdownabort 

oracleinstanceshutdown.

sql>startupmount;

oracleinstancestarted.

totalsystemglobalarea167772160bytes

fixedsize1295608bytes

variablesize83888904bytes

databasebuffers75497472bytes

redobuffers7090176bytes

databasemounted.

sql>hostdelf:\oracle\oradata\jssbook\redo03.log

然後嘗試啟動資料庫:

sql>alter

database

open;

alter

database

open

* erroratline1:

ora-00313:openfailedformembersofloggroup3ofthread1

ora-00312:onlinelog3thread1:'

f:\oracle\oradata\jssbook\redo03.log'

ora-27041:unableto

openfile

osd-04002:無法開啟檔案

o/s-error:(os2)系統找不到指定的檔案。

2.嘗試直接修復聯機重做日誌檔案

嘗試通過alter database clear logfile命令修復丟失的重做日誌檔案:

sql>alter

databaseclearlogfilegroup3;

alter

databaseclearlogfilegroup3

* erroratline1:

ora-01624:log3neededforcrashrecoveryof

instancejssbook(thread1)

ora-00312:onlinelog3thread1:'f:\oracle\

oradata\jssbook\redo03.log'

根據錯誤資訊可知,丟失的重做日誌檔案中包含必備的重做資訊,無法被clear。

3.執行不完全恢復

如果是歸檔模式並且有備份,建議通過備份進行不完全恢復,正常情況下只丟失當前聯機重做日誌檔案中的資料。

如果沒有備份,就只能強制恢復了。這裡我們需要修改乙個隱藏的初始化引數:

sql>altersystemset

"_allow_resetlogs_corruption"=

truescope=spfile;

systemaltered.

_allow_resetlogs_corruption是乙個隱藏引數,設定該引數值為true後,oracle在open時會跳過一些一致性的檢查。

關閉並重新啟動資料庫到mount狀態:

sql>shutdownimmediate 

ora-01109:database

notopen

databasedismounted.

oracleinstanceshutdown.

sql>startupmount

oracleinstancestarted.

totalsystemglobalarea167772160bytes

fixedsize1295608bytes

variablesize83888904bytes

databasebuffers75497472bytes

redobuffers7090176bytes

databasemounted.

對資料庫進行不完全恢復:

sql>recoverdatabaseuntilcancel; 

ora-00279:change375734generatedat05/04/2009

15:41:22neededforthread1

ora-00289:suggestion:f:\oracle\oradata\jssbook\archive\

arc00039_0684946360.001

ora-00280:change375734forthread1is

insequence#39

specifylog:

cancel

ora-01547:warning:recoversucceededbut

openresetlogswouldgeterrorbelow

ora-01194:file1needsmorerecoverytobeconsistent

ora-01110:datafile1:'f:\oracle\oradata\jssbook\system01.dbf'

ora-01112:mediarecoverynotstarted

通過openresetlogs方式開啟資料庫:

sql>alter

database

openresetlogs;

databasealtered.

4.善後處理

這種恢復方式是沒有辦法中的辦法,通過這種方式恢復,有可能會導致資料庫中資料的不一致,如已提交的資料未寫入資料檔案,而未提交的資料倒是被寫入了資料檔案。即使資料庫被開啟,也能夠訪問其中的表和資料,也只是看起來正常,如果你注意關注資料庫的alert檔案(預設路徑在$oracle_base\admin\sid\bdump\alert_sid.log,注意替換上述路徑中的sid為正確的sid),有可能其中已經報出了無數個ora-00600的錯誤。因此,如果資料庫能夠順利開啟,強烈建議馬上通過export邏輯匯出的方式執行一次full export。然後新建資料庫,再通過import匯入之前匯出的二進位制檔案。

Oracle聯機重做日誌檔案

一 oracle中的幾類日誌檔案 redo log files 聯機重做日誌 archive log files 歸檔日誌 alert log files 告警日誌 trace files 跟蹤日誌 user dump dest 使用者跟蹤日誌 backupground dump dest 程序跟蹤...

聯機重做日誌檔案與歸檔日誌檔案

日誌檔案分為重做日誌檔案 redo log file 和歸檔日誌檔案 archive log file 重做日誌redo log file是lgwr程序從oracle例項中的redo log buffer寫入的,是迴圈利用的。就是說乙個redo log file group 寫滿後,才寫下乙個。當所...

缺失重做日誌檔案的資料庫恢復

在只有控制檔案和資料檔案而沒有重做日誌檔案的情況下,恢復資料庫的步驟如下 1.將控制檔案和資料檔案複製到相應目錄下,啟動資料庫到mount狀態 start mount 2.使用備份的控制檔案恢復資料庫 recover database until cancel using backup contro...