日期:2014-05-16  浏览次数:20540 次

scn和检查点工作原理

scn号的定义及获取方式

scn即是系统改变号,是oracle内部的逻辑时钟,数据库事务依照scn排序,oracle也根据scn号来实现一致性读的功能,在数据库中scn是唯一的并随着时间而增长。
在控制文件,数据文件头部,日志文件、事务表、数据块头中都记录有scn值,
1、select dbms_flashback.get_system_change_number from dual;9i版本以后
2、select current_scn from v$database;

控制文件及数据文件头scn号更新的几种情况

数据文件头中包含了scn号,该scn号表示该该数据文件最后一次执行检查点操作时的scn,在9i以后oracle引入了增量检查点,脏块的写入方式由原来的一次性大量写入到磁盘,变成了‘实时’小量的写入,同时引入了lrba  、on disk rba、checkpoint queue的概念,在9i以后数据文件头(Checkpointed at scn:  0x0000.000d86da 08/04/2012 09:01:13)控制文件scn(Database checkpoint: Thread=1 scn: 0x0000.000d86da)更新有三种情况
1、alter system checkpoint即强制发生完全检查点
2、关闭数据库
3.当日志组中的某个日志由inactive状态变成active状态时会更新控制问价和数据文件头部的scn号,并且该scn号与日志文件的first_change#号相等

数据恢复的过程

当增量检查点发生时并不会更新控制文件和数据文件的scn号,只是会更新控制文件中的lrba 、 on disk rba、on disk scn等信息,如果数据库突然的crash,那么控制文件中的stop scn号为最大值会造成和数据文件头中的scn不一致,oracle即可以判断出oracle为非正常关闭,需要对数据进行恢复,通过控制文件的scn号即可判断从日志组中的哪个日志开始,通过lrba就可以确定从该日志的哪个具体的位置开始跑日志。这样就会将脏块构造出来,对于未提交的数据,利用undo表空间进行回滚。



 

3楼hanxuemin12345昨天 16:10
重点处可以加粗或加大字体。小的建议。
2楼liujiahan629629前天 17:42
学习!
1楼hanxuemin123453天前 14:49
我觉得你的文章格式再稍加明显一些,这样读者就会读着很舒服,思路更有条理。好的文章需要好的条理。加油!!
Re: wudiisss3天前 14:50
回复hanxuemin12345n恩,你的建议很好,谢谢