停止空想

老张的空中之家

浅谈SCN

作者:admin 发表时间:六月 - 6 - 2006

Scn:又叫作系统变更号,可以作为oracle系统内部的一个时钟。

一、Scn的分类:

根据scn位于的位置不同,可以分为以下几种:

                    

 

1. 存在控制文件中的 

A 系统scn

B 每个数据文件的scn

C 每个数据文件的终止scn (stop scn)

              

 

2. 存在数据文件头的 启动scn (start scn) 

 

二、获得这些scn号的方法或者语句

 

1. 系统scn号的获得

select checkpint_change# from v$database;       

 

2. 数据文件scn与终止scn的获得

select name,checkpoint_change#,last_change# from v$datafile where name like ‘’;

 

3. 启动scn的获得

select name,checkpoint_change# from v$datafile_header where name like ‘’;

 

三、scn与恢复的关系

在数据库正常运行的时候,控制文件里记录的每个数据文件的终止scn是null。

正常shutdown的时候,系统执行一个ckpt,然后所有db file的终止scn都被设置成等于数据文件头的启动scn;

重启之后,系统将数据文件头的启动scn与控制文件的数据文件scn比较。

   不相同 : media recovery

   相同:继续比较启动scn与控制文件数据文件的终止scn

           相同:启动成功

              不同:instance recovery

                                                      

四、一般的例子:

create table t…

然后 insert into t… 但是不commit ,shutdown abort

接着mount数据库

select checkpoint_change# from v$database; 比如 12345

select name,heckpoint_change#,last_change# from v$datafile;

发现数据文件的scn为12345 ,而数据文件的scn为null

再查发现数据文件头的启动scn也为12345 所以现在需要进行的就是instance recovery

 

media recoery的例子就不举了

 

五、 wrap-up或者说注意:

系统scn与数据文件scn一般一直相等,在8i以前,也与start scn一直相等,但由于checkpoint queue的出现,checkpoint机制发生了变化,不再是事件驱动的checkpoint了,而是根据checkpoint queue来进行checkpoint的驱动。所以可能在数据库的运行过程中出现数据文件头启动scn与上面两个的不相同,这个并不要紧。

另外还要注意的是:既然系统scn与数据文件的scn一直相等,为什么还要保留数据文件scn,这不是浪费么?因为可能出现数据文件的read only

类别:Oracle

发表评论