zoukankan      html  css  js  c++  java
  • day10_scn号

    -------------------SCN系统改变号---------------------
    (1)数据发生变化了,SCN值增加。为了保证数据是同步的,集群有2节点,都能改数据,第1节点改完了,SCN +1。第2节点同步数据,对比两个节点SCN号。
        比如:节点1的SCN是 101       
              节点2的SCN是 100【以大的为准,将节点1的数据同步到节点2】
              
    在oracle中也一样,每做一次改变,SCN号就会+1,或者你不做数据改变,它也会按时间增长,你数据库跑了1小时,时间发生变化了,库的SCN号也会变化。


    SCN的作用?
    你在启动时,是不是要自动恢复,你没有正常关机,第2次启动库时,它怎么知道你数据库的完整性有问题,它不可能扫描所有文件,不可能扫描所有文件下所有数据。
    如果你扫描所有文件,一个生产库至少100G,那你全扫描一下,得多长时间啊?那怎么办?
    它会看每个文件的SCN号,发果发现SCN号有不匹配,肯定丢数据的了,怎么办?

    例:

    控制文件中记录:                             非正常关机 

    数据文件的位置                          库中数据文件
         system SCN:10000             system SCN:9990
      数据文件1 SCN:10000
      数据文件N SCN:10000
      
    日志文件的位置


    当你再次重启库时,两边的同一个数据文件的SCN号不同,你肯定丢动作了。这样呢,它有针对性的去查询,这样可以提高恢复速度。

    在系统中呢,方便还原,库文件上有SCN号,每个对象上也有SCN号。


    SCN的概念 
    SCN是顺序递增的一个数字,在Oracle中用来标识数据库的每一次改动,及其先后顺序。SCN的最大值是0xffff.ffffffff。

    1、系统检查点scn
    当一个检查点动作完成之后(check point),Oracle就把系统检查点的SCN存储到控制文件中。
    select checkpoint_change# from v$database;

    2、数据文件检查点scn
    当一个检查点动作完成后,Oracle就把每个数据文件的scn单独存放在控制文件中。
    select name,checkpoint_change# from v$datafile;


    create table haha as select * from scott.emp;【创建了一个haha表,库发生改变】

    select name,checkpoint_change# from v$datafile; 【没有变化】
    select checkpoint_change# from v$database; 【没有变化】


    总结:没有变化,但是你的SCN号肯定是增加了,但是没有更新到数据文件上,也没有更新到控制文件上。
    在日志中更新了,为什么不往数据文件、控制文件上更新呢?
    因为SCN号是按着时间点和改变次数来变的,变得太频繁了,每变一次,更新一次,每变一次,更新一次,服务器压力太大了。
    只有在 输入 alter system checkpoint;  后会把检查点的SCN更新过去。

    select name,checkpoint_change# from v$datafile; 【有变化】
    select checkpoint_change# from v$database; 【有变化】




    3、启动scn
    Oracle把这个检查点的scn存储在每个数据文件的文件头中,这个值称为启动scn,
    因为它用于在数据库实例启动时,检查是否需要执行数据库恢复。
    select name,checkpoint_change# from v$datafile_header;【更新】


    4、终止scn【关库的时候,触发记录一个结束的SCN号,也进行一次同步,正常关库也记录一份SCN,保证所有SCN号相同,当你再重启库时,就不用恢复操作了】
    每个数据文件的终止scn都存储在控制文件中。
    select name,last_change# from v$datafile;
    在正常的数据库操作过程中,所有正处于联机读写模式下的数据文件的终止scn都为null.

    shutdown immediate;
    startup mount;
    select name,last_change# from v$datafile;





  • 相关阅读:
    文件操作
    set集合,深浅拷贝
    is 和 == 区别 id()函数
    字典
    列表
    基本数据类型
    第十二章 if测试和语法规则
    第十一章 赋值、表达式和打印
    第十章 python语句简介
    第九章元组、文件及其他
  • 原文地址:https://www.cnblogs.com/xiaoxiao5ya/p/70c943ef17531cea66e2a832970a22ae.html
Copyright © 2011-2022 走看看