rman恢復--丟失聯機重做日誌的恢復
聯機重做日誌大致分為兩種狀態:當前正在寫的和當前沒有寫的,丟失不同狀態的聯機重做日誌檔案,其處理方式也是不一樣的,下面分別介紹。
[oracle@oracle orcl]$ rm redo02.log
Total System Global Area 835104768 bytes
Fixed Size 2217952 bytes
Variable Size 528484384 bytes
Database Buffers 301989888 bytes
Redo Buffers 2412544 bytes
Database mounted.
ORA-03113: 通訊通道的檔案結尾
程式 ID: 6762
會話 ID: 1 序列號: 5
Connected to an idle instance.
SQL> startup mount;
ORACLE instance started.
Total System Global Area 835104768 bytes
Fixed Size 2217952 bytes
Variable Size 528484384 bytes
Database Buffers 301989888 bytes
Redo Buffers 2412544 bytes
Database mounted.
SQL> alter database clear logfile group 2;
Database altered.
SQL> alter database open;
Database altered.
alter database open
*
ERROR at line 1:
ORA-00313: 無法開啟日誌組 1 (用於執行緒 1) 的成員
ORA-00312: 聯機日誌 1 執行緒 1: '/u01/app/oracle/oradata/orcl/redo01.log'
ORA-27037: 無法獲得檔案狀態
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
SQL> startup mount;
ORACLE instance started.
Total System Global Area 835104768 bytes
Fixed Size 2217952 bytes
Variable Size 528484384 bytes
Database Buffers 301989888 bytes
Redo Buffers 2412544 bytes
Database mounted.
SQL> recover database until cancel;
ORA-00279: 更改 840952 (在 12/25/2013 00:20:34 生成) 對於執行緒 1 是必需的
ORA-00289: 建議:
/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2013_12_25/o1_mf_1_1_%u_.arc
ORA-00280: 更改 840952 (用於執行緒 1) 在序列 #1 中
Specify log: {=suggested | filename | AUTO | CANCEL}
cancel
聯機重做日誌檔案須知
檢視當前資料庫中聯機重做日誌檔案的狀態
SQL> select group#,thread#,sequence#,members,archived,status from v$log;
GROUP# THREAD# SEQUENCE# MEMBERS ARC STATUS
---------- ---------- ---------- ---------- --- ----------------
1 1 1 1 NO CURRENT
2 1 0 1 YES UNUSED
3 1 0 1 YES UNUSED
GROUP# THREAD# SEQUENCE# MEMBERS ARC STATUS
---------- ---------- ---------- ---------- --- ----------------
1 1 1 1 NO CURRENT
2 1 0 1 YES UNUSED
3 1 0 1 YES UNUSED
注意檢視中的status列,該列標示著聯機重做日誌的狀態,共有6中可選值
UNUSED ---標示從未用過。一般剛剛建立或open resetlogs開啟後,聯機重做日誌組為這一狀態。
CURRENT ---表示當前的。
ACTIVE ---表示活動的。雖然不是當前狀態,但也有可能正被使用或要被使用,比如crash recovery時可能存在這中聯機重做日誌組
CLEARING ---日誌正在清空,當執行 alter database clear logfile語句時,該日誌組狀態為這種狀態,語句執行完畢後,操作的日誌組狀態變為UNUSED.
INACTIVE ---不活動狀態。表示改組日誌中的內容已經被歸檔或順利寫入資料檔案,該組日誌可被繼續重用。
CLEARING_CURRENT ---日誌正在清空,但是由於清空出錯,如I/O裝置無法訪問,導致清空工作不能順利完成。
由上述檢視可見,group 1 的聯機重做日誌組位當前狀態,然後在查詢v$logfile檢視,即可看到聯機重做日誌組對應的檔案
SQL> select group#,member from v$logfile;
GROUP#
----------
MEMBER
--------------------------------------------------------------------------------
1
/u01/app/oracle/oradata/orcl/redo01.log
2
/u01/app/oracle/oradata/orcl/redo02.log
3
/u01/app/oracle/oradata/orcl/redo03.log
SQL>
GROUP#
----------
MEMBER
--------------------------------------------------------------------------------
1
/u01/app/oracle/oradata/orcl/redo01.log
2
/u01/app/oracle/oradata/orcl/redo02.log
3
/u01/app/oracle/oradata/orcl/redo03.log
SQL>
group 1 對應的是/u01/app/oracle/oradata/orcl/redo01.log,就是當前的聯機重做日誌檔案。
丟失非當前的聯機重做日誌檔案
1:模擬檔案丟失
步驟:先shutdown ,在delete日誌檔案,在startup
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
Database closed.
Database dismounted.
ORACLE instance shut down.
[oracle@oracle ~]$ cd /u01/app/oracle/oradata/orcl/
[oracle@oracle orcl]$ ll
total 2008060
-rw-r----- 1 oracle oinstall 9748480 Dec 24 22:34 control01.ctl
-rw-r----- 1 oracle oinstall 52436992 Dec 24 22:34 orcl_data.dbf
-rw-r----- 1 oracle oinstall 52429312 Dec 24 22:34 redo01.log
-rw-r----- 1 oracle oinstall 52429312 Dec 24 22:07 redo02.log
-rw-r----- 1 oracle oinstall 52429312 Dec 24 22:07 redo03.log
-rw-r----- 1 oracle oinstall 629153792 Dec 24 22:34 sysaux01.dbf
-rw-r----- 1 oracle oinstall 734011392 Dec 24 22:34 system01.dbf
-rw-r----- 1 oracle oinstall 72359936 Dec 24 22:09 temp01.dbf
-rw-r----- 1 oracle oinstall 52436992 Dec 24 22:34 test_data.dbf
-rw-r----- 1 oracle oinstall 387981312 Dec 24 22:34 undotbs01.dbf
-rw-r----- 1 oracle oinstall 5251072 Dec 24 22:34 users01.dbf
[oracle@oracle orcl]$ ll
total 2008060
-rw-r----- 1 oracle oinstall 9748480 Dec 24 22:34 control01.ctl
-rw-r----- 1 oracle oinstall 52436992 Dec 24 22:34 orcl_data.dbf
-rw-r----- 1 oracle oinstall 52429312 Dec 24 22:34 redo01.log
-rw-r----- 1 oracle oinstall 52429312 Dec 24 22:07 redo02.log
-rw-r----- 1 oracle oinstall 52429312 Dec 24 22:07 redo03.log
-rw-r----- 1 oracle oinstall 629153792 Dec 24 22:34 sysaux01.dbf
-rw-r----- 1 oracle oinstall 734011392 Dec 24 22:34 system01.dbf
-rw-r----- 1 oracle oinstall 72359936 Dec 24 22:09 temp01.dbf
-rw-r----- 1 oracle oinstall 52436992 Dec 24 22:34 test_data.dbf
-rw-r----- 1 oracle oinstall 387981312 Dec 24 22:34 undotbs01.dbf
-rw-r----- 1 oracle oinstall 5251072 Dec 24 22:34 users01.dbf
[oracle@oracle orcl]$ rm redo02.log
SQL> startup
ORACLE instance started.Total System Global Area 835104768 bytes
Fixed Size 2217952 bytes
Variable Size 528484384 bytes
Database Buffers 301989888 bytes
Redo Buffers 2412544 bytes
Database mounted.
ORA-03113: 通訊通道的檔案結尾
程式 ID: 6762
會話 ID: 1 序列號: 5
2:恢復丟失的聯機重做日誌檔案
這裡group 2 對應的聯機重做日誌檔案丟失,可以通過 alter database clear logfile 命令重建日誌即可,如下
SQL> startup
ORACLE instance started.
Total System Global Area 835104768 bytes
Fixed Size 2217952 bytes
Variable Size 528484384 bytes
Database Buffers 301989888 bytes
Redo Buffers 2412544 bytes
Database mounted.
ORA-03113: 通訊通道的檔案結尾
程式 ID: 6762
會話 ID: 1 序列號: 5
SQL> conn /as sysdba
ORACLE instance started.
Total System Global Area 835104768 bytes
Fixed Size 2217952 bytes
Variable Size 528484384 bytes
Database Buffers 301989888 bytes
Redo Buffers 2412544 bytes
Database mounted.
ORA-03113: 通訊通道的檔案結尾
程式 ID: 6762
會話 ID: 1 序列號: 5
SQL> conn /as sysdba
Connected to an idle instance.
SQL> startup mount;
ORACLE instance started.
Total System Global Area 835104768 bytes
Fixed Size 2217952 bytes
Variable Size 528484384 bytes
Database Buffers 301989888 bytes
Redo Buffers 2412544 bytes
Database mounted.
SQL> alter database clear logfile group 2;
Database altered.
SQL> alter database open;
Database altered.
資料庫就可以正常開啟了。
由上所述,對於非當前的聯機重做日誌檔案損壞,其修復過程非常簡單,並且操作安全,不會造成資料丟失。
丟失當前的聯機重做日誌檔案
1:模擬檔案丟失
手動刪除聯機重做日誌檔案,如果確認是否為當前重做日誌檔案可以根據上面操作。
注意:資料庫開啟狀態時,丟失當前的聯機重做日誌檔案會造成資料庫崩潰,也就是資料庫處於不一致的狀態,為了儘可能的貼近實際,這才在關閉資料庫時,採用了shutdown abort 方式關閉。
操作:先shutdown abort,在delete檔案,在startup
SQL> shutdown abort;
ORACLE instance shut down.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.
Total System Global Area 835104768 bytes
Fixed Size 2217952 bytes
Variable Size 528484384 bytes
Database Buffers 301989888 bytes
Redo Buffers 2412544 bytes
Database mounted.
ORACLE instance started.
Total System Global Area 835104768 bytes
Fixed Size 2217952 bytes
Variable Size 528484384 bytes
Database Buffers 301989888 bytes
Redo Buffers 2412544 bytes
Database mounted.
oracle@oracle orcl]$ rm redo01.log
[oracle@oracle orcl]$ ll
total 1956856
-rw-r----- 1 oracle oinstall 9748480 Dec 24 23:49 control01.ctl
-rw-r----- 1 oracle oinstall 52436992 Dec 24 23:39 orcl_data.dbf
-rw-r----- 1 oracle oinstall 52429312 Dec 24 23:39 redo02.log
-rw-r----- 1 oracle oinstall 52429312 Dec 24 23:39 redo03.log
-rw-r----- 1 oracle oinstall 629153792 Dec 24 23:45 sysaux01.dbf
-rw-r----- 1 oracle oinstall 734011392 Dec 24 23:44 system01.dbf
-rw-r----- 1 oracle oinstall 72359936 Dec 24 23:28 temp01.dbf
-rw-r----- 1 oracle oinstall 52436992 Dec 24 23:39 test_data.dbf
-rw-r----- 1 oracle oinstall 387981312 Dec 24 23:44 undotbs01.dbf
-rw-r----- 1 oracle oinstall 5251072 Dec 24 23:39 users01.dbf
[oracle@oracle orcl]$ ll
total 1956856
-rw-r----- 1 oracle oinstall 9748480 Dec 24 23:49 control01.ctl
-rw-r----- 1 oracle oinstall 52436992 Dec 24 23:39 orcl_data.dbf
-rw-r----- 1 oracle oinstall 52429312 Dec 24 23:39 redo02.log
-rw-r----- 1 oracle oinstall 52429312 Dec 24 23:39 redo03.log
-rw-r----- 1 oracle oinstall 629153792 Dec 24 23:45 sysaux01.dbf
-rw-r----- 1 oracle oinstall 734011392 Dec 24 23:44 system01.dbf
-rw-r----- 1 oracle oinstall 72359936 Dec 24 23:28 temp01.dbf
-rw-r----- 1 oracle oinstall 52436992 Dec 24 23:39 test_data.dbf
-rw-r----- 1 oracle oinstall 387981312 Dec 24 23:44 undotbs01.dbf
-rw-r----- 1 oracle oinstall 5251072 Dec 24 23:39 users01.dbf
啟動資料庫
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-00313: 無法開啟日誌組 1 (用於執行緒 1) 的成員
ORA-00312: 聯機日誌 1 執行緒 1: '/u01/app/oracle/oradata/orcl/redo01.log'
ORA-27037: 無法獲得檔案狀態
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
修復聯機重做日誌檔案
1:嘗試通過 alter database clear logfile 命令修復丟失的重做日誌檔案
SQL> alter database clear logfile group 1;
alter database clear logfile group 1
*
ERROR at line 1:
ORA-01624: 日誌 1 是緊急恢復例項 orcl (執行緒 1) 所必需的
ORA-00312: 聯機日誌 1 執行緒 1: '/u01/app/oracle/oradata/orcl/redo01.log'
alter database clear logfile group 1
*
ERROR at line 1:
ORA-01624: 日誌 1 是緊急恢復例項 orcl (執行緒 1) 所必需的
ORA-00312: 聯機日誌 1 執行緒 1: '/u01/app/oracle/oradata/orcl/redo01.log'
根據錯誤資訊可知,丟失的重做日誌檔案中包含必備的重做資訊,無法被clear。
2:執行不完全恢復
如果是歸檔模式下,並且有備份,建議通過備份進行不完全恢復,正常情況下只丟失當前的重做日誌檔案中的資料。
recover database until cancel;
如果沒有備份,就只能強制恢復了。這裡我們需要修改一個隱藏的初始化引數:
SQL> alter system set "_allow_resetlogs_corruption"=true scope=spfile;
SQL> shutdown immediate;
ORA-01109: 資料庫未開啟
Database dismounted.
ORACLE instance shut down.
ORA-01109: 資料庫未開啟
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.
Total System Global Area 835104768 bytes
Fixed Size 2217952 bytes
Variable Size 528484384 bytes
Database Buffers 301989888 bytes
Redo Buffers 2412544 bytes
Database mounted.
SQL> recover database until cancel;
ORA-00279: 更改 840952 (在 12/25/2013 00:20:34 生成) 對於執行緒 1 是必需的
ORA-00289: 建議:
/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2013_12_25/o1_mf_1_1_%u_.arc
ORA-00280: 更改 840952 (用於執行緒 1) 在序列 #1 中
Specify log: {
cancel
ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 將出現如下錯誤
ORA-01194: 檔案 1 需要更多的恢復來保持一致性
ORA-01110: 資料檔案 1: '/u01/app/oracle/oradata/orcl/system01.dbf'
ORA-01112: 未啟動介質恢復
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01589: 要開啟資料庫則必須使用 RESETLOGS 或 NORESETLOGS 選項
SQL> alter database open resetlogs;
Database altered.
SQL> conn test/test
Connected.
SQL> select * from t1;
ID NAME
---------- --------------------
1 sun
1 sun
1 sun
1 sun
SQL>
ORA-01194: 檔案 1 需要更多的恢復來保持一致性
ORA-01110: 資料檔案 1: '/u01/app/oracle/oradata/orcl/system01.dbf'
ORA-01112: 未啟動介質恢復
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01589: 要開啟資料庫則必須使用 RESETLOGS 或 NORESETLOGS 選項
SQL> alter database open resetlogs;
Database altered.
SQL> conn test/test
Connected.
SQL> select * from t1;
ID NAME
---------- --------------------
1 sun
1 sun
1 sun
1 sun
SQL>
那麼我之前新增的資料(沒有切換歸檔),不管是提交的還是未提交的資料,都會丟失。
注意:強烈建議,當資料庫恢復成功以後,應該馬上進行備份(expdp或exp)等備份方式,備份資料庫,然後新建資料庫,再通過imp或ipmdp方式將之前匯出的二進位制備份檔案匯入到新庫。
強制恢復完成以後,測試下資料庫,
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 835104768 bytes
Fixed Size 2217952 bytes
Variable Size 528484384 bytes
Database Buffers 301989888 bytes
Redo Buffers 2412544 bytes
Database mounted.
Database opened.
SQL>
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 835104768 bytes
Fixed Size 2217952 bytes
Variable Size 528484384 bytes
Database Buffers 301989888 bytes
Redo Buffers 2412544 bytes
Database mounted.
Database opened.
SQL>
如果沒有問題,那麼說明ok了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28698327/viewspace-1065460/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 聯機重做日誌丟失的恢復
- 丟失聯機重做日誌檔案的恢復
- 【備份恢復】恢復 丟失已歸檔重做日誌檔案
- 聯機重做日誌檔案的恢復
- 【恢復】Redo日誌檔案丟失的恢復
- 恢復重做日誌
- 重做日誌的恢復
- 丟失所有重做日誌檔案的恢復例子丟失所有重做日誌檔案的恢復例子如下:
- oracle 恢復重做日誌Oracle
- Oracle重做日誌檔案損壞或丟失後的恢復Oracle
- 【備份與恢復】恢復受損的複用聯機重做日誌檔案
- 丟失非活動日誌組的恢復
- 【備份恢復】 恢復重做日誌組成員
- RMAN恢復案例:無恢復目錄,丟失全部資料檔案、控制檔案、日誌檔案恢復
- 丟失當前current重做日誌檔案下恢復資料庫資料庫
- 從丟失日誌組中恢復流程
- 利用incremental backup恢復丟失日誌的standbyREM
- oracle丟失日誌檔案的恢復( 轉)Oracle
- RMAN恢復案例:丟失全部資料檔案恢復
- oracle rman之丟失spfile恢復Oracle
- 控制檔案丟失的RMAN恢復
- 損壞聯機日誌 恢復
- Oracle恢復例項之二:Inactive聯機日誌檔案丟失Oracle
- 非歸檔丟失日誌檔案的恢復
- MySQL重做日誌恢復資料的流程MySql
- rman恢復:資料檔案丟失,控制檔案丟失,聯機日誌檔案丟失(非當前使用與當前使用)
- rman恢復--丟失控制檔案的恢復
- RMAN恢復案例:丟失非系統資料檔案恢復
- Oracle恢復例項之三:active或current聯機日誌檔案丟失Oracle
- 損壞聯機日誌的恢復方法
- 恢復案例:無歸檔,丟失全部控制檔案、日誌檔案恢復案例
- RMAN完全恢復丟失的資料檔案
- sqlplus 下恢復active 日誌丟失的情況SQL
- oracle歸檔日誌丟失後的資料庫恢復Oracle資料庫
- 在歸檔模式下丟失日誌檔案的恢復模式
- 聯機日誌損壞恢復實驗
- rman恢復--歸檔模式有備份,丟失資料檔案的恢復模式
- rman恢復--歸檔模式無備份,丟失資料檔案的恢復模式