程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> Oracle數據庫在線重做日志被刪除的幾種恢復方法

Oracle數據庫在線重做日志被刪除的幾種恢復方法

編輯:Oracle教程

Oracle數據庫在線重做日志被刪除的幾種恢復方法


Oracle數據庫的在線重做日志中包含了數據庫中所有數據的操作記錄,我們可以利用重做日志做很多的操作,例如日志挖掘。   有時候,因為種種原因,我們的在線日志被人誤刪除或者意外損壞掉,我們應該如何進行恢復呢,其實很簡單,看下面內容:   我們通過刪除在線日志模擬日志被誤刪除的情況:   [oracle@test orcl]$ rm redo* [oracle@test orcl]$ ls -l redo* ls: 無法訪問redo*: 沒有那個文件或目錄 [oracle@test orcl]$ sqlplus / as sysdba SQL> startup mount   ORACLE 例程已經啟動。 。。。   數據庫裝載完畢。   因為我們只是缺失在線重做日志,所以數據庫是可以啟動到mount狀態的,mount狀態的數據庫只會打開控制文件,並不會去校驗每個數據文件的狀態,校驗動作會在open階段進行。   SQL> alter database open; alter database open * 第 1 行出現錯誤: ORA-03113: 通信通道的文件結尾 進程 ID: 4607 會話 ID: 125 序列號: 5 打開數據庫的話,會報錯,並且數據庫會強行關閉   下面我們使用resetlogs的方法嘗試打開數據庫:   SQL> recover database until cancel; 完成介質恢復。 SQL> alter database open; alter database open * 第 1 行出現錯誤: ORA-01589: 要打開數據庫則必須使用 RESETLOGS 或 NORESETLOGS 選項 SQL> alter database open resetlogs; 數據庫已更改。   resetlogs打開數據庫必須在數據庫不完全恢復之後才可以用,而且在不完全恢復後必須使用 RESETLOGS 或 NORESETLOGS 選項   除了這種方法以外,我們還可以通過清除logfile的方法進行打開數據庫,如下: 首先將數據庫啟動到mount狀態   查詢v$log視圖: SQL> select * from v$log;     GROUP#    THREAD#  SEQUENCE#      BYTES  BLOCKSIZE  MEMBERS ARC STATUS       FIRST_CHANGE# FIRST_TIME  NEXT_CHANGE# NEXT_TIME ---------- ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ------------------- ------------ -------------------  1    1       1  134217728   5121 NO  CURRENT      984719 2015-09-16 16:04:30   2.8147E+14  3    1       0  134217728   5121 YES UNUSED   0          0  2    1       0  134217728   5121 YES UNUSED   0          0   如果ARCHIVED欄位是YES的話,我們可以通過   alter database clear logfile 命令進行清除,如果是No的話,我們可以通過 alter database clear unarchived logfile 進行強行清除 SQL> alter database clear logfile group 2; 數據庫已更改。 SQL> alter database clear logfile group 3; 數據庫已更改。 SQL> alter database clear unarchived logfile group 1; alter database clear unarchived logfile group 1 * 第 1 行出現錯誤: ORA-01624: 日志 1 是緊急恢復實例 orcl (線程 1) 所必需的 ORA-00312: 聯機日志 1 線程 1: '/app/oradata/orcl/redo01.log'   但是由於group 1是當前的在線日志,再加上之前我是使用的 shutdown abort進行關閉的數據庫   數據文件狀態不一致,需要使用當前日志進行實例恢復,所以無法通過清除日志命令進行清除   如果數據庫文件狀態一致,做到這裡我們就可以通過 alter database open命令打開數據庫了,但是如果碰到這樣的不一致的情況,還需要通過 resetlogs打開數據庫,如下:
SQL> recover database until cancel;
ORA-00279: 更改 984722 (在 09/16/2015 16:04:43 生成) 對於線程 1 是必需的
ORA-00289: 建議: /app/archivelog/orcl_1_1_890582670.dbf
ORA-00280: 更改 984722 (用於線程 1) 在序列 #1 中
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
AUTO
ORA-00308: cannot open archived log '/app/archivelog/orcl_1_1_890582670.dbf'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
ORA-00308: cannot open archived log '/app/archivelog/orcl_1_1_890582670.dbf'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
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: '/app/oradata/orcl/system01.dbf'
SQL> recover database until cancel  
ORA-00279: 更改 984722 (在 09/16/2015 16:04:43 生成) 對於線程 1 是必需的
ORA-00289: 建議: /app/archivelog/orcl_1_1_890582670.dbf
ORA-00280: 更改 984722 (用於線程 1) 在序列 #1 中

指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
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: '/app/oradata/orcl/system01.dbf'
ORA-01112: 未啟動介質恢復
SQL> alter database open resetlogs;
alter database open resetlogs
*
第 1 行出現錯誤:
ORA-01194: 文件 1 需要更多的恢復來保持一致性
ORA-01110: 數據文件 1: '/app/oradata/orcl/system01.dbf'

 

  但是我們發現,不完全恢復是失敗的,這個時候通過 resetlogs打開數據庫也是不可能的,那麼我們只能通過應用隱含參數,通過隱含參數使狀態不一致的數據庫打開,如下:   SQL> create pfile='/home/oracle/p2.ora' from spfile; 在pfile裡面增加*._allow_resetlogs_corruption=TRUE echo "*._allow_resetlogs_corruption=TRUE">>p2.ora 然後通過我們新建的pfile打開數據庫到mount狀態: SQL> startup mount pfile='/home/oracle/p2.ora' ORACLE 例程已經啟動。 Total System Global Area  334036992 bytes Fixed Size    2253024 bytes Variable Size  171970336 bytes Database Buffers  155189248 bytes Redo Buffers    4624384 bytes   數據庫裝載完畢。   然後通過 resetlogs的方法打開數據庫 SQL> alter database open resetlogs;   數據庫已更改。   因為我們是用我們臨時生成的pfile進行啟動的,所以還要完成最後一步,重啟數據庫即可好了,數據庫打開了,但是因為我們的數據庫從異常情況下恢復過來,可能是會有問題的,所以建議做好備份,以防數據丟失。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved