当前位置: 代码迷 >> Oracle技术 >> 为啥控制文件中的最后个SCN 总是大于归档日志的SCN
  详细解决方案

为啥控制文件中的最后个SCN 总是大于归档日志的SCN

热度:163   发布时间:2016-04-24 08:08:46.0
为什么控制文件中的最后个SCN 总是大于归档日志的SCN
为什么控制文件中的最后个SCN 总是大于归档日志的SCN

SQL> 
SQL> select dbid,
  2         name,
  3         open_mode,
  4         log_mode,
  5         checkpoint_change#  as checkpoint_change#,
  6         controlfile_type    ctl_type,
  7         controlfile_created ctl_created,
  8         controlfile_change# as ctl_change#,
  9         controlfile_time    ctl_time,
 10         resetlogs_change#   as resetlogs_change#,
 11         resetlogs_time      resetlogs_time
 12    from v$database
 13  ;
 
      DBID NAME      OPEN_MODE            LOG_MODE     CHECKPOINT_CHANGE# CTL_TYPE CTL_CREATED CTL_CHANGE# CTL_TIME    RESETLOGS_CHANGE# RESETLOGS_TIME
---------- --------- -------------------- ------------ ------------------ -------- ----------- ----------- ----------- ----------------- --------------
1372763457 ORCL      READ WRITE           NOARCHIVELOG            2659867 CURRENT  2014/4/15 2     2660387 2014/5/23 1                 1 2014/4/15 21:2
 
SQL> 

2660387总是大于2659867 
------解决方案--------------------
控制文件发生变化时会记录controlfile_change#,checkpoint_change#是检查点的scn
检查点发生时,会更新控制文件和数据文件,而控制文件更新时不一定会在检查点上,因此ctl_change#一定会大于等于checkpoint_change#
------解决方案--------------------
v$database中的 checkpoint_change#是上一次checkpoint的scn,controlfile_change#是当前最新的scn.
在没有事务的情况下,你做一次alter system checkpoint;这两个值就会一样的.
------解决方案--------------------
刚说的一个地方有误,controlfile_change#不是数据库当前最新的scn,是控制文件最新的scn
------解决方案--------------------
归档日志肯定要落后于当前scn,因为当前的scn 在在线日志中。
  相关解决方案