ITPub博客

首页 > Linux操作系统 > Linux操作系统 > SCN, Checkpoint 与 oracle数据库恢复的关系(final)

SCN, Checkpoint 与 oracle数据库恢复的关系(final)

原创 Linux操作系统 作者:tolywang 时间:2011-03-14 15:25:09 0 删除 编辑


SCN 与 CHECKPOINT

checkpoint发生时,将当时的checkpoint SCN 写入数据文件头(称之为start scn)和
控制文件 (存放系统checkpoint SCN), 同时通知DBWR进程将cache中dirty block写到
数据文件。

CKPT进程也会在控制文件中记录RBA(redo block address), 以标志Recovery需要从日志
中哪个地方开始。与checkpoint相关的SCN号有四个,其中三个存在控制文件中,一个存
放在数据文件头中。这四个分别是:

 

1).System Checkpoint SCN
当checkpoint完成后,ORACLE将System Checkpoint SCN号存放在控制文件中。我们可以
通过下面SQL语句查询:
select checkpoint_change# from v$database;


2).Datafile Checkpoint SCN
当一个检查点动作完成之后,Oracle就把每个数据文件的scn单独存放在控制文件中.
我们可以通过下面SQL语句查询所有数据文件的Datafile Checkpoinnt SCN号。
select name,checkpoint_change# from v$datafile;


3).Start SCN (启动SCN)
checkpoint完成后,将产生的checkpoint SCN 写入数据文件头(称之为start scn).
这个SCN用于检查数据库启动过程是否需要做media recovery.
我们可以通过以下SQL语句查询:
select name,checkpoint_change# from v$datafile_header;

注意:     数据文件头中的检查点SCN(start SCN) 与控制文件中记录的数据文件检查点SCN号含义是一样的。 也就是说,一旦发生全局范围以及文件级别的检查点时,不仅会将这时的检查点SCN号记录到控制文件,还会记录在检查点作用的数据文件头部。 


4).End SCN号(stop scn, 终止SCN)
这个SCN号用于检查数据库启动过程是否需要做instance recovery.
我们可以通过以下SQL语句查询:
select name,last_change# from v$datafile;
在正常的数据库操作过程中,所有正处于联机读写模式下的数据文件的终止scn都为null.

 

SCN的值不会为0,除非重建数据库,一般SCN值也是不重复的。
SCN不连续原因可能如下:
1.当发生日志组切换的时候
2.当符合LOG_CHECKPOINT_TIMEOUT,LOG_CHECKPOINT_INTERVAL,fast_start_io_target,
fast_start_mttr_target参数设置的时候
3.当运行ALTER SYSTEM SWITCH LOGFILE的时候
4.当运行ALTER SYSTEM CHECKPOINT的时候
5.当运行alter tablespace XXX begin backup,end backup的时候
6.当运行alter tablespace ,datafile offline的时候;

 


---------------------------------------------------

--- 在数据库运行期间的scn值

在数据库打开并运行之后,控制文件中的系统检查点、控制文件中的数据文件检查点scn
和每个数据文件头中的启动scn都是相同的。控制文件中的每个数据文件的终止scn都为null.

在安全关闭数据库的过程中,系统会执行一个检查点动作,这时所有数据文件的终止scn
都会设置成数据文件头中的那个启动scn的值。 在数据库重新启动的时候, Oracle将文件
头中的那个启动scn与数据库文件检查点scn(控制文件中)进行比较,如果这两个值相互匹
配,那么不需要Media Recovery, oracle接下来还要比较数据文件头中的启动scn和控制
文件中数据文件的终止scn, 如果这两个值也一致,就意味着所有对数据库的修改都没有在
关闭数据库的过程中丢失,因此这次启动数据库的过程也不需要任何恢复操作(即不需要实
例恢复),此时数据库就可以打开了。当所有的数据库都打开之后,存储在控制文件中的数
据文件终止scn的值再次被更改为null,这表示数据文件已经打开并能够正常使用了。

---------------------------------------------------

 

还需要注意的是  :      在数据库重新启动的时候,   Oracle首先比较(每个)文件
头中的那个启动scn (start SCN) 与控制文件中记录的 (每个) 数据库文件检查点scn, 如果他们都相互匹配, 那么不需要Media Recovery. 

 但是如果只是控制文件中记录的数据文件检查点(多个数据文件,对应多个SCN) ,  与 (对应的)  数据文件头中的启动SCN (start scn) 相同 ,     而在每个在线的可读可写的数据文件“之间”,他们的检查点SCN不相同, 那么也要求Media Recovery . 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/35489/viewspace-689392/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Oracle , MySQL, SAP IQ, SAP HANA, PostgreSQL, Tableau 技术讨论,希望在这里一起分享知识,讨论技术,畅谈人生 。

注册时间:2007-12-10

  • 博文量
    5595
  • 访问量
    13740168