天天看點

探索ORACLE之RMAN_07 重做日志redu檔案丢失恢複

探索ORACLE之RMAN_07 重做日志redu檔案丢失恢複

作者:吳偉龍Name:Prodence Woo

QQ:286507175  msn:[email protected]       

       重做日志檔案記錄了資料庫的變更資料。一般重做日志檔案的失敗不會使資料庫資料丢失,但是會影響資料庫的恢複。重做日志分為兩種狀态目前聯機重做日志和非目前的聯機重做日志

4.1

非目前redo(聯機重做日志)檔案丢失恢複

資料庫運作的時候,日志中報如下錯誤:

ORA-00313: openfailed for members of log group 1 of thread 1

ORA-00312: onlinelog 1 thread 1: '/DBData/WWL/redo01.log'

檢視日志組,判斷損壞的日志組是否為目前日志組

SQL> select * from v$log;

    GROUP#    THREAD# SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIM

---------- ---------- ---------- ---------- ---------- --- ----------------------------- ---------

         1          1         32  31457280          1 YES INACTIVE               1063037 04-JUL-12

         3          1         34  31457280          1 NO  CURRENT                1118555 05-JUL-12

         2          1        33   31457280          1 YES INACTIVE               1086278 05-JUL-12

我們可以看到損壞的那組日志不是目前的日志,這個時候我麼可以通過使用clear指令來重建該日志檔案組。

通過重建來恢複非目前日志組,實作資料庫的打開。

SQL> startup

ORACLE instancestarted.

Total SystemGlobal Area  100663296 bytes

Fixed Size                  1217884 bytes

Variable Size              88083108 bytes

DatabaseBuffers            8388608 bytes

Redo Buffers                2973696 bytes

Database mounted.

SQL>alter database clear logfile group 1;

Databasealtered.

重建完之後資料庫可以打開了,至此恢複完成

SQL> alter database open;

Database altered.

4.2目前redo(聯機重做日志)檔案丢失恢複

資料庫啟動的時候報如下錯誤

ORACLE instance started.

Total System Global Area 100663296 bytes

Fixed Size                 

1217884 bytes

Variable Size             88083108 bytes

Database Buffers           

8388608 bytes

Redo Buffers               

2973696 bytes

ORA-00313: open failed for members of log group 1 ofthread 1

ORA-00312: online log 1 thread 1:'/DBData/WWL/redo01.log'

ORA-27037: unable to obtain file status

Linux Error: 2: No such file or directory

Additional information: 3

---------- ---------- ---------- ---------- ---------- ------------------- ------------- ---------

         1          1         35  31457280          1 NO  CURRENT                1139915 05-JUL-12

         3          1         34  31457280          1 YES INACTIVE               1118555 05-JUL-12

         2          1         33  31457280          1 YES INACTIVE               1086278 05-JUL-12

在這裡可以看到損壞的為目前日志組,那麼意味着會有線上資料丢失,因為重做日志裡面目前狀态裡面存放的是是沒有歸檔及寫入到資料檔案的活動資料,那麼這種恢複必然是會導緻資料的不同步,進而使資料丢失。

我們可以首先嘗試清空日志組資訊并重建的方式來進行恢複:

SQL> alter database clear unarchived logfile group 1;

alter database clear unarchived logfile group 1

*

ERROR at line 1:

ORA-01624: log 1 needed for crash recovery of instanceWWL (thread 1)

如上方法不行,可以采取基于SCN,取消的方法來恢複資料庫。

使用基于控制檔案的redo恢複:

SQL> RECOVER DATABASE USING BACKUP CONTROLFILE;

ORA-00279: change 1139916 generated at 07/05/201221:49:48 needed for thread 1

ORA-00289: suggestion :/DBSoft/product/10.2.0/db_1/dbs/arch1_35_783449272.dbf

ORA-00280: change 1139916 for thread 1 is in sequence #35

Specify log: {<RET>=suggested | filename | AUTO |CANCEL}

auto

ORA-00308: cannot open archived log '/DBSoft/product/10.2.0/db_1/dbs/arch1_35_783449272.dbf'

ORA-00308: cannot open archived log'/DBSoft/product/10.2.0/db_1/dbs/arch1_35_783449272.dbf'

SQL> alter system set"_allow_resetlogs_corruption" = true scope = spfile;

System altered.

SQL> shutdown immediate;

ORA-01109: database not open

Database dismounted.

ORACLE instance shut down.

SQL> startup mount;

SQL> alter system reset"_allow_resetlogs_corruption" scope = spfile sid = '*';

SQL> alter database open resetlogs;

SQL> select instance_name,status from v$instance;

INSTANCE_NAME   STATUS

---------------- ------------

WWL             OPEN

         1          1          1  31457280          1 NO  CURRENT                1200799 06-JUL-12

         2          1          0  31457280          1 YES UNUSED                       0

         3          1          0  31457280          1 YES UNUSED                       0

SQL>

    GROUP#    THREAD#  SEQUENCE#     BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIM

         1          1         17  31457280          1 YES INACTIVE               1241271 06-JUL-12

         2          1         18  31457280          1 YES INACTIVE               1241273 06-JUL-12

         3          1         19  31457280          1 NO  CURRENT                1241275 06-JUL-