zoukankan      html  css  js  c++  java
  • oracle(十一) scn

      SCN(System Chang Number)作为oracle中的一个重要机制,在数据恢复Data Guard、Streams复制、RAC节点间的同步等各个功能中起着重要作用。

    理解SCN的运作机制,可以帮助你更加深入地了解上述功能。在理解SCN之前,我们先看下oracle事务中的数据变化是如何写入数据文件的:

      1、事务开始;

      2、在buffer cache中找到需要的数据块,如果没有找到,则从数据文件中载入buffer cache中;

      3、事务修改buffer cache的数据块,该数据被标识为“脏数据”,并被写入log buffer中;

      4、事务提交,LGWR进程将log buffer中的“脏数据”写入redo log file中;

      5、当发生checkpoint,CKPT进程更新所有数据文件的文件头中的信息,DBWn进程则负责将Buffer Cache中的脏数据写入到数据文件中。

    经过上述5个步骤,事务中的数据变化最终被写入到数据文件中。但是,一旦在上述中间环节时,数据库意外宕机了,在重新启动时如何知道哪些数据已经写入数据文件、

    哪些没有写呢?SCN机制就能比较完善的解决上述问题。 正是它这种只会增加的特性确保了Oracle知道哪些应该被恢复、哪些应该被复制。总共有4中SCN:

      (1)系统检查点(System Checkpoint)SCN、

      (2)数据文件检查点(Datafile Checkpoint)SCN、

      (3)结束SCN(Stop SCN)、

      (4)开始SCN(Start SCN)。

    其中前面3种SCN存在于控制文件中,最后一种则存在于数据文件的文件头中。在控制文件中,System Checkpoint SCN是针对整个数据库全局的,因而只存在一个,

    而Datafile Checkpoint SCN和Stop SCN是针对每个数据文件的,因而一个数据文件就对应在控制文件中存在一份Datafile Checkpoint SCN和Stop SCN。

    在数据库正常运行期间,Stop SCN是一个无穷大的数字。

     

    下面,在简单介绍一下SCN如何在数据库恢复中起作用。数据库在正常关闭(shutdown immediate/normal)时,会先做一次checkpoint,将log file中的数据写

    入数据文件中,将控制文件、数据文件中的SCN都更新为最新的SCN。数据库异常/意外关闭不会更新或者只更新部分Stop SCN。当数据库启动时,Oracle先检查

    控制文件中的每个Datafile Checkpoint SCN和数据文件中的Start SCN是否相同,再检查每个Datafile Checkpoint SCN和Stop SCN是否相同。如果发现有不同,

    就从Redo Log中找到丢失的SCN,重新写入数据文件中进行恢复。

  • 相关阅读:
    常见linux内核线程说明
    /proc/modules分析
    linux用户空间和内核空间(内核高端内存)_转
    二层交换机/三层交换机/路由器
    NAT--Network Address Translator
    curl命令使用
    (转)XML中必须进行转义的字符
    LFCP
    IPSP问题
    API和schema开发过程问题汇总
  • 原文地址:https://www.cnblogs.com/yuyutianxia/p/3336831.html
Copyright © 2011-2022 走看看