所有控制檔案損壞的恢復--resetlogs方式

楊奇龍發表於2010-05-28

        此方式和 所有控制檔案損壞的恢復--noresetlogs方式恢復時的前五個步驟是一樣的。

1)先備份控制檔案            
SQL> alter database backup controlfile to 'f:\lib\control.ctl' reuse;
已更改。
2)生成跟蹤檔案。

SQL> alter database backup controlfile to trace;
資料庫已更改。
SQL> @f:\sql\gettrace.sql---一個指令碼,稍後會給出。
TRACE_FILE__NAME                                                               
--------------------------------------------------------------------------------
f:\app\yang\diag\rdbms\oracl\oracl\trace/oracl_ora_2572.trc
       

3)關閉資料庫,模擬控制檔案全部損壞。

SQL> shutdown immediate
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。

4)啟動資料庫。
SQL> startup
ORACLE 例程已經啟動。
Total System Global Area  535662592 bytes                                      
Fixed Size                  1334380 bytes                                      
Variable Size             134218644 bytes                                      
Database Buffers          394264576 bytes                                      
Redo Buffers                5844992 bytes                                      
ORA-00205: ORA-00205 error in identifying controlfile, check alert log for more info

alert 檔案顯示:

ALTER DATABASE   MOUNT
ORA-00210: cannot open the specified control file
ORA-00202: control file: 'F:\APP\YANG\ORADATA\ORACL\CONTROL03.CTL'
ORA-27041: unable to open file
OSD-04002: 無法開啟檔案
O/S-Error: (OS 2) 系統找不到指定的檔案。
ORA-00210: cannot open the specified control file
ORA-00202: control file: 'F:\APP\YANG\ORADATA\ORACL\CONTROL02.CTL'
ORA-27041: unable to open file
OSD-04002: 無法開啟檔案
O/S-Error: (OS 2) 系統找不到指定的檔案。
ORA-00210: cannot open the specified control file
ORA-00202: control file: 'F:\APP\YANG\ORADATA\ORACL\CONTROL01.CTL'
ORA-27041: unable to open file
OSD-04002: 無法開啟檔案
O/S-Error: (OS 2) 系統找不到指定的檔案。

5)啟動到nomount狀態。
SQL> startup nomount

6)執行建立控制檔案的指令碼
SQL> @f:\createctlreset.sql

控制檔案已建立。

7)恢復資料庫
SQL> recover database;
ORA-00283: 恢復會話因錯誤而取消
ORA-01610: 使用 BACKUP CONTROLFILE 選項的恢復必須已完成

SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 3230396 (在 05/28/2010 20:15:05 生成) 對於執行緒 1 是必需的
ORA-00289: 建議: F:\APP\YANG\ARCHIVE2\18_1_719709206.LOG
ORA-00280: 更改 3230396 (用於執行緒 1) 在序列 #18 中

指定日誌: {=suggested | filename | AUTO | CANCEL}
auto
ORA-00308: 無法開啟歸檔日誌 'F:\APP\YANG\ARCHIVE2\18_1_719709206.LOG'
ORA-27041: 無法開啟檔案
OSD-04002: 無法開啟檔案
O/S-Error: (OS 2) 系統找不到指定的檔案

ORA-00308: 無法開啟歸檔日誌 'F:\APP\YANG\ARCHIVE2\18_1_719709206.LOG'
ORA-27041: 無法開啟檔案
OSD-04002: 無法開啟檔案
O/S-Error: (OS 2) 系統找不到指定的檔案。

ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 將出現如下錯誤
ORA-01194: 檔案 1 需要更多的恢復來保持一致性
ORA-01110: 資料檔案 1: 'F:\APP\YANG\ORADATA\ORACL\SYSTEM01.DBF'

SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 3230396 (在 05/28/2010 20:15:05 生成) 對於執行緒 1 是必需的
ORA-00289: 建議: F:\APP\YANG\ARCHIVE2\18_1_719709206.LOG
ORA-00280: 更改 3230396 (用於執行緒 1) 在序列 #18 中

指定日誌: {=suggested | filename | AUTO | CANCEL}
cancel
ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 將出現如下錯誤
ORA-01194: 檔案 1 需要更多的恢復來保持一致性
ORA-01110: 資料檔案 1: 'F:\APP\YANG\ORADATA\ORACL\SYSTEM01.DBF'
ORA-01112: 未啟動介質恢復

SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 3230396 (在 05/28/2010 20:15:05 生成) 對於執行緒 1 是必需的
ORA-00289: 建議: F:\APP\YANG\ARCHIVE2\18_1_719709206.LOG
ORA-00280: 更改 3230396 (用於執行緒 1) 在序列 #18 中

指定日誌: {=suggested | filename | AUTO | CANCEL}
f:\app\yang\oradata\oracl\redo01.log
ORA-00310: 歸檔日誌包含序列 16; 要求序列 18
ORA-00334: 歸檔日誌: 'F:\APP\YANG\ORADATA\ORACL\REDO01.LOG'

ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 將出現如下錯誤
ORA-01194: 檔案 1 需要更多的恢復來保持一致性
ORA-01110: 資料檔案 1: 'F:\APP\YANG\ORADATA\ORACL\SYSTEM01.DBF'

SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 3230396 (在 05/28/2010 20:15:05 生成) 對於執行緒 1 是必需的
ORA-00289: 建議: F:\APP\YANG\ARCHIVE2\18_1_719709206.LOG
ORA-00280: 更改 3230396 (用於執行緒 1) 在序列 #18 中

指定日誌: {=suggested | filename | AUTO | CANCEL}
f:\app\yang\oradate\oracl\redo02.log
ORA-00308: 無法開啟歸檔日誌 'f:\app\yang\oradate\oracl\redo02.log'
ORA-27041: 無法開啟檔案
OSD-04002: 無法開啟檔案
O/S-Error: (OS 3) 系統找不到指定的路徑。

指定日誌: {=suggested | filename | AUTO | CANCEL}
f:\app\yang\oradata\oracl\redo02.log
ORA-00310: 歸檔日誌包含序列 17; 要求序列 18
ORA-00334: 歸檔日誌: 'F:\APP\YANG\ORADATA\ORACL\REDO02.LOG'

ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 將出現如下錯誤
ORA-01194: 檔案 1 需要更多的恢復來保持一致性
ORA-01110: 資料檔案 1: 'F:\APP\YANG\ORADATA\ORACL\SYSTEM01.DBF'

SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 3230396 (在 05/28/2010 20:15:05 生成) 對於執行緒 1 是必需的
ORA-00289: 建議: F:\APP\YANG\ARCHIVE2\18_1_719709206.LOG
ORA-00280: 更改 3230396 (用於執行緒 1) 在序列 #18 中

指定日誌: {=suggested | filename | AUTO | CANCEL}
f:\app\yang\oradata\oracl\redo03.log
已應用的日誌。
完成介質恢復。

SQL> select status from v$instance;

STATUS                                                                         
------------                                                                   
MOUNTED                                                                        

SQL> select current_scn from v$database;

CURRENT_SCN                                                                    
-----------                                                                    
          0                                                                    

SQL> alter database open;
alter database open
*
第 1 行出現錯誤:
ORA-01589: 要開啟資料庫則必須使用 RESETLOGS 或 NORESETLOGS 選項
SQL> alter database open resetlogs;
資料庫已更改。

SQL> select current_scn from v$database;
CURRENT_SCN                                                                    
-----------                                                                    
    3231396                                                                    
SQL> select dbms_flashback.get_system_change_number from dual;

GET_SYSTEM_CHANGE_NUMBER                                                       
------------------------                                                       
                 3231397                                                       

 

附:

透過查詢跟蹤檔案的指令碼可以查詢到相關的詳細資訊
SQL> SELECT a.VALUE||b.symbol||c.instance_name||'_ora_'||d.spid||'.trc' TRACE_FILE_NAME
  2  FROM (SELECT VALUE FROM v$parameter WHERE NAME='user_dump_dest') a,
  3       (SELECT SUBSTR(VALUE,-6,1) symbol FROM v$parameter WHERE NAME='user_dump_dest') b,
  4       (SELECT instance_name FROM v$instance) c,
  5       (SELECT spid FROM v$session s,v$process p,v$mystat m
  6        WHERE s.paddr=p.addr AND s.SID=m.SID AND m.statistic#=0) d
  7  /

createctlreset.sql指令碼:

CREATE CONTROLFILE REUSE DATABASE "ORACL" RESETLOGS  ARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 'F:\APP\YANG\ORADATA\ORACL\REDO01.LOG'  SIZE 50M,
  GROUP 2 'F:\APP\YANG\ORADATA\ORACL\REDO02.LOG'  SIZE 50M,
  GROUP 3 'F:\APP\YANG\ORADATA\ORACL\REDO03.LOG'  SIZE 50M
-- STANDBY LOGFILE
DATAFILE
  'F:\APP\YANG\ORADATA\ORACL\SYSTEM01.DBF',
  'F:\APP\YANG\ORADATA\ORACL\SYSAUX01.DBF',
  'F:\APP\YANG\ORADATA\ORACL\UNDOTBS01.DBF',
  'F:\APP\YANG\ORADATA\ORACL\USERS01.DBF',
  'F:\APP\YANG\ORADATA\ORACL\EXAMPLE01.DBF',
  'F:\APP\YANG\ORADATA\ORACL\TEST.DBF'
CHARACTER SET ZHS16GBK
;

小結:

要弄清楚resetlogs與noresetlogs的區別
norestlogs,控制檔案的scn是來自當前日誌的high scn,而resetlogs控制檔案的scn是來自資料檔案。
所有online redolog沒有丟失,以noresetlogs選項開啟資料庫的情況下使用的。第二段則是在丟失了online redolog需要resetlogs的情況下使用。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22664653/viewspace-663963/,如需轉載,請註明出處,否則將追究法律責任。

相關文章