数据文件头与恢复
作者 :OoNiceDream【转载时请务必以超链接形式标明文章原始出处和作者信息】
链接:http://www.dbaroad.me/archives/2009/09/datafile_header_recover.html
链接:http://www.dbaroad.me/archives/2009/09/datafile_header_recover.html
数据库恢复过程中,Oracle常常会提示我们去应用一些日志:
sys@ORCL>recover database using backup controlfile; ORA-00279: change 1355652 generated at 09/17/2009 15:27:39 needed for thread 1 ORA-00289: suggestion : D:\ORACLE\ORADATA\ORCL\ARCH\ARC00030_0694031995.001 ORA-00280: change 1355652 for thread 1 is in sequence #30 Specify log: {<ret>=suggested | filename | AUTO | CANCEL} |
那Oracle又是在哪里记录这些需要恢复的日志文件信息呢?我们可以转储数据文件头来看看:
sys@ORCL>alter session set events 'immediate trace name FILE_HDRS level 12'; Session altered. 摘录一段: .................. .................. V10 STYLE FILE HEADER: Compatibility Vsn = 169869568=0xa200100 Db ID=1221812729=0x48d361f9, Db Name='ORCL' Activation ID=0=0x0 Control Seq=955=0x3bb, File size=61440=0xf000 File Number=1, Blksiz=8192, File Type=3 DATA Tablespace #0 - SYSTEM rel_fn:1 Creation at scn: 0x0000.00000009 08/30/2005 13:50:22 Backup taken at scn: 0x0000.00000000 01/01/1988 00:00:00 thread:0 reset logs count:0x295e167b scn: 0x0000.0008297b reset logs terminal rcv data:0x0 scn: 0x0000.00000000 prev reset logs count:0x21d66184 scn: 0x0000.00000001 prev reset logs terminal rcv data:0x0 scn: 0x0000.00000000 recovered at 09/17/2009 15:36:43 status:0x2000 root dba:0x00400179 chkpt cnt: 141 ctl cnt:140 begin-hot-backup file size: 0 Checkpointed at scn: 0x0000.0014af84 09/17/2009 15:27:39 thread:1 rba:(0x1e.763.10) enabled threads: 01000000 00000000 00000000 00000000 00000000 00000000 .................. .................. |
这其中最重要的就是:
Checkpointed at scn: 0x0000.0014af84 09/17/2009 15:27:39 thread:1 rba:(0x1e.763.10) |
这里的RBA由三部份组成:
1、日志序列号 the log file sequence number (4 bytes)
2、日志文件块号 the log file block number (4 bytes)
3、日志记录偏移量 the byte offset into the block at which the redo record starts (2 bytes)
而RBA说明的是,恢复时需要从哪个日志的哪个块的哪个偏移量开始,将这些部份转化一下:
sys@ORCL>select to_number('0014af84','xxxxxxxxx') scn from dual; SCN ---------- 1355652 sys@ORCL>select to_number('1e','xxxxxxxxx') sequence from dual; SEQUENCE ---------- 30 sys@ORCL>select to_number('763','xxxxxxxxx') block from dual; BLOCK ---------- 1891 sys@ORCL>select to_number('10','xxxxxxxxx') byte from dual; BYTE ---------- 16 |
这些都可以与提示信息对应上:
ORA-00280: change 1355652 for thread 1 is in sequence #30 |
恢复时的这些日志信息还可以从X$KCVFH视图中方便地查询到,X$KCVFH是GV$DATAFILE_HEADER的内部视图:
sys@ORCL>select 2 HXFIL file, 3 substr(HXFNM, 1, 50) File_name, 4 FHSCN SCN, 5 FHRBA_SEQ Sequence, 6 fhrba_bno Block, 7 fhrba_bof Byte 8 from X$KCVFH; FILE# FILE_NAME SCN SEQUENCE BLOCK BYTE ----- ------------------------------------ ------- -------- ----- ---- 1 D:\ORACLE\ORADATA\ORCL\SYSTEM01.DBF 1355652 30 1891 16 2 D:\ORACLE\ORADATA\ORCL\UNDOTBS01.DBF 1355652 30 1891 16 3 D:\ORACLE\ORADATA\ORCL\SYSAUX01.DBF 1355652 30 1891 16 4 D:\ORACLE\ORADATA\ORCL\USERS01.DBF 1355652 30 1891 16 |
— The End —
关键字: 备份恢复


using backup controlfile,这个具体是指什么,
Reply
OoNiceDream Reply:
05月 15th, 2010 at 22:58
控制文件与数据文件头分别都会存储SCN,这个using backup controlfile指的是两者对比得出,控制文件不是当前的控制文件,所以需要加上using backup controlfile这句话。
Reply