ITPub博客

首页 > Linux操作系统 > Linux操作系统 > oracle启动open阶段转储文件信息介绍

oracle启动open阶段转储文件信息介绍

原创 Linux操作系统 作者:yuanyongbin 时间:2011-12-07 16:57:09 0 删除 编辑
写上一篇日志的时候,在转储数据文件头看详细信息的时候遇到一些问题,下面简单的说一下这个过程。
上次说到open阶段,数据库在这个阶段会做两个校验,主要是:
1,checkpoint cnt
2,scn
在这两个都相同的情况下,就能open数据库了。
那么怎么来得到这两个数据的详细信息呢?简单的做个试验给大家看下:
一、先说下能顺利打开数据库的情况
SQL> startup mount  --为了验证open阶段的过程,启动数据库到mount状态
ORACLE instance started.
Total System Global Area  285212672 bytes
Fixed Size                  1218992 bytes
Variable Size              83887696 bytes
Database Buffers          197132288 bytes
Redo Buffers                2973696 bytes
Database mounted.
转储控制文件:
SQL> alter session set events 'immediate trace name CONTROLF level 8';
Session altered.
选取datafile 1作为参考:
DATA FILE #1:
  (name #4) /oracle/ora10/oradata/orcl/system01.dbf
creation size=38400 block size=8192 status=0xe head=4 tail=4 dup=1
 tablespace 0, index=1 krfil=1 prev_file=0
 unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00
 Checkpoint cnt:91 scn: 0x0000.0006e7aa 12/07/2011 18:12:34
 Stop scn: 0x0000.0006e7aa 12/07/2011 18:12:34
 Creation Checkpointed at scn:  0x0000.00000005 04/11/2011 21:45:10
 thread:1 rba:(0x1.3.10)
这里记录了数据文件的checkpoint cnt和start scn以及stop scn
转储数据文件:   ----注意换一个session,要不trace文件不会变的
SQL> alter session set events 'immediate trace name file_hdrs level 10';
Session altered.
同样选取datafile 1作为参考:
DATA FILE #1:
  (name #4) /oracle/ora10/oradata/orcl/system01.dbf
creation size=38400 block size=8192 status=0xe head=4 tail=4 dup=1
 tablespace 0, index=1 krfil=1 prev_file=0
 unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00
 Checkpoint cnt:91 scn: 0x0000.0006e7aa 12/07/2011 18:12:34
 Stop scn: 0x0000.0006e7aa 12/07/2011 18:12:34
 Creation Checkpointed at scn:  0x0000.00000005 04/11/2011 21:45:10
 thread:1 rba:(0x1.3.10)
这部分数据与控制文件中的都一致!接下来trace文件中还有一部分信息如下:
FILE HEADER:
        Compatibility Vsn = 169869568=0xa200100
        Db ID=1275996639=0x4c0e29df, Db Name='ORCL'
        Activation ID=0=0x0
        Control Seq=468=0x1d4, File size=61440=0xf000
        File Number=1, Blksiz=8192, File Type=3 DATA
Tablespace #0 - SYSTEM  rel_fn:1
Creation   at   scn: 0x0000.00000005 04/11/2011 21:45:10
Backup taken at scn: 0x0000.00000000 01/01/1988 00:00:00 thread:0
 reset logs count:0x2c98de5f scn: 0x0000.00000001 reset logs terminal rcv data:0x0 scn: 0x0000.00000000
 prev reset logs count:0x0 scn: 0x0000.00000000 prev reset logs terminal rcv data:0x0 scn: 0x0000.00000000
 recovered at 12/06/2011 21:58:48
 status:0x2000 root dba:0x00400179 chkpt cnt: 91 ctl cnt:90
begin-hot-backup file size: 0
Checkpointed at scn:  0x0000.0006e7aa 12/07/2011 18:12:34
 thread:1 rba:(0x20.6d45.10)
上面这段信息发现有chkpt cnt: 91 ctl cnt:90和Checkpointed at scn:  0x0000.0006e7aa 这3个信息?跟第一部分信息和控制文件中的信息有什么关系呢?
这里cnt还有两个值,chkpt cnt: 91和ctl cnt:90,为什么chkpt cnt比ctl cnt大1呢?这是因为更新控制文件的checkpoint cnt的时候不能保证成功,所以记下上一次成功的cnt,确保上一次是成功的。
看了上面3部分信息都是一致的,那么数据库是能顺利启动的,具体他们之间的联系和区别,在下面一部分再介绍,先看下还能启动数据库:
SQL> alter database open;
Database altered.
可以看到数据库是能顺利启动的,没有问题!
二、用旧的控制文件启动数据库
先备份下控制文件,用以前旧的控制文件来启动
[oracle@LOCALHOST orcl]$ mv control02.ctl control02.ctl_n
[oracle@LOCALHOST orcl]$ mv control02.ctl_o control02.ctl
SQL> startup mount
ORACLE instance started.
Total System Global Area  285212672 bytes
Fixed Size                  1218992 bytes
Variable Size              67110480 bytes
Database Buffers          213909504 bytes
Redo Buffers                2973696 bytes
Database mounted.
顺利启动到mount状态,接下来转储控制文件和数据文件来看一下:
转储控制文件:
SQL> alter session set events 'immediate trace name CONTROLF level 8';
Session altered.
选取datafile 1来看下:
DATA FILE #1:
  (name #4) /oracle/ora10/oradata/orcl/system01.dbf
creation size=38400 block size=8192 status=0xe head=4 tail=4 dup=1
 tablespace 0, index=1 krfil=1 prev_file=0
 unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00
 Checkpoint cnt:87 scn: 0x0000.0006e6ca 12/07/2011 18:10:32
 Stop scn: 0x0000.0006e6ca 12/07/2011 18:10:32
 Creation Checkpointed at scn:  0x0000.00000005 04/11/2011 21:45:10
 thread:1 rba:(0x1.3.10)
看到这里的checkpoint cnt是87,scn是0x0000.0006e6ca 是旧的控制文件中的!
转储数据文件头:
同样选取datafile 1来看:
第一部分:
DATA FILE #1:
  (name #4) /oracle/ora10/oradata/orcl/system01.dbf
creation size=38400 block size=8192 status=0xe head=4 tail=4 dup=1
 tablespace 0, index=1 krfil=1 prev_file=0
 unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00
 Checkpoint cnt:87 scn: 0x0000.0006e6ca 12/07/2011 18:10:32
 Stop scn: 0x0000.0006e6ca 12/07/2011 18:10:32
 Creation Checkpointed at scn:  0x0000.00000005 04/11/2011 21:45:10
 thread:1 rba:(0x1.3.10)
这里的现象大家发现了吗?这里的checkpoint cnt和scn竟然与老的控制文件是一样的!
开始我也不能理解,这样的话岂不是通过旧的控制文件也能启动了?这个逻辑是肯定不通的!后来继续往下看file header,如下:
FILE HEADER:
        Compatibility Vsn = 169869568=0xa200100
        Db ID=1275996639=0x4c0e29df, Db Name='ORCL'
        Activation ID=0=0x0
        Control Seq=487=0x1e7, File size=61440=0xf000
        File Number=1, Blksiz=8192, File Type=3 DATA
Tablespace #0 - SYSTEM  rel_fn:1
Creation   at   scn: 0x0000.00000005 04/11/2011 21:45:10
Backup taken at scn: 0x0000.00000000 01/01/1988 00:00:00 thread:0
 reset logs count:0x2c98de5f scn: 0x0000.00000001 reset logs terminal rcv data:0x0 scn: 0x0000.00000000
 prev reset logs count:0x0 scn: 0x0000.00000000 prev reset logs terminal rcv data:0x0 scn: 0x0000.00000000
 recovered at 12/06/2011 21:58:48
 status:0x2000 root dba:0x00400179 chkpt cnt: 93 ctl cnt:92
begin-hot-backup file size: 0
Checkpointed at scn:  0x0000.0006f41e 12/07/2011 23:26:27
 thread:1 rba:(0x20.c06b.10)
这里的chkpt cnt: 93和Checkpointed at scn(0x0000.0006f41e即455710)的值与上面第一部分是不一样的!FILE HEADER的这部分信息与v$datafile_header是一样的,如下:
SQL> select name,CHECKPOINT_CHANGE#,CHECKPOINT_COUNT from v$datafile_header where FILE#=1;
NAME                                               CHECKPOINT_CHANGE# CHECKPOINT_COUNT
-------------------------------------------------- ------------------ ----------------
/oracle/ora10/oradata/orcl/system01.dbf                        455710               93
这两个值与file header找到的信息是一样的!
综合上面的试验情况,可以得出第一部分的信息其实是来自于控制文件的,FILE HEADER部分的信息才是当前文件的信息!
上面这种情况,checkpoint cnt和scn都不一样,所以数据库是不能启动的,控制文件过旧,这时候可以使用备份的控制文件或者重建控制文件。
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01122: database file 1 failed verification check
ORA-01110: data file 1: '/oracle/ora10/oradata/orcl/system01.dbf'
ORA-01207: file is more recent than control file - old control file
可以看到,这时候数据库是不能open的!
 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26463985/viewspace-712886/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2011-11-21

  • 博文量
    15
  • 访问量
    26639