• SCN&CHECKPOINT


            SCN:System Change Number ,用来标示数据库在某个时刻的确切版本,他只能前进,不能后退. SCN是数字,它是由timestamp转换过来的,可以select timestamp_to_scn(systimestamp) from dual;获得一个SCN,也可以用scn_to_timestamp转换为timestamp.

             SCN存在于控制文件,数据文件头,BLOCK头,日志文件头,日志文件中。

             1.控制文件中的SCN:当系统执行checkpoint之后,会更新控制文件的System checkpoint SCN;

              Select checkpoint_change# from v$database;

             2.Datafile checkpoint SCN(存在于控制文件):由于控制文件记录了数据文件的位置和信息,所以控制文件也会记录数据文件的Datafile checkpoint SCN,当执行checkpoint时,会更新控制文件中的datafile checkpoint scn.

             Select checkpoint_change# from v$datafile;

             3.Start SCN(存在于各个数据文件头):执行checkpoint的时候,ORACLE会更新存放在各个数据文件的Start SCN

             Select checkpoint_change# from v$datafile_header;

             4.Stop SCN(存在于控制文件中)既然有Start SCN,当然也会有Stop SCN,

             Select name,last_change# from v$datafile;

             对于onlinedatafile 这个Stop SCN会为null

             5.Low SCN(存在于控制文件以及redo文件中):它表示一个redo log的起始SCN

             6.Next SCN(存在于控制文件以及redo 文件中):他表示一个redo log 结束的SCN。对于一个currentredo log来说 它的next SCN为无穷大,或者null,因为不可知。

             7.有关block 中的SCN太复杂,另外单独介绍。

              在数据库的启动:

    1.      检查System checkpoint SCN是否等于数据文件头中的Datafile checkpoint scn.如果相等就表示这个数据文件不是来自于备份就不需要做media recovery.

    2.      检查Start SCN是否等于Stop SCN,如果想等就不需要做instance recovery,如果不等,就需要做instance recovery,因为非正常关闭数据库不会做checkpoint,那么Stop SCN依然为无穷大,所以ORACLE就可以根据这两个的值是否相等判断数据库是否需要做instance recovery.如果数据库是正常关闭的,那么ORACLE 会将Stop SCN的值设为Start SCN.其实数据库打开的时候也会做一次checkpoint,具体可以设值log_checkpoints_to_alert=true参数,然后查看alert文件来验证open阶段是否执行了checkpoint,执行这个checkpoint的时候会将End SCN设置为null.

    总结一下:控制文件中记录了多个SCN System checkpoint SCN, datafile checkpoint scn, Stop  scnredo里面的low scn ,next scn.数据头文件中记录的只有一个Start  t scn.

    下面是dump实验:

    dump control file:   

    SQL> alter session set events 'immediate trace name controlf level 8';

     

    Session altered.

    下面是一部分转储内容(系统处于OPEN状态):

     

              DB Name "ROBIN"

     Database flags = 0x00404001 0x00001000

     Controlfile Creation Timestamp  09/08/2009 18:28:58

     Incmplt recovery scn: 0x0000.00000000

     Resetlogs scn: 0x0000.00000001 Resetlogs Timestamp  09/08/2009 18:28:58

     Prior resetlogs scn: 0x0000.00000000 Prior resetlogs Timestamp  01/01/1988 00:0

    0:00

     Redo Version: compatible=0xa200200

     #Data files = 6, #Online files = 6

     Database checkpoint: Thread=1 scn: 0x0000.00053433

    这里的SCN就是

    System checkpoint scn 它等于0x0000.00053433

     Threads: #Enabled=1, #Open=1, Head=1, Tail=1

    …………………………..

    DATA FILE #5:

      (name #12) /storage/ora_data/ROBIN/datafile/o1_mf_test_5bf4m3y7_.dbf

    creation size=12800 block size=8192 status=0xe head=12 tail=12 dup=1

     tablespace 5, index=6 krfil=5 prev_file=0

     unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00

     Checkpoint cnt:14 scn: 0x0000.00053433 09/15/2009 07:15:48 

      这里的scndatafile checkpoint scn ,它和System checkpoint scn是相等的。

     Stop scn: 0xffff.ffffffff 09/10/2009 15:30:07                      

      这里的Stop SCN就是null

     Creation Checkpointed at scn:  0x0000.00027255 09/08/2009 19:20:39

     thread:1 rba:(0xb.9588.10)

     Offline scn: 0x0000.00000000 prev_range: 0

     Online Checkpointed at scn:  0x0000.00000000

     thread:0 rba:(0x0.0.0)

     

    这里控制文件中记录了System checkpoint scn,Stop scn,datafile check point scn.

     Full checkpoint :到了log_checkpoint_interval设置时间间隔, 或者alter system checkpoint,以非abort shutdown 就会产生full checkpoint,它有以下作用:

    1. Get current RBA from the log buffers
    2. 唤醒DBWn.
    3. DBWn把所有检查点以前修改过的buffers 写到disk.
    4. Update data file headers and control file.
    5. 由于执行了检查点,所以在instance recover的时候不需要redo 里面的内容了

    数据库关闭和开始都会执行一次checkpoint,具体可以设置参数

    alter system set log_checkpoints_to_alert=true; 让执行的检查点被记录到alert log 中。

    另外Egyle log switch不是full checkpoint ,它是incremental checkpoint,但是它会更新控制文件和数据文件的头。

     

    Incremental Checkpoint:

    1.      避免当执行full checkpoint的时候执行大量的I/O操作。

    2.      只写oldest block,不是写all block.

    3.      只记录到control file,不会更新数据头文件。

    增量检查点可以有效的减少恢复的时间,同时避免执行检查点带来的I/O性能问题。

  • 相关阅读:
    StringTemplate.Net 学习笔记(9):深入了解模板组文件
    StringTemplate.Net 学习笔记(6):自定义输出格式
    StringTemplate.Net 学习笔记(4):表达式元素语法(下)
    StringTemplate.Net 学习笔记(10):模板组继承及模板组接口
    StringTemplate.Net 学习笔记(3):表达式元素语法(上)
    StringTemplate.Net 学习笔记(7):加载模板文件
    StringTemplate.Net 学习笔记(8):加载模板组文件
    十天学会ASP.Net——(10)
    十天学会ASP.Net——(6)
    十天学会ASP.Net——(7)
  • 原文地址:https://www.cnblogs.com/hehe520/p/6330706.html
Copyright © 2020-2023  润新知