eygle.com   eygle.com
eygle.com eygle
eygle.com  
 

« 江湖传闻-Blogspot再次解封 | Blog首页 | 备份的控制文件和新的数据文件 »

关于控制文件与数据文件头信息的说明
modb.pro

为了回答关于《深入浅出Oracle》中的一些疑问,引出本系列文章,讨论链接参考:

http://www.itpub.net/609499.html

上一讲中,我们说过:当我们使用file_hdrs事件来转储数据文件头信息时,Oracle会转储两部分信息,一部分来自控制文件,一部分来自数据文件,在数据库启动过程中,这两部分信息要用来进行启动验证。

在数据库open的过程中,Oracle要进行检查中包含以下两个过程:

第一次检查数据文件头中的Checkpoint cnt是否与对应控制文件中的Checkpoint cnt一致.
如果相等,进行第二次检查.

第二次检查数据文件头的开始SCN和对应控制文件中的结束SCN是否一致如果结束SCN等于开始SCN,则不需要对那个文件进行恢复.

对每个数据文件都完成检查后,打开数据库.同时将每个数据文件的结束SCN设置为无穷大.

通过以下过程我们来进一步说明一下这个内容。

我们来看以下来自控制文件部分(选取一个文件测试): 

DATA FILE #4:
  (name #4) /opt/oracle/oradata/eygle/eygle01.dbf
creation size=0 block size=8192 status=0xe head=4 tail=4 dup=1
 tablespace 4, index=4 krfil=4 prev_file=0
 unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00
 Checkpoint cnt:58 scn: 0x0000.002ac8ee 08/11/2006 09:48:29
 Stop scn: 0x0000.002ac8ee 08/11/2006 09:48:29
 Creation Checkpointed at scn:  0x0000.0015078d 06/06/2006 09:41:54
 thread:0 rba:(0x0.0.0)
................
 aux_file is NOT DEFINED

 这部分中包含的重要信息有:
检查点计数: Checkpoint cnt:58
检查点SCN: scn: 0x0000.002ac8ee 08/11/2006 09:48:29
数据文件Stop SCN:Stop scn: 0x0000.002ac8ee 08/11/2006 09:48:29

我们再看来自数据文件头的信息:

 FILE HEADER:
        Software vsn=153092096=0x9200000, Compatibility Vsn=134217728=0x8000000
        Db ID=1407686520=0x53e79778, Db Name='EYGLE'
        Activation ID=0=0x0
        Control Seq=979=0x3d3, File size=1280=0x500
        File Number=4, Blksiz=8192, File Type=3 DATA
Tablespace #4 - EYGLE  rel_fn:4
Creation   at   scn: 0x0000.0015078d 06/06/2006 09:41:54
Backup taken at scn: 0x0000.00000000 01/01/1988 00:00:00 thread:0
 reset logs count:0x232bee1f scn: 0x0000.0007c781 recovered at 08/10/2006 20:57:53
 status:0x0 root dba:0x00000000 chkpt cnt: 58 ctl cnt:57
begin-hot-backup file size: 0
Checkpointed at scn:  0x0000.002ac8ee 08/11/2006 09:48:29
.......................

这部分中包含的重要信息有:
检查点SCN: Checkpointed at scn:  0x0000.002ac8ee 08/11/2006 09:48:29
检查点计数: chkpt cnt: 58 ctl cnt:57

这两者都和控制文件中所记录的一致。如果这两者一致,数据库启动时就能通过验证,启动数据库。

那么如果不一致呢?
Oracle则请求进行恢复。
我们看,从备份中恢复eygle01.dbf文件.
首先第一部分从控制文件中获得的信息是相同的: 

DATA FILE #4:
  (name #4) /opt/oracle/oradata/eygle/eygle01.dbf
creation size=0 block size=8192 status=0xe head=4 tail=4 dup=1
 tablespace 4, index=4 krfil=4 prev_file=0
 unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00
 Checkpoint cnt:58 scn: 0x0000.002ac8ee 08/11/2006 09:48:29
 Stop scn: 0x0000.002ac8ee 08/11/2006 09:48:29
 Creation Checkpointed at scn:  0x0000.0015078d 06/06/2006 09:41:54
...................
 aux_file is NOT DEFINED

检查点计数: Checkpoint cnt:58
检查点SCN: scn: 0x0000.002ac8ee 08/11/2006 09:48:29
数据文件Stop SCN:Stop scn: 0x0000.002ac8ee 08/11/2006 09:48:29

而从文件头中获得的备份文件信息则是: 

 FILE HEADER:
        Software vsn=153092096=0x9200000, Compatibility Vsn=134217728=0x8000000
        Db ID=1407686520=0x53e79778, Db Name='EYGLE'
        Activation ID=0=0x0
        Control Seq=973=0x3cd, File size=1280=0x500
        File Number=4, Blksiz=8192, File Type=3 DATA
Tablespace #4 - EYGLE  rel_fn:4
Creation   at   scn: 0x0000.0015078d 06/06/2006 09:41:54
Backup taken at scn: 0x0000.00000000 01/01/1988 00:00:00 thread:0
 reset logs count:0x232bee1f scn: 0x0000.0007c781 recovered at 08/10/2006 20:57:53
 status:0x0 root dba:0x00000000 chkpt cnt: 53 ctl cnt:52
begin-hot-backup file size: 0
Checkpointed at scn:  0x0000.002ac5f9 08/10/2006 20:58:21
...................................

我们看到此时备份文件的信息:
检查点是:Checkpointed at scn:  0x0000.002ac5f9 08/10/2006 20:58:21
检查点计数为:chkpt cnt: 53 ctl cnt:52

这两者不再一致,首先是检查点技术不一致,当前文件的chkpt cnt为53,小于控制文件中记录的58,Oracle可以判断文件是从备份中恢复的,或者文件故障,需要进行介质恢复。

我们看如果此时我们试图打开数据库,则Oracle提示文件需要介质恢复: 

SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01113: file 4 needs media recovery
ORA-01110: data file 4: '/opt/oracle/oradata/eygle/eygle01.dbf'

执行恢复: 

SQL> recover datafile 4;
Media recovery complete.

我们看看恢复完成之后,控制文件和数据文件的变化.
首先看控制文件的变化: 

DATA FILE #4:
  (name #4) /opt/oracle/oradata/eygle/eygle01.dbf
creation size=0 block size=8192 status=0xe head=4 tail=4 dup=1
 tablespace 4, index=4 krfil=4 prev_file=0
 unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00
 Checkpoint cnt:59 scn: 0x0000.002ac8ee 08/11/2006 09:48:29
 Stop scn: 0x0000.002ac8ed 08/11/2006 09:48:29
 Creation Checkpointed at scn:  0x0000.0015078d 06/06/2006 09:41:54
......................

检查点计数: Checkpoint cnt:59
执行了恢复之后,检查点计数较前增加了1

检查点SCN: scn: 0x0000.002ac8ee 08/11/2006 09:48:29
数据文件Stop scn: 0x0000.002ac8ed 08/11/2006 09:48:29
数据文件Stop scn和数据文件进行了同步。

数据文件头信息: 

 FILE HEADER:
        Software vsn=153092096=0x9200000, Compatibility Vsn=134217728=0x8000000
        Db ID=1407686520=0x53e79778, Db Name='EYGLE'
        Activation ID=0=0x0
        Control Seq=983=0x3d7, File size=1280=0x500
        File Number=4, Blksiz=8192, File Type=3 DATA
Tablespace #4 - EYGLE  rel_fn:4
Creation   at   scn: 0x0000.0015078d 06/06/2006 09:41:54
Backup taken at scn: 0x0000.00000000 01/01/1988 00:00:00 thread:0
 reset logs count:0x232bee1f scn: 0x0000.0007c781 recovered at 08/11/2006 10:11:26
 status:0x0 root dba:0x00000000 chkpt cnt: 59 ctl cnt:58
begin-hot-backup file size: 0
Checkpointed at scn:  0x0000.002ac8ed 08/11/2006 09:48:29
..........................

我们看到此时数据文件的信息:
检查点是:Checkpointed at scn:  0x0000.002ac8ed 08/11/2006 09:48:29
这个检查点和控制文件中记录的stop scn一致,数据库启动可以顺利进行。

检查点计数为:chkpt cnt: 59 ctl cnt:58

我们打开数据库: 

SQL> alter database open;

Database altered.

SQL> alter session set events 'immediate trace name file_hdrs level 10';

Session altered.

此时数据库恢复正常运行。
控制文件信息如下: 

DATA FILE #4:
  (name #4) /opt/oracle/oradata/eygle/eygle01.dbf
creation size=0 block size=8192 status=0xe head=4 tail=4 dup=1
 tablespace 4, index=4 krfil=4 prev_file=0
 unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00
 Checkpoint cnt:60 scn: 0x0000.002ac8ef 08/11/2006 10:19:30
 Stop scn: 0xffff.ffffffff 08/11/2006 09:48:29
 Creation Checkpointed at scn:  0x0000.0015078d 06/06/2006 09:41:54

 此时stop scn被置为无穷大。
数据文件头信息如下:

 FILE HEADER:
        Software vsn=153092096=0x9200000, Compatibility Vsn=134217728=0x8000000
        Db ID=1407686520=0x53e79778, Db Name='EYGLE'
        Activation ID=0=0x0
        Control Seq=984=0x3d8, File size=1280=0x500
        File Number=4, Blksiz=8192, File Type=3 DATA
Tablespace #4 - EYGLE  rel_fn:4
Creation   at   scn: 0x0000.0015078d 06/06/2006 09:41:54
Backup taken at scn: 0x0000.00000000 01/01/1988 00:00:00 thread:0
 reset logs count:0x232bee1f scn: 0x0000.0007c781 recovered at 08/11/2006 10:11:26
 status:0x4 root dba:0x00000000 chkpt cnt: 60 ctl cnt:59
begin-hot-backup file size: 0
Checkpointed at scn:  0x0000.002ac8ef 08/11/2006 10:19:30

未完待续...

 


历史上的今天...
    >> 2009-08-11文章:
           20090811-墨墨、书书、Oracle

By eygle on 2006-08-11 10:01 | Comments (6) | Internal | 861 |

6 Comments

为何这两个值总是不一致呢?这两个值不知道有何说法,chkpt cnt: 53 ctl cnt:52
还有一个问题就是我shutdown immediate ,然后startup mount,转储出来的,很的数据文件的checkpoint scn 都是不一样的,这是为什么呢?应该是所有的数据文件checkpoint scn 一致才可以不需要恢复正常启动的。希望大师帮忙解答一下?谢谢!

为什么数据文件头记录的ctl cnt:52 比控制文件中小1呢?

是这样的:
当检查点更新控制文件和数据文件头上的chkpt cnt信息时
在更新控制文件之前,可以获得当前的ctl cnt,这个信息被记入了数据文件,也就是 ctl cnt:45

为什么要写这个到数据文件呢?

因为不能保证当前更新 控制文件 上的 checkpoint cnt一定会成功(数据库可能突然crash掉了),记录之前成功的ctl cnt可以确保上一次的checkpoint是成功完成的,从而省略了校验步骤。

明白了,谢谢!
还有一个问题,就是为什么同一时刻转储出来的每个数据文件,他们的checkpoint scn都一样呢?我是在正常关机的情况下做的。

不好意思,我说错了,应该是
同一时刻转储出来的每个数据文件,他们的checkpoint scn都不一样呢?我是在正常关机的情况下做的。应该是一样的才对,这样子就不用做例程恢复的。

盖版,对于CHECKPOINT,理解不下去的感觉

能不能在下面帖子行解答一下,

http://www.itpub.net/thread-1232087-1-1.html

在进行了介质恢复之后,为什么检查点又变小了呢
没想明白

数据文件Stop SCN:Stop scn: 0x0000.002ac8ee 08/11/2006 09:48:29
检查点是:Checkpointed at scn: 0x0000.002ac8ed 08/11/2006 09:48:29


CopyRight © 2004~2020 云和恩墨,成就未来!, All rights reserved.
数据恢复·紧急救援·性能优化 云和恩墨 24x7 热线电话:400-600-8755 业务咨询:010-59007017-7040 or 7037 业务合作: marketing@enmotech.com