ITPub博客

首页 > Linux操作系统 > Linux操作系统 > SCN (2)

SCN (2)

原创 Linux操作系统 作者:ipv6echo 时间:2011-08-10 15:09:59 0 删除 编辑

A)  

在控制文件,数据文件头,数据 块,日志文件头,日志文件change vector中都有SCN,但其作用各不相同数据文件头中包含了该数据文件的checkpoint SCN,表示给数据文件最近一次执行检查点操作时的SCN.日志文件头中包含了low scn,next scn,表示给日志文 件包含有从low scn到next scn的redo record.控制文件中包含了每个数据文件的checkpoint SCN,stop SCN,每个日志文件的low scn,next scn.控制文件中checkpoint scn同数据文件头中checkpoint scn相同,除非数据文件被手工替换掉.控制文件中的low scn,next scn同日志文件中low scn和next scn相同在数据库正常运行时,控制文件中对应数据文件的stop SCN都是最大值.在正常关闭数据库的情况下,在关闭前会执行一次检查点工作当oracle会将数据缓冲区上的内容全部写回到磁盘中,然后更新控制文件中 对应数据文件的stop SCN,使其等于checkpoint SCN

但在异常当机的情况下,由于最后一次检查点未进行或进行中间被中 止,因而在控制文件,就存在部分的数据文件stop SCN为最大值,在数据库重新启动后,会检查控制文件中对应每个数据文件的stop SCN,如果stop SCN不等于控制文件中对应每个数据文件的checkpoint SCN,就会使用日志文件redo从checkpoint SCN开头到stop SCN为止的全部数据库操作.在定位到底是使用哪一个redo log文件时,就用到了日志文件头中的low scn,next scn,也就是说要使用的redo log 的low scn ,next scn必须包含数据文件重做所须的change vector.

在确定了哪个数据文件须redo后,oracle会比较change vector中的SCN和数据文件数据块中的SCN,如果change vector的SCN小于数据块的scn,则跳过此change vector,否则redo
数据块中ITL中还有SCN,但它的作用是用于产生一致性读快照

B)

The primary function of resetlogs is to discard the redo that was not  
applied during incomplete recovery, ensuring that the skipped redo  
can never be accidentally applied by a subsequent recovery. To  
accomplish this, resetlogs effectively invalidates all existing redo  
in all online and archived redo logfiles. This has the side effect of  
making any existing datafile backups unusable for future recovery  
operations.

Resetlogs also reinitializes the controlfile information about online  
logs and redo threads, clears the contents of any existing online  
redo log files, creates the online redo log files if they do not  
currently exist, and resets the log sequence number in all threads to  
one.


C)

        再说一下System Checkpoint SCN和Datafile Checkpoint SCN,这两个SCN都是记录在控制文件当中的。但是这两个SCN有什么作用呢?
7 s3 Y. U5 a$ ~* _* ^  w  {
, l2 E# w. p+ ~; t& N6 e        logzgh有段论述,我自己的想了一下,还是学习一下他的结论:9 C6 k2 j9 l; [( I
4 d+ b0 l1 H) ]  ]6 l1 s- S  l
        1.对只读表空间,其数据文件的Datafile Checkpoint SCN、Start SCN和END SCN号均相同。这三个SCN在表空间处于只读期间都将被冻结。4 [; [# E/ @: f2 ^0 }: Z

1 _5 i4 u9 Y+ z        2.如果控制文件不是当前的控制文件(其实就是说,想比当前redo log的SCN来讲,控制文件已经过时了),则System checkpoint SCN会小于Start SCN(Start SCN是来自实际的数据文件头,有比较依据)。记录这些SCN号,可以区分控制文件是否是当前的控制文件。当有一个Start SCN(从当前各个在线数据文件中获得)号超过了System Checkpoit SCN号时,则说明控制文件不是当前的控制文件,因此在做recovery时需要采用using backup controlfile。这是为什么需要记录SystemCheckpoint SCN的原因之一。& `' M) Z% g, c1 O8 L% S" h

: [, S8 K% b8 U& x7 k2 }        当我们重建控制文件的时候,重建方式分两种(resetlogs 和 noresetlogs): W5 f0 n* r, D- u

$ n4 W( T8 N) J1 s4 A        1.使用resetlogs选项时,System Checkpoint SCN为被归为0,而其中记录的各个数据文件的Datafile Checkpoint SCN则来自于Start SCN(也就是说可能会从冷备份的数据文件的数据文件头中获取)。根据上述的描述,此时需要采用using backup controlfile做recovery. 因此情况是 System Checkpoint SCN=0 < Start SCN = Datafile Checkpoint SCN
2 z$ r  ^) l# T, s: O. M- S
# o8 V  Z5 r" D5 X3 @        2.使用noresetlogs选项时,有一个前提就是:一定要有online redo log的存在。否则就要使用resetlogs选项。这个时候控制文件重建好时,其system checkpoint SCN=Datafile Checkpoint SCN=Lastest Checkpoint SCN in online redo log,我们可以看到Datafile Checkpoint SCN并没有从Start SCN中读取。而是读取了最新的日志文件中的SCN作为自己的数据。此时重建的控制文件在恢复中的作用跟最新的控制文件类似,System Checkpoint SCN(已经读取最新的redo log的checkpoint SCN信息)可能会>Start SCN (因为数据文件可能会从冷备份中恢复),恢复时就不需要加using backup controlfile子句了
" n* h, N4 z( L- \2 B  |& H5 p% \5 U. H. k( ~" C
        关于backup controlfile的补充:backup controlfile只有备份时刻的archive log信息,并没有DB crash时刻的archive log信息,所以并不会自动应用online redo log,而是提示找不到序号为Lastest Archive log sequence + 1 的archive log,尽管你可以手动指定online redo log来实现完全恢复,但因为一旦使用了using backup controlfile子句,Oracle就视为不完全恢复,必须open resetlogs! 实际上,假如你有旧的控制文件又不想resetlogs,那很简单,使用旧的控制文件mount然后 backup to trace ,然后手工创建控制文件,使用 reuse database ... noresetlogs .这样就可以 recover database 自动恢复并open database 而不用 resetlogs 了

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

下一篇: SCN (1)
请登录后发表评论 登录
全部评论

注册时间:2011-08-08

  • 博文量
    5
  • 访问量
    9229