CTOCIO IT专家网

天极传媒 比特网 | 天极网 | IT专家网 | IT商网 | 52PK游戏网 | 手机天极 | IT分众 |
IT专家网搜索

数据库 | Oracle | DB2 | SQL Server | MySQL | 商业智能 | BI | DBA | Sybase| SQL Server 2008

您现在的位置: IT专家网 > 数据库子站 > 数据库技巧

Checkpoint和SCN的解析

作者: 胡金培,  出处:IT专家网, 责任编辑: 李书琴, 
2008-07-03 09:34
  很多人都把checkpoint的概念给复杂化了,其实checkpoint这个数据库概念引入的真正意义就是用来减少在数据库恢复过程中所花的时间(instance recovery)。SCN在Oracle中理解为一个内部同步时钟,是系统改变号的缩写(system change number)。

  Checkpoint

  很多人都把checkpoint的概念给复杂化了,其实checkpoint这个数据库概念引入的真正意义就是用来减少在数据库恢复过程中所花的时间(instance recovery),那么checkpoint是由谁来做的呢?我们都知道数据库中有个CKPT进程,这是个可选进程,但是真正执行检查点的任务并不是由ckpt来完成的,而是ckpt在更新控制文件和数据文件头的有关信息后,通知DBWn进程,产生一个检查点,在产生检查点的时候,DBWn进程会将buffer cache中的脏数据(当前online redo log对应的脏数据),写入我们的数据文件当中。这个时候如果数据库此时崩溃(比如我们做个shutdown abort),那么在进行实例恢复的时候就可以不需要当前online redo log的内容了,会很快就做完。因此ckpt进程只是个辅助进程,他的任务更多的是用来在系统做checkpoint的时候更新控制文件和数据文件头中的信息。其实在oracle 8i的时候呢,ckpt的任务一般都是由lgwr进程来完成,到了8i以后,随着CKPT进程的引入,lgwr的工作负担就减轻了很多(commit的速度加快了)

  那么如何来产生检查点呢?

  有三种方法,可以通过

  1.alter system checkpoint

  2.alter system switch logfile

  3.DBWn进程写出脏块

  SCN

  在Oracle中理解为一个内部同步时钟,是系统改变号的缩写(system change number),在Oracle数据库中我们可以通过dbms_flashback包来查询当前系统的改变号:select dbms_flashback.get_system_change_number from dual;一般来讲SCN主要是用来标识数据库所做的所有改变,这个SCN的改变是只能前进,不能回退,除非我们打算重建库,数据库中的SCN永远不会归0,一般来说SCN的前进触发是由commit来进行的,除了这些据我观察每隔3秒种系统也都会刷新一次SCN.

  需要注意的是:

  1.CKPT一定是是在checkpoint发生的时候将数据库当前的SCN更新入数据库文件头和控制文件当中,同时DBWn进程将buffer cache中的脏数据块(dirty block)写到数据文件当中(这个脏数据也一定是当前online redo log保护的那一部分)。

  2.同时CKPT进程还会在控制文件当中记录(redo block address)RBA,这个地址用来标志恢复的时候需要从日志中的那个位置开始。

  在Oracle数据库中和checkpoint相关的SCN总共有4个

  1.System checkpoint SCN (存在于控制文件)

  在系统执行checkpoint后,Oracle会更新当前控制文件中的System checkpoint SCN。

  我们可以通过

  select checkpoint_change# from v$database:

  来查看

共3页。 1 2 3 :

网友评论

笔名 
请您注意:遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。    IT专家网友拥有管理笔名和留言的一切权利。
  • 周排行榜
  • 月排行榜

邮件订阅


    
天极服务 | 关于我们 | 网站律师 | 加入我们 | 联系我们 | 广告业务 | 友情链接 | 我要挑错
All Rights Reserved, Copyright 2004-2008, Ctocio.com.cn
渝ICP证B2-20030003号 如有意见请与我们联系 powered by 天极内容管理平台CMS4i