Controlfile 重建控制檔案 noresetlogs, resetlogs..

pentium發表於2019-01-01

當資料庫當前的Redo Log都可用時(no matter 斷電或者shutdown abort),可以透過 noresetlogs 引數重建控制檔案,此時 Oracle能夠從日誌檔案中讀取Redo資訊 (同樣的,控制檔案也能夠從資料檔案中獲得詳細的檢查點資訊),記錄到控制檔案中,由於Redo中記錄的資訊足以重演所有提交成功的事物,所以能夠實現完全恢復,成功開啟資料庫, 這時的資料庫就如同進行了一次斷電之後的例項恢復,資料沒有損失,重做日誌可以繼續向前寫入

CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS NOARCHIVELOG

。。。。

轉儲新建的控制檔案,可看到 LOG FILE #3是當前的日誌檔案,而且包含scn等資訊。

alter session set events 'immediate trace name CONTROLF level 8'

***************************************************************************

LOG FILE RECORDS

***************************************************************************

 (size = 72, compat size = 72, section max = 16, section in-use = 3,

  last-recid= 0, old-recno = 0, last-recno = 0)

 (extent = 1, blkno = 10, numrecs = 16)

LOG FILE #1: 

  name #5: E:\ORACLE\ORADATA\ORCL\ONLINELOG\O1_MF_1_G23756JL_.LOG

  name #6: E:\ORACLE\FAST_RECOVERY_AREA\ORCL\ORCL\ONLINELOG\O1_MF_1_G2375PPY_.LOG

 Thread 1 redo log links: forward: 2 backward: 0

 siz: 0x64000 seq: 0x00000010 hws: 0x3 bsz: 512 nab: 0x16c flg: 0x0 dup: 2

 Archive links: fwrd: 0 back: 0 Prev scn: 0x0000000000000000

 Low scn: 0x000000000024df24 01/01/2019 17:09:28

 Next scn: 0x000000000024e27c 01/01/2019 17:43:47

LOG FILE #2: 

  name #3: E:\ORACLE\ORADATA\ORCL\ONLINELOG\O1_MF_2_G23756JT_.LOG

  name #4: E:\ORACLE\FAST_RECOVERY_AREA\ORCL\ORCL\ONLINELOG\O1_MF_2_G2375PQF_.LOG

 Thread 1 redo log links: forward: 3 backward: 1

 siz: 0x64000 seq: 0x00000011 hws: 0x4 bsz: 512 nab: 0x4e05 flg: 0x0 dup: 2

 Archive links: fwrd: 0 back: 0 Prev scn: 0x000000000024df24

 Low scn: 0x000000000024e27c 01/01/2019 17:43:47

 Next scn: 0x0000000000267e7b 01/01/2019 20:59:36

LOG FILE #3: 

  name #1: E:\ORACLE\ORADATA\ORCL\ONLINELOG\O1_MF_3_G23756K3_.LOG

  name #2: E:\ORACLE\FAST_RECOVERY_AREA\ORCL\ORCL\ONLINELOG\O1_MF_3_G2375PQ6_.LOG

 Thread 1 redo log links: forward: 0 backward: 2

 siz: 0x64000 seq: 0x00000012 hws: 0x2 bsz: 512 nab: 0xffffffff flg: 0xa dup: 2

 Archive links: fwrd: 0 back: 0 Prev scn: 0x000000000024e27c

 Low scn: 0x0000000000267e7b 01/01/2019 20:59:36

 Next scn: 0xffffffffffffffff 01/01/1988 00:00:00


如果用resetlogs重建控制檔案,在恢復時就需要 RECOVER DATABASE USING BACKUP CONTROLFILE

CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS NOARCHIVELOG

    MAXLOGFILES 16

    MAXLOGMEMBERS 3

    MAXDATAFILES 1024

。。。。

這時檢視轉儲的控制檔案,scn是0

***************************************************************************

LOG FILE RECORDS

***************************************************************************

 (size = 72, compat size = 72, section max = 16, section in-use = 3,

  last-recid= 0, old-recno = 0, last-recno = 0)

 (extent = 1, blkno = 10, numrecs = 16)

LOG FILE #1: 

  name #5: E:\ORACLE\ORADATA\ORCL\ONLINELOG\O1_MF_1_G23756JL_.LOG

  name #6: E:\ORACLE\FAST_RECOVERY_AREA\ORCL\ORCL\ONLINELOG\O1_MF_1_G2375PPY_.LOG

 Thread 1 redo log links: forward: 2 backward: 0

 siz: 0x64000 seq: 0x00000000 hws: 0x0 bsz: 512 nab: 0x0 flg: 0x1 dup: 2

 Archive links: fwrd: 0 back: 0 Prev scn: 0x0000000000000000

 Low scn: 0x0000000000000000 01/01/1988 00:00:00

 Next scn: 0x0000000000000000 01/01/1988 00:00:00


SQL> RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL ;

ORA-00279: ?? 2829520 (? 01/01/2019 22:22:52 ??) ???? 1 ????

ORA-00289: ??: E:\ORACLE\FAST_RECOVERY_AREA\ORCL\ORCL\ARCHIVELOG\2019_01_01\O1_MF_1_2_%U_.ARC

ORA-00280: ?? 2829520 (???? 1) ??? #2 ?


指定日誌: {<RET>=suggested | filename | AUTO | CANCEL}

E:\oracle\oradata\ORCL\ONLINELOG\O1_MF_2_G23756JT_.LOG

(如果當前redo日誌在,不需要指定日誌檔案,選cancel會自動media recovery。 這裡測試了把日誌檔案都移走,選cancel的話,

open resetlogs會出錯,提示需要介質恢復。)

已應用的日誌。

完成介質恢復。

SQL> alter database open resetlogs ;

資料庫已更改。

再檢視轉儲的控制檔案,logfile2,3 scn是0,到v$log能看到狀態是unused. 

***************************************************************************

LOG FILE RECORDS

***************************************************************************

 (size = 72, compat size = 72, section max = 16, section in-use = 3,

  last-recid= 9, old-recno = 0, last-recno = 0)

 (extent = 1, blkno = 10, numrecs = 16)

LOG FILE #1: 

  name #5: E:\ORACLE\ORADATA\ORCL\ONLINELOG\O1_MF_1_G23756JL_.LOG

  name #6: E:\ORACLE\FAST_RECOVERY_AREA\ORCL\ORCL\ONLINELOG\O1_MF_1_G2375PPY_.LOG

 Thread 1 redo log links: forward: 2 backward: 0

 siz: 0x64000 seq: 0x00000001 hws: 0x3 bsz: 512 nab: 0xffffffff flg: 0x8 dup: 2

 Archive links: fwrd: 0 back: 0 Prev scn: 0x0000000000000000

 Low scn: 0x000000000029a3d3 01/01/2019 22:15:44

 Next scn: 0xffffffffffffffff 01/01/1988 00:00:00

LOG FILE #2: 

  name #3: E:\ORACLE\ORADATA\ORCL\ONLINELOG\O1_MF_2_G23756JT_.LOG

  name #4: E:\ORACLE\FAST_RECOVERY_AREA\ORCL\ORCL\ONLINELOG\O1_MF_2_G2375PQF_.LOG

 Thread 1 redo log links: forward: 3 backward: 1

 siz: 0x64000 seq: 0x00000000 hws: 0x2 bsz: 512 nab: 0x2 flg: 0x1 dup: 2

 Archive links: fwrd: 0 back: 0 Prev scn: 0x0000000000000000

 Low scn: 0x0000000000000000 01/01/1988 00:00:00

 Next scn: 0x0000000000000000 01/01/1988 00:00:00


resetlogs重建控制檔案恢復時,控制檔案沒有redo資訊,rman怎麼知道恢復到哪? 答案就在資料檔案頭的RBA(Redo Byte Address) ,RBA包含了日誌檔案的序列號(log sequence)

RBA就是重做日誌塊(redo log block)的地址,相當與資料檔案中的ROWID, 透過這個地址來定位重做日誌塊 。RBA由三個部分組成:

  1. 日誌檔案序列號(4位元組)  ——根據這個找到對應的日誌檔案地址。
  2. 日誌檔案塊編號(4位元組)  ——根據這個找到對應日誌條目所在的日誌檔案塊。
  3. 重做日誌記錄在日誌塊中的起始偏移位元組數(2位元組)  ——找到對應的日誌條目。




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

相關文章