day10_scn号

Posted 小小5呀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;





以上是关于day10_scn号的主要内容,如果未能解决你的问题,请参考以下文章

oracle学习笔记 系统改变号(SCN)详解

恢复删除的表数据

goldenagte使用expdp根据scn同步表.

oracle删除数据恢复

oracle回复删除的数据

oracle 误删数据的恢复