ITPUB??ì3
ITPUB论坛 » Oracle数据库管理 » 数据库open时检查点执行的过程

标题: [精华] 数据库open时检查点执行的过程
离线 cicro
一般会员


精华贴数 1
个人空间 0
技术积分 245 (7589)
社区积分 1 (40857)
注册日期 2006-7-29
论坛徽章:0
      
      

发表于 2006-8-9 17:06 
数据库open时检查点执行的过程

eygle的文章中说:

数据库在open阶段,要有两次检查过程:

1:第一次检查数据文件头中的检查点计数(checkpoint cnt)是否和控制文件中的检查点计数(checkpoint cnt)一致。

2:第二次检查数据文件头的开始SCN和控制文件中记录的该文件的结束SCN是否一致,如果不一致,则需要对那个文件进行恢复。


我的理解是数据库在open过程中,数据文件头的检查点计数对应的每个数据文件的checkpoint cnt和控制文件中检查点计数对应的每个每个数据文件的checkpoint cnt比较,如果有那个数据文件不同,就会提示要恢复,相同就可以顺利open。

同理,第二步的检查过程与上面的相同;
不知我的理解对否?

另外还有一个疑问是,这个过程如何通过具体的操作来实现!

有谁能请教一下,谢谢了!


__________________
走自己的路,让别人去说吧!
只看该作者    顶部
离线 cicro
一般会员


精华贴数 1
个人空间 0
技术积分 245 (7589)
社区积分 1 (40857)
注册日期 2006-7-29
论坛徽章:0
      
      

发表于 2006-8-9 17:16 
怎么大虾都下深海了吗,

请教大虾解答一下,十分感谢!


__________________
走自己的路,让别人去说吧!
只看该作者    顶部
在线/呼叫 eygle
天下有雪


精华贴数 65
个人空间 0
技术积分 206413 (1)
社区积分 6443 (217)
注册日期 2001-10-8
论坛徽章:56
现任管理团队成员2007年度ITPUB杰出贡献ITPUB长老会成员ITPUB元老ITPUB维基人授权会员
生肖徽章2007版:鼠2008年新春纪念徽章生肖徽章2007版:龙生肖徽章2007版:猴ITPUB新首页上线纪念徽章生肖徽章:蛇

发表于 2006-8-9 17:23 
checkpoint cnt 的检查是用来确定文件来自于同一个版本,而不是从备份中恢复出来的。因为checkpoint cnt会一直被更新,即便在热备份模式下。

checkpint SCN的检查用来数据库是否异常关闭等,如果异常关闭,则SCN不一致,需要进行恢复。


__________________
只看该作者    顶部
离线 cicro
一般会员


精华贴数 1
个人空间 0
技术积分 245 (7589)
社区积分 1 (40857)
注册日期 2006-7-29
论坛徽章:0
      
      

发表于 2006-8-9 18:09 
能得到eygle大师的指点真是幸运!

谢谢大师!
checkpoint cnt是检查数据文件是否来自与同一个版本,这个我明白了。

但是如果某个数据文件需要恢复时,我怎么才能看到他为什么要恢复,也就是要看到要恢复时候的现象,一下是我的测试:


SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> quit
Disconnected from Oracle9i Release 9.2.0.1.0 - Production
JServer Release 9.2.0.1.0 - Production
[oracle@www cicro]$ ls
cicrodb.dbf      control03.ctl  example01.dbf  redo02.log    test           undotbstemp.dbf
cicrodb.dbf.old  cwmlite01.dbf  indx01.dbf     redo03.log    tools01.dbf    users01.dbf
control01.ctl    cws33db.dbf    odm01.dbf      system01.dbf  undotbs01.dbf  xdb01.dbf
control02.ctl    drsys01.dbf    redo01.log     temp01.dbf    undotbs02.dbf
[oracle@www cicro]$ cp cicrodb.dbf cicrodb.dbf.gjf
[oracle@www cicro]$ sqlplus "/as sysdba"
startup

SQL*Plus: Release 9.2.0.1.0 - Production on Wed Aug 9 17:38:48 2006

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

Connected to an idle instance.

SQL> ORACLE instance started.

Total System Global Area  235999352 bytes
Fixed Size                   450680 bytes
Variable Size             201326592 bytes
Database Buffers           33554432 bytes
Redo Buffers                 667648 bytes
Database mounted.
Database opened.
SQL> alter session set events 'immediate trace name CONTROLF level 10';
Session altered.
此时转存控制文件,信息如下:
(name #15)/opt/oracle/oradata/cicro/cicrodb.dbf
creation size=1280 block size=8192 status=0xe head=15 tail=15 dup=1
tablespace 12, index=12 krfil=11 prev_file=0
unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00
Checkpoint cnt:126 scn: 0x0800.01952813 08/09/2006 17:38:53
Stop scn: 0xffff.ffffffff 08/09/2006 17:38:07

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

转存数据文件头,信息如下:
(name #15) /opt/oracle/oradata/cicro/cicrodb.dbf
creation size=1280 block size=8192 status=0xe head=15 tail=15 dup=1
tablespace 12, index=12 krfil=11 prev_file=0
unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00
Checkpoint cnt:126 scn: 0x0800.01952813 08/09/2006 17:38:53
Stop scn: 0xffff.ffffffff 08/09/2006 17:38:07

此时, /opt/oracle/oradata/cicro/cicrodb.dbf文件的Checkpoint scn在控制文件
和数据文件头相同。

[oracle@www cicro]$ sqlplus "/as sysdba"
SQL*Plus: Release 9.2.0.1.0 - Production on Wed Aug 9 17:39:33 2006
Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.
Connected to:
Oracle9i Release 9.2.0.1.0 - Production
JServer Release 9.2.0.1.0 - Production

SQL> alter system switch logfile;

System altered.
SQL> alter session set events 'immediate trace name CONTROLF level 10';
Session altered.

dump控制文件,信息如下
DATA FILE #1:
  (name #15)/opt/oracle/oradata/cicro/cicrodb.dbf
creation size=0 block size=8192 status=0xe head=8 tail=8 dup=1
tablespace 0, index=6 krfil=1 prev_file=0
unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00
Checkpoint cnt:312 scn: 0x0800.019529e4 08/09/2006 17:40:51
Stop scn: 0xffff.ffffffff 08/09/2006 17:38:07

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

Session altered.

转存数据文件头,信息如下:
DATA FILE #1:
  (name #15) /opt/oracle/oradata/cicro/cicrodb.dbf
creation size=0 block size=8192 status=0xe head=8 tail=8 dup=1
tablespace 0, index=6 krfil=1 prev_file=0
unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00
Checkpoint cnt:312 scn: 0x0800.019529e4 08/09/2006 17:40:51
Stop scn: 0xffff.ffffffff 08/09/2006 17:38:07


日志切换完成后, /opt/oracle/oradata/cicro/cicrodb.dbf文件的Checkpoint scn在控制文件和数据文件头相同。

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> quit
Disconnected from Oracle9i Release 9.2.0.1.0 - Production
JServer Release 9.2.0.1.0 - Production
[oracle@www cicro]$ ls
cicrodb.dbf      control02.ctl  drsys01.dbf    redo01.log    temp01.dbf     undotbs02.dbf
cicrodb.dbf.gjf  control03.ctl  example01.dbf  redo02.log    test           undotbstemp.dbf
cicrodb.dbf.old  cwmlite01.dbf  indx01.dbf     redo03.log    tools01.dbf    users01.dbf
control01.ctl    cws33db.dbf    odm01.dbf      system01.dbf  undotbs01.dbf  xdb01.dbf
[oracle@www cicro]$ mv cicrodb.dbf cicrodb.dbf.bak
[oracle@www cicro]$ mv cicrodb.dbf.gjf  cicrodb.dbf

更换cicrodb.dbf为原来备份的文件
[oracle@www cicro]$ sqlplus "/as sysdba"

SQL*Plus: Release 9.2.0.1.0 - Production on Wed Aug 9 17:56:04 2006

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

Connected to an idle instance.

SQL> startup mount
ORACLE instance started.

Total System Global Area  235999352 bytes
Fixed Size                   450680 bytes
Variable Size             201326592 bytes
Database Buffers           33554432 bytes
Redo Buffers                 667648 bytes
Database mounted.
SQL> alter session set events 'immediate trace name file_hdrs level 10';

Session altered.

转存数据文件头,信息如下:
  (name #15) /opt/oracle/oradata/cicro/cicrodb.dbf
creation size=1280 block size=8192 status=0xe head=15 tail=15 dup=1
tablespace 12, index=12 krfil=11 prev_file=0
unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00
Checkpoint cnt:128 scn: 0x0800.01953281 08/09/2006 17:55:32
Stop scn: 0x0800.01953281 08/09/2006 17:55:32

[oracle@www cicro]$ sqlplus "/as sysdba"

SQL*Plus: Release 9.2.0.1.0 - Production on Wed Aug 9 17:58:19 2006

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.
Connected to:
Oracle9i Release 9.2.0.1.0 - Production
JServer Release 9.2.0.1.0 - Production

SQL> alter session set events 'immediate trace name CONTROLF level 10';
Session altered.

转存控制文件,信息如下:
(name #15) /opt/oracle/oradata/cicro/cicrodb.dbf
creation size=1280 block size=8192 status=0xe head=15 tail=15 dup=1
tablespace 12, index=12 krfil=11 prev_file=0
unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00
Checkpoint cnt:128 scn: 0x0800.01953281 08/09/2006 17:55:32
Stop scn: 0x0800.01953281 08/09/2006 17:55:32
Creation Checkpointed at scn:  0x0000.01213333 12/28/2005 15:28:58


可以看到,/opt/oracle/oradata/cicro/cicrodb.dbf的scn在数据文件头和控制文件
中仍然相同,

这样的话,应该可以打开数据库。
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01113: file 11 needs media recovery
ORA-01110: data file 11: '/opt/oracle/oradata/cicro/cicrodb.dbf'

却报/opt/oracle/oradata/cicro/cicrodb.dbf需要恢复,这个是怎么回事,请大师指点!

谢谢eygle!


__________________
走自己的路,让别人去说吧!
只看该作者    顶部
离线 cicro
一般会员


精华贴数 1
个人空间 0
技术积分 245 (7589)
社区积分 1 (40857)
注册日期 2006-7-29
论坛徽章:0
      
      

发表于 2006-8-9 18:20 
eygle大师还在吗,可能走了!


__________________
走自己的路,让别人去说吧!
只看该作者    顶部
离线 cicro
一般会员


精华贴数 1
个人空间 0
技术积分 245 (7589)
社区积分 1 (40857)
注册日期 2006-7-29
论坛徽章:0
      
      

发表于 2006-8-9 18:26 
大师们可能都回去了,临走一顶,明天在战!


__________________
走自己的路,让别人去说吧!
只看该作者    顶部
离线 cicro
一般会员


精华贴数 1
个人空间 0
技术积分 245 (7589)
社区积分 1 (40857)
注册日期 2006-7-29
论坛徽章:0
      
      

发表于 2006-8-10 08:39 
我知道数据库在mount的时候,是不加载数据文件的,所以上面在数据库mount后,转存出来的数据文件头信息,不是从现有的数据文件中获取的,那么
[oracle@www cicro]$ sqlplus "/as sysdba"

SQL*Plus: Release 9.2.0.1.0 - Production on Wed Aug 9 17:56:04 2006

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

Connected to an idle instance.

SQL> startup mount
ORACLE instance started.

Total System Global Area 235999352 bytes
Fixed Size 450680 bytes
Variable Size 201326592 bytes
Database Buffers 33554432 bytes
Redo Buffers 667648 bytes
Database mounted.
SQL> alter session set events 'immediate trace name file_hdrs level 10';

Session altered.
alter session set events 'immediate trace name file_hdrs level 10';此条语句获取了数据文件头信息,他是从哪里获取的数据文件信息呀,不明白了,请大师们指点一二!


__________________
走自己的路,让别人去说吧!
只看该作者    顶部
离线 cicro
一般会员


精华贴数 1
个人空间 0
技术积分 245 (7589)
社区积分 1 (40857)
注册日期 2006-7-29
论坛徽章:0
      
      

发表于 2006-8-10 09:28 
顶起来,大家帮忙看看?


__________________
走自己的路,让别人去说吧!
只看该作者    顶部
离线 cicro
一般会员


精华贴数 1
个人空间 0
技术积分 245 (7589)
社区积分 1 (40857)
注册日期 2006-7-29
论坛徽章:0
      
      

发表于 2006-8-10 09:41 
在顶!


__________________
走自己的路,让别人去说吧!
只看该作者    顶部
离线 cicro
一般会员


精华贴数 1
个人空间 0
技术积分 245 (7589)
社区积分 1 (40857)
注册日期 2006-7-29
论坛徽章:0
      
      

发表于 2006-8-10 10:06 
在顶起来!

一顶要弄明白这个问题!


__________________
走自己的路,让别人去说吧!
只看该作者    顶部
相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号 联系我们 法律顾问