加载中…
个人资料
syzbbw99
syzbbw99
  • 博客等级:
  • 博客积分:0
  • 博客访问:25,576
  • 关注人气:2
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

Oracle SCN是什么

(2011-08-28 13:54:44)
标签:

杂谈

SCN是什么?The System Change Number
  system change number (SCN)是一个非常重要的标记,Oracle使用它来标记数据库在过去时间内的状态和轨迹。

Oracle使用SCN来保存所有变化的轨迹。SCN是一个逻辑时钟来记录数据库事件。它非常的重要,并不是只是为了恢复。
SCN有点类似于sequence,Oracle在SGA中增加它。当一个事务修改或者插入数据,Oracle首先写入一个新的SCN到回滚段中。log writer进程立刻把提交的记录写入到重做日志中,这条提交的记录将拥有唯一的SCN。事实上,把SCN写入到日志,就意味着一个事务的完成。SCN帮助Oracle决定在一次突然中断或者SHUTDOWN ABORT后,是否需要一个崩溃恢复。每当数据库发生checkpoint,Oracle 写一个START SCN命令到数据文件头。控制文件维护着每个数据文件
的SCN,称为STOP SCN,通常是无穷大,每当实例正常关闭(SHUTDOWN NORMAL or SHUTDOWN IMMEDIATE),Oracle会复制数据文件头START SCN到控制文件的STOP SCN。如果是正常的重启数据库,是不需要恢复的,因为控制文件和数据文件的SCN是吻合的。反之,突然中断系统就没法同步SCN,SCN不匹配,Oracle就认为需要做恢复。
另外Oracle还使用数据块的SCN来维护查询的一致性和多版本

从接触oracle到使用过程中,始终能看到SCN的身影,在oracle的备份恢复原理中更是如此。由此看来SCN的重要性不言而喻呀,对其有个综合的了解能够有对其功能有清晰地认识,在oracle中SCN的种类不一中,对SCN理解的时候常常犯晕,偶尔这样,偶尔那样。说白了就是把多种SCN混淆在一起了。

如果结合控制文件,数据文件,redo等文件的dump内容来了解那几种重要的SCN,将会对其有更深的认识。

直接入题:

SCN: System Change Number
SCN是顺序递增的一个数字,在Oracle 中用来标识数据库的每一次改动,及其先后顺序。SCN的最大值是0xffff.ffffffff。

Oracle对SCN的管理
单节点的instance中,SCN值存在SGA区,由system commit number latch保护。任何进程要得到当前的SCN值,都要先得到这个latch。

RAC/OPS环境中
Oracle通过排队机制(Enqueue)实现SCN在各并行节点之间的顺序增长。具体有两种方法:

Lamport算法:又称面包房算法,先来先服务算法。跟很多银行采用的排队机制一样。客户到了银行,先领取一个服务号。一旦某个窗口出现空闲,拥有最小服务号的客户就可以去空闲窗口办理业务。

Commit广播算法:一有commit完成,最新的SCN就广播到所有节点中。

上述两种算法可以通过调整初始化参数max_commit_propagation_delay来切换。在多数系统 (除了Compaq Tur64 Unix)中,该参数的默认值都是700厘秒(centisecond),采用Lamport算法。如果该值小于100厘秒,Oracle就采用广播算法,并且记录在alert.log文件中。

几种重要的SCN
Commit SCN

当用户提交commit命令后,系统将当前scn赋给该transaction。这些信息都反映在redo buffer中,并马上更新到redo log 文件里。

Offline SCN
除了System tablespace以外的任何表空间,当我们执行SQL>alter tablespace … offline normal命令时,就会触发一个checkpoint,将内存中的dirty buffer写入磁盘文件中。Checkpoint完成后,数据文件头会更新checkpoint scn和offline normal scn值。其中数据库文件头的checkpoint scn值可通过查询列x$kccfe.fecps得到。

如果执行SQL>alter tablespace …offline命令时采用temporary或 immediate选项,而不用normal选项时,offline normal scn会被设成0。这样当数据库重启后通过resetlog方式打开时,该表空间就无法再改回在线状态。

Checkpoint SCN
当数据库内存的脏数据块(dirty blocks)写到各数据文件中时,就发生一次checkpoint。数据库的当前checkpoint scn值存在x$kccdi.discn中。Checkpoint scn在数据库恢复中起着至关重要的作用。无论你用何种办法恢复数据库,只有当各个数据库文件的checkpoint scn都相同时,数据库才能打开。

虽然参数“_allow_resetlogs_corruption”可以在checkpoint scn不一致时强制打开数据库,但是这样的数据库在open后必须马上作全库的export,然后重建数据库并import数据。

Resetlog SCN
数据库不完全恢复时,在指定时间点后的scn都无法再应用到数据库中。Resetlog时的scn就被设成当前数据库scn,redo log也会被重新设置。

Stop SCN
Stop scn记录在数据文件头上。当数据库处在打开状态时,stop scn被设成最大值0xffff.ffffffff。在数据库正常关闭过程中,stop scn被设置成当前系统的最大scn值。在数据库打开过程中,Oracle会比较各文件的stop scn和checkpoint scn,如果值不一致,表明数据库先前没有正常关闭,需要做恢复。

High and Low SCN
Oracle的Redo log会顺序纪录数据库的各个变化。一组redo log文件写满后,会自动切换到下一组redo log文件。则上一组redo log的high scn就是下一组redo log的low scn。
在视图v$log_history中,sequence#代表redo log的序列号,first_change#表示当前redo log的low scn,列next_change#表示当前redo log的high scn。

Oracle <wbr>SCN是什么Oracle <wbr>SCN是什么代码
SQL> col recid format 9999
SQL
> col requence# format 9999
SQL
> col first_change# format 9,999,999,999,999
SQL
> col next_change# format 9,999,999,999,999
SQL
> select recid,sequence#,first_change#,next_change# from v$log_history

where rownum<6;

RECID SEQUENCE# FIRST_CHANGE# NEXT_CHANGE#
----- ---------- ------------------ ------------------
484 484 1,928,645,840,091 1,928,645,840,436
485 485 1,928,645,840,436 1,928,645,840,636
486 486 1,928,645,840,636 1,928,778,045,209
487 487 1,928,778,045,209 1,929,255,480,725
488 488 1,929,255,480,725 1,930,752,214,033

 

关于如何使用参数_allow_resetlogs_corruption,可参见文档http://www.sidibe.net/allow_resetlog.html

点滴总结:

1,在control file,redo log,data file中都存在SCN值;
2,数据库open时,检查control file中记录的SCN值与数据文件,redo log文件是否一致,如果是,数据库打开,否则,提示错误;假如数据文件SCN值小于control file中的SCN值则提示该数据文件需要介质恢复;
3,redo log 中存在低SCN,高SCN值两种,当前的redo log文件的高SCN值为无穷大;日志发生切换时,高SCN值更新为系统当前SCN值,新日志文件低SCN值为前日志文件高SCN值加1,高SCN值仍然为去穷大;数据库发生变化,则写redo log文件,同时SCN值会加1。
4,检查点发生时,CKPT更新数据文件头。

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有