聯機重做日誌檔案的恢復
說明
針對聯機重做日誌檔案,我們並不需要做特殊的備份,因為他的存在特殊性,oracle幾乎每時每刻都在寫入應用日誌檔案,只要對其有一定的冗餘處理即可,oracle會劃分日誌檔案組,每個組中還會包含多個成員,保證日誌檔案的安全性,但不能保證日誌檔案都已經損壞,如磁碟損壞等情況。針對日誌檔案有無寫入應用,這裡有不同的情況來恢復。
丟失非當前聯機日誌
1 查詢日誌檔案狀態
SQL>select group#,thread#,sequence#,members,archived,status from v$log;
GROUP# THREAD# SEQUENCE# MEMBERS ARC STATUS ---------- ---------- ---------- ---------- --- ---------------- 1 1 4 1 NO CURRENT 3 1 3 1 YES INACTIVE 2 1 2 1 YES INACTIVE |
這裡有必要說一下各種狀態資訊,對於status有6種不同的值
unused:表示日誌檔案還沒有被應用過,一般在資料庫剛剛建立或者open resetlogs後
current:表示當前日誌
active:表示活動的,即使不是當前的日誌,也代表了正在被使用或者將要被使用
clearing:表示日誌正在被清空,在資料庫執行:alter database clear logfile後,日誌會 成為這個狀態,執行完成後會變為unused;
clearing_current:表示日誌正在被清空,但是由於清空出錯,導致無法完成清空二報錯。
Inactive:表示不活動狀態,日誌已經被歸檔或者已經寫入資料檔案,日誌檔案已經可 以被重用。
查詢到日誌1號、2號日誌狀態當前為非活動。
2 模擬丟失日誌檔案
SQL>shutdown immediate; [oracle@dev206 oracle]$ rm -rf /oracle/u01/app/oracle/oradata/orcl/redo03.log |
啟動資料庫
SQL>conn / as sysdba; SQL>startup; ORA-32004: obsolete and/or deprecated parameter(s) specified ORACLE instance started.
Total System Global Area 1224736768 bytes Fixed Size 2020384 bytes Variable Size 352324576 bytes Database Buffers 855638016 bytes Redo Buffers 14753792 bytes Database mounted. ORA-00313: open failed for members of log group 3 of thread 1 ORA-00312: online log 3 thread 1: '/oracle/u01/app/oracle/oradata/orcl/redo03.log' |
啟動失敗,丟失找不到日誌檔案redo03.log,資料庫啟動到mount狀態
3 修復丟失的聯機重做日誌檔案
SQL>alter database clear logfile group 3; |
4 啟動資料庫
SQL>alter database open; |
5 檢查日誌檔案
通過檢視V$log檢視和檢視檔案,新的日誌檔案已經生成。
丟失當前聯機日誌
如果丟失當前聯機日誌檔案,即使有備份也肯能會丟失資料。並且資料庫在open狀態,丟失線上日誌檔案會造成資料庫的崩潰。
1 查詢日誌檔案狀態
SQL> select group#,thread#,sequence#,members,archived,status from v$log;
GROUP# THREAD# SEQUENCE# MEMBERS ARC STATUS ---------- ---------- ---------- ---------- --- ---------------- 1 1 13 1 YES INACTIVE 2 1 15 1 NO CURRENT 3 1 14 1 YES INACTIVE |
2 模擬丟失日誌檔案
SQL>shutdown abort; SQL>startup mount; [oracle@dev206 oracle]$ rm -rf /oracle/u01/app/oracle/oradata/orcl/redo02.log |
啟動資料庫
SQL> alter database open; alter database open * ERROR at line 1: ORA-00313: open failed for members of log group 2 of thread 1 ORA-00312: online log 2 thread 1: '/oracle/u01/app/oracle/oradata/orcl/redo02.log' ORA-27037: unable to obtain file status Linux-x86_64 Error: 2: No such file or directory Additional information: 3 |
啟動失敗,丟失找不到日誌檔案redo02.log
3 嘗試直接修復丟失的聯機重做日誌檔案
SQL> alter database clear logfile group 2; alter database clear logfile group 2 * ERROR at line 1: ORA-01624: log 2 needed for crash recovery of instance orcl (thread 1) ORA-00312: online log 2 thread 1: '/oracle/u01/app/oracle/oradata/orcl/redo02.log' |
此時由於丟失資訊,無法正常恢復。
4 執行不完全恢復
如果資料庫開啟歸檔並有備份,可以利用備份進行不完全恢復,會丟失資料。
如果沒有備份的情況下,只能強制恢復了,需要利用oracle的內建函式跳過一致性檢查。
SQL>alter system set "_allow_resetlogs_corruption"=true scope=spfile; SQL>shutdown immediate; SQL>startup mount; |
5 恢復資料庫
SQL>recover database until cancel; ORA-00279: change 6078001 generated at 03/11/2013 13:42:25 needed for thread 1 ORA-00289: suggestion : /oracle/u01/app/oracle/oradata/orcl/archive/1_15_809543188.dbf ORA-00280: change 6078001 for thread 1 is in sequence #15
Specify log: { cancel ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below ORA-01194: file 1 needs more recovery to be consistent ORA-01110: data file 1: '/oracle/u01/app/oracle/oradata/orcl/system01.dbf'
ORA-01112: media recovery not started SQL>alter database open resetlogs; |
此時資料庫啟動恢復完成
6 善後處理
此時資料庫雖然恢復完成,但是通過檢視alert日誌後可能會出現ORA-600的錯誤,包括SCN混亂或者undo表空間的錯誤等,造成這種問題的原因有資料庫在丟失日誌檔案時的資料不一致,包括提交的資料未寫入資料檔案,未提交的資料寫入了資料檔案等情況。此時我們可以通過export資料後新建庫在import新庫來解決。
鑑於日誌檔案的重要性,但是又沒有日誌檔案的備份,一定要做好聯機日誌檔案的冗餘。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26252014/viewspace-755735/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 丟失聯機重做日誌檔案的恢復
- 聯機重做日誌丟失的恢復
- rman恢復--丟失聯機重做日誌的恢復
- 【備份與恢復】恢復受損的複用聯機重做日誌檔案
- 丟失所有重做日誌檔案的恢復例子丟失所有重做日誌檔案的恢復例子如下:
- oracle 聯機重做日誌檔案Oracle
- 【備份與恢復】重建受損的聯機重做日誌檔案成員
- 聯機重做日誌、歸檔日誌、備用重做日誌
- 重做日誌的恢復
- 恢復重做日誌
- 【備份恢復】恢復 丟失已歸檔重做日誌檔案
- oracle 恢復重做日誌Oracle
- Oracle重做日誌檔案損壞或丟失後的恢復Oracle
- 聯機日誌檔案損壞後的恢復方法[轉帖]
- Oracle 聯機重做日誌檔案(ONLINE LOG FILE)Oracle
- 【備份恢復】 恢復重做日誌組成員
- 【REDO】刪除聯機重做日誌檔案組的注意事項
- 損壞聯機日誌 恢復
- MySQL重做日誌恢復資料的流程MySql
- 當前聯機日誌和其他聯機日誌恢復的區別
- 丟失當前current重做日誌檔案下恢復資料庫資料庫
- 【恢復】Redo日誌檔案丟失的恢復
- 損壞聯機日誌的恢復方法
- 【故障恢復】【驚魂】ORACLE聯機日誌檔案無故全部消失Oracle
- 重做日誌檔案中的SCN
- data guard中增加與刪除主備資料庫中的聯機重做日誌與備重做日誌檔案資料庫
- 2 Day DBA-管理Oracle例項-管理聯機重做日誌-切換日誌檔案Oracle
- 【REDO】刪除聯機重做日誌檔案組成員的注意事項
- Oracle恢復例項之一:資料檔案、控制檔案、聯機日誌丟失Oracle
- Oracle歸檔日誌比聯機重做日誌小很多的情況總結Oracle
- 恢復歸檔日誌檔案的常用方法
- 當丟失控制檔案但重做日誌檔案還在時如何恢復資料庫資料庫
- Oracle恢復例項之二:Inactive聯機日誌檔案丟失Oracle
- 2 Day DBA-管理Oracle例項-管理聯機重做日誌- 多路複用聯機重做日誌Oracle
- 線上修改重做日誌檔案的大小
- 修改Oracle重做日誌檔案的大小Oracle
- 重做日誌檔案的相關操作
- 聯機日誌損壞恢復實驗