日历

2008 7.6 Sun
  12345
6789101112
13141516171819
20212223242526
2728293031  
«» 2008 - 7 «»

文章搜索

日志文章

2007年07月18日 13:46:51

CKPT 和 SCN

感觉自己一直对一些基本概念没有精确的了解,所以查查DOC复习一下。
checkpoint是什么?checkpoint就是CKPT process,当它被触发的时候告诉database writer process DBWT,把内存中的脏数据写入到磁盘中,完成这个以后,checkpoint进程会更新数据文件头,并在控制文件中记录checkpoint的完成。
checkpoint的主要目的就是为了同步高速缓冲区(内存)和磁盘的信息。
每个checkpoint都记录一系列获得活跃的事务和记录最近的事务的日志的地址。一次checkpoint包含以下步骤:
1. 1把redo buffers的内容刷到redo log中。
2. 2在redo log file中留下一个checkpoint记录。
3. 3把database buffer cache的变更刷新到磁盘。
4. 4在checkpoint完成后,更新数据文件头和控制文件。
Oracle checkpoint的频率和数据库在崩溃后的恢复时间有紧密的联系。因为checkpoint的时候atabase writer processes把所有的修改更新到磁盘,越频繁的checkpoints,就越少的数据需要恢复当数据库崩溃的时候。不过,checkpoint会带来一定性能开销。Oracle可以自动的进行checkpoint调整,从而到达最佳的效率和性能,而你不需要设置checkpoint的相关
参数。自动Checkpoint调整,通过设置FAST_START_MTTR_TARGET初始化参数为0,或者为空,你就可以启动checkpoint自动管理。这就意味着你不用设置任何参数来告诉Oracle发生checkpoint的频率。这将使得你的数据库崩溃后恢复所消耗的时间为一个合理的值。
在什么时候,会发生checkpoint呢?以下几种情况会触发 checkpoint。
1.当发生日志组切换的时候,减少crash后的recovery时间。
2.当符合 LOG_CHECKPOINT_TIMEOUT,LOG_CHECKPOINT_INTERVAL,fast_start_io_target,fast_start_mttr_target 参数设置的时候
  LOG_CHECKPOINT_TIMEOUT 默认1800秒
  LOG_CHECKPOINT_INTERVAL 默认 0
  fast_start_mttr_target 默认,如果被指定,会覆盖LOG_CHECKPOINT_INTERVAL
  fast_start_io_target,10g以后已经抛弃。
3.当 ALTER SYSTEM SWITCH LOGFILE,ALTER SYSTEM CHECKPOINT
4.当 alter tablespace XXX begin backup,end backup
5.当 alter tablespace ,datafile offline ;
SCN是什么?The System Change Number
system change number (SCN)是一个非常重要的标记,Oracle使用它来标记数据库在过去时间内的状态和轨迹。
当你从一个表查询数据的时候,你不会影响数据的状态,但是当你修改、插入或者删除数据的时候,数据库的状态就和之前发生了变化。Oracle使用SCN来保存所有变化的轨迹。SCN是一个逻辑时钟来记录数据库事件。它非常的重要,并不是只是为了恢复。
SCN有点类似于sequence,Oracle在SGA中增加它。当一个事务修改或者插入数据,Oracle首先写入一个新的SCN到回滚段中。log writer进程立刻把提交的记录写入到重做日志中,这条提交的记录将拥有唯一的SCN。事实上,把SCN写入到日志,就意味着一个事务的完成。SCN帮助Oracle决定在一次突然中断或者SHUTDOWN ABORT后,是否需要一个崩溃恢复。每当数据库发生checkpoint,Oracle 写一个START SCN命令到数据文件头。控制文件维护着每个数据文件
的SCN,称为STOP SCN,通常是无穷大,每当实例正常关闭(SHUTDOWN NORMAL or SHUTDOWN IMMEDIATE),Oracle会复制数据文件头START SCN到控制文件的STOP SCN。如果是正常的重启数据库,是不需要恢复的,因为控制文件和数据文件的SCN是吻合的。反之,突然中断系统就没法同步SCN,SCN不匹配,Oracle就认为需要做恢复。
另外Oracle还使用数据块的SCN来维护查询的一致性和多版本。
如何获得数据库的SCN呢?
SQL> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
    7831154747459

Tags: checkpoint   SCN  

类别: Administer |  评论(1) |  浏览(4361) |  收藏
1楼 [匿名]ST 2007年07月19日 10:47:25 Says:
顶一个   不过还是没搞很清楚
发表评论