Controlfile 重建控制文件 noresetlogs, resetlogs..

来源:这里教程网 时间:2026-03-03 12:49:59 作者:

当数据库当前的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字节)  ——找到对应的日志条目。

相关推荐