查看: 25599|回复: 53

[精华] 数据库open时检查点执行的过程

[复制链接]
论坛徽章:
0
发表于 2006-8-9 17:06 | 显示全部楼层 |阅读模式
eygle的文章中说:

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

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

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


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

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

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

有谁能请教一下,谢谢了!
论坛徽章:
0
 楼主| 发表于 2006-8-9 17:16 | 显示全部楼层
怎么大虾都下深海了吗,

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

使用道具 举报

回复
论坛徽章:
117
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20版主7段
日期:2012-05-15 15:24:11ITPUB 11周年纪念徽章
日期:2012-09-28 17:34:42ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:32紫蛋头
日期:2013-03-04 17:00:07优秀写手
日期:2013-12-18 09:29:09
发表于 2006-8-9 17:23 | 显示全部楼层
checkpoint cnt 的检查是用来确定文件来自于同一个版本,而不是从备份中恢复出来的。因为checkpoint cnt会一直被更新,即便在热备份模式下。

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

使用道具 举报

回复
论坛徽章:
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!

使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2006-8-9 18:20 | 显示全部楼层
eygle大师还在吗,可能走了!

使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2006-8-9 18:26 | 显示全部楼层
大师们可能都回去了,临走一顶,明天在战!

使用道具 举报

回复
论坛徽章:
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';此条语句获取了数据文件头信息,他是从哪里获取的数据文件信息呀,不明白了,请大师们指点一二!

使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2006-8-10 09:28 | 显示全部楼层
顶起来,大家帮忙看看?

使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2006-8-10 09:41 | 显示全部楼层
在顶!

使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2006-8-10 10:06 | 显示全部楼层
在顶起来!

一顶要弄明白这个问题!

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表