oracle實驗記錄 (恢復-關於控制檔案(4))

fufuh2o發表於2009-09-11


有一個問題,使用舊備份控制檔案時候恢復到最新, 總是要using  backup controlfile
經過pub  朋友  SUNBLAZE  (端著AK的貓 ),給了思路~~也許是需要instance recover
特此實驗記錄下

SQL> @d:\backup\backupctl.txt
已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

SQL> alter system switch logfile;~~~~~~~~~~~~~~~因為是實驗~需要執行一次,若備份和current controlfile中間~沒有2次checkpoint,那麼備份controlfile可以直接使用
                                                 對比的是 controlfile中 Checkpoint cnt,與file header 中 ctl cnt(這個就是防止更新controlfile時候abort)  

系統已更改。

SQL> alter system checkpoint;

系統已更改。

SQL> shutdown immediate;
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> startup mount;
ORA-32004: obsolete and/or deprecated parameter(s) specified
ORACLE 例程已經啟動。

Total System Global Area  612368384 bytes
Fixed Size                  1250428 bytes
Variable Size             226495364 bytes
Database Buffers          377487360 bytes
Redo Buffers                7135232 bytes
資料庫裝載完畢。
SQL>
SQL> select sequence#,group#,status from v$log;

 SEQUENCE#     GROUP# STATUS
---------- ---------- ----------------
        11          1 CURRENT
         9          3 INACTIVE
        10          2 INACTIVE

SQL> select checkpoint_change#,last_change# from v$datafile;

CHECKPOINT_CHANGE# LAST_CHANGE#
------------------ ------------
           1435071      1435071~~~~~~~~~~~~~~datafile scn ,stop scn
           1435071      1435071
           1435071      1435071
           1435071      1435071
           1435071      1435071
           1435071      1435071
           1435071      1435071
           1435071      1435071

已選擇8行。

SQL> select checkpoint_change# from v$datafile_header;

CHECKPOINT_CHANGE#
------------------
           1435071~~~~~~~~~~~~~~~~~~~~~~~~~START SCN
           1435071
           1435071
           1435071
           1435071
           1435071
           1435071
           1435071

已選擇8行。

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
           1435071~~~~~~~~~~~~~~~~~~~~~~~~~SYSTEM SCN

 

以上資訊是 當前控制檔案中資訊

SQL> shutdown immediate;
ORA-01109: 資料庫未開啟

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~restore controlfile
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> startup
ORA-32004: obsolete and/or deprecated parameter(s) specified
ORACLE 例程已經啟動。

Total System Global Area  612368384 bytes
Fixed Size                  1250428 bytes
Variable Size             226495364 bytes
Database Buffers          377487360 bytes
Redo Buffers                7135232 bytes
資料庫裝載完畢。
ORA-01122: 資料庫檔案 1 驗證失敗
ORA-01110: 資料檔案 1: 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF'
ORA-01207: 檔案比控制檔案更新 - 舊的控制檔案

 

SQL> select sequence#,group#,status from v$log;

 SEQUENCE#     GROUP# STATUS
---------- ---------- ----------------
         8          1 INACTIVE
         9          3 INACTIVE
        10          2 CURRENT

SQL> select checkpoint_change#,last_change# from v$datafile;

CHECKPOINT_CHANGE# LAST_CHANGE#
------------------ ------------
           1432437
           1432437
           1432437         ~~~~~~沒有 stop scn(其實應該有值,我備份時候是 online 沒關閉database 所以controlfile中沒記錄stop scn ,為無窮大)
           1432437
           1432437
           1432437
           1432437
           1432437

已選擇8行。

SQL> select checkpoint_change# from v$datafile_header;

CHECKPOINT_CHANGE#
------------------
           1435071
           1435071
           1435071           START SCN 不等於stop scn,   需要 instance recover 應用current redo log
           1435071
           1435071
           1435071
           1435071
           1435071

已選擇8行。

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
           1432437

SQL>

SQL> recover database using backup controlfile;
ORA-00279: 更改 1434879 (在 09/11/2009 09:35:13 生成) 對於執行緒 1 是必需的
ORA-00289: 建議: E:\ARCHIVELOG\ARC00011_0697045088.001.ARC
ORA-00280: 更改 1434879 (用於執行緒 1) 在序列 #11 中


指定日誌: {=suggested | filename | AUTO | CANCEL}
E:\oracle\product\10.2.0\oradata\orcl\redo01.log
已應用的日誌。
完成介質恢復。
SQL> select sequence#,group#,status from v$log;

 SEQUENCE#     GROUP# STATUS
---------- ---------- ----------------
         8          1 INACTIVE
         9          3 INACTIVE
        10          2 CURRENT

SQL> select checkpoint_change#,last_change# from v$datafile;

CHECKPOINT_CHANGE# LAST_CHANGE#
------------------ ------------
           1432437      1435071
           1432437      1435071~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~stop SCN
           1432437      1435071
           1432437      1435071
           1432437      1435071
           1432437      1435071
           1432437      1435071
           1432437      1435071

已選擇8行。

SQL> select checkpoint_change# from v$datafile_header;

CHECKPOINT_CHANGE#
------------------
           1435071
           1435071
           1435071~~~~~~~~~~~~~~~~~~~~~~~~~~~START SCN
           1435071
           1435071
           1435071
           1435071
           1435071

已選擇8行。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~STOP SCN=START SCN 不需要instance recover
SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
           1432437


~~~~~~~~~~~~~~~~~~~~controlfile其它資訊沒變 但是多了STOP SCN(同步了)
SQL> alter session set events 'immediate trace name controlf level 8';

會話已更改。

SQL> alter system dump logfile 'E:\oracle\product\10.2.0\oradata\orcl\redo01.log';

系統已更改。


DUMP CONTROLFILE

DATA FILE #2:
  (name #9) E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
creation size=0 block size=8192 status=0xe head=9 tail=9 dup=1
 tablespace 1, index=2 krfil=2 prev_file=0
 unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00
 Checkpoint cnt:255 scn: 0x0000.0015db75 09/11/2009 09:00:58
 Stop scn: 0x0000.0015e5bf 09/11/2009 09:35:49~~~~STOP SCN
 Creation Checkpointed at scn:  0x0000.00081f74 08/30/2005 17:25:44
 thread:0 rba:(0x0.0.0)

SQL> select to_number('15e5bf','xxxxxxxx') from dual;

TO_NUMBER('15E5BF','XXXXXXXX')
------------------------------
                       1435071

 

DUMP OF REDO FROM FILE 'E:\oracle\product\10.2.0\oradata\orcl\redo01.log'
 Opcodes *.*
 RBAs: 0x000000.00000000.0000 thru 0xffffffff.ffffffff.ffff
 SCNs: scn: 0x0000.00000000 thru scn: 0xffff.ffffffff
 Times: creation thru eternity
 FILE HEADER:
 Low  scn: 0x0000.0015e4ff (1434879) 09/11/2009 09:35:13~~~~v$log FIRST_CHANGE#
 Next scn: 0xffff.ffffffff 01/01/1988 00:00:00~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~這是current  logfile
Thread closed scn: 0x0000.0015e5bf (1435071) 09/11/2009 09:35:49~~~~~~~~~~~~從redo獲得了STOP SCN

SQL> alter database open resetlogs;

資料庫已更改。

小結:使用備份控制檔案恢復到最新的時候 oracle 發現控制檔案中stop scn比 datafile 中start scn要小所以需要instance reocver ,instanc recover 就是用current redo

log

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

相關文章