当前位置: DBARoad > 备份恢复 > 文章正文

数据文件头与恢复

                    作者 :OoNiceDream【转载时请务必以超链接形式标明文章原始出处和作者信息】
                    链接: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 —

关键字:
喜欢DBARoad的文章,那就通过 RSS Feed 功能订阅阅读吧!

已经有2 个评论

  1. 初学者 说:

    using backup controlfile,这个具体是指什么,

    Reply

    OoNiceDream Reply:

    控制文件与数据文件头分别都会存储SCN,这个using backup controlfile指的是两者对比得出,控制文件不是当前的控制文件,所以需要加上using backup controlfile这句话。

    Reply

我要评论

*

* 绝不会泄露


  • 订阅


      抓虾
      google reader
      my yahoo
      bloglines
      鲜果
      有道

站内搜索



返回首页 | 关于我 | 联系我 | 广告合作 | 网站地图 | 友情链接 | 版权声明 |