SCN
SCN
一、SCN的引入
众所周知,当oracle实例崩溃时,oracle通过检查点队列使用CKPT进程,周期性的将LRBA记入控制文件,以记录读取REDO LOG的范围。确定范围之后,oracle首先进行前滚(将redo log中的数据块重新构造成buffer),然后回滚(将不需要进行构造的未提交的脏块回滚)。然而,这里又有几个问题:
1、Oracle如何确定读取哪些redo log进行日志的前滚。
2、REDO LOG中存在部分不需要前滚的数据,比如,数据已经提交,或者,数据文件的数据是最新的,而redo log中的数据,反而是老旧的,如果覆盖,就会出现大问题。这个是如何识别的?
二、SCN相关概念
SCN是一串自增的数字,由DBMS按照相关算法,将时间转换而成,用来记录oracle数据库的数据更新,标识数据库在某个确切时刻提交的版本。当执行事务时(DML语句、DDL语句),系统会为每个事务变化生成相应的SCN。当备份数据文件时,备份文件会记录备份点的SCN值,当恢复时,oracle会从备份点的SCN值开始恢复,一直到失败点的SCN值。scn在数据库中是无处不在的,常见的事务表,控制文件,数据文件头,日志文件,数据块头等都记录有scn值.冠以不同前缀,scn也有了不同的名称,比如检查点scn(checkpoint scn),resetlogs scn等。SCN有一下四个:系统SCN、数据文件SCN、结束SCN、开始SCN。
1、系统 SCN
针对整个数据库的一个时间戳,所以只有一个。
2、数据文件 SCN
针对每个数据文件的,因而一个数据文件就对应在控制文件中存在一份。
3、结束SCN(Stop SCN)
记录的是日志文件中最老的ACTIVE文件的FIRST SCN号或者CURRENT的FIRST SCN号。实例恢复需要用到ACTIVE和CURRENT的日志文件。
结束SCN为空,表明数据库非正常关闭。如果正常关闭,系统scn、数据文件scn和结束scn应该是一样的。
实例恢复时,需要用到这三个SCN来确定要哪些日志文件做恢复,需要用到LRBA来确定从哪个记录开始恢复。
4、开始SCN(Start SCN)
三、SCN的应用场景
1、数据库正常的关闭和启动
数据库正常关闭时,系统会执行一个完全检查点动作,并用该检查点时的SCN号更新上述4个SCN号,这时所有数据文件的终止SCN号会设置为数据文件头的那个启动SCN(除了离线和只读的数据文件)。
数据库重新启动时,Oracle将数据文件头中的启动SCN与数据文件检查点SCN比较,如果这两个值匹配,Oracle接下来再比较数据文件头中的SCN和控制文件中数据文件的终止SCN,如果这个值也匹配,就意味着所有数据块已经提交,因此数据 库不需要进行恢复,此时数据库直接打开。当所有的数据文件都打开之后,在线且可读写的数据文件终止SCN再次被设置为NULL,表示数据文件已经打开并能 够正常使用了。有些表空间是只读的,这时控制文件中的系统检查点SCN号会不断增长,而数据文件SCN号和文件头中的启动SCN(会停止更新直到表空间又 设置为可读写),显然这时系统检查点SCN号会大于数据文件SCN和文件头启动SCN。
2、数据库正常的关闭和启动
数据库非正常关闭 ( 或称为实例崩溃 ) 时,终止 SCN 不会被设置,依然为 NULL ,这可以通过把数据库启动至 mount 状态查询出来。 这样重新启动时,SMON进程 会执行实例恢复工作,即先执行前滚、回滚操作,再把数据库打开。
3、数据文件介质故障
出现介质故障时,数据文件检查点SCN及系统检查点SCN比文件头启动SCN大。系统发生介质故障时,数据文件被以前的备份代替,控制文件中的数据文件检查点SCN肯定比文件头中的启动SCN要大,这样Oracle就知道要对这个文件进行介质恢复。
4、控制文件介质故障
系统检查点SCN及数据文件SCN比数据文件头启动SCN小:在数据库恢复时,控制文件可能不是最新的,即把一个较早的控制文件还原为当前的控制文件,然后再执行恢复操作,这时控制文件中的系统检查点SCN和数据文 件SCN可能比文件头的启动SCN小。这时恢复数据库要用下面命令:recover database using Backup Controlfile或其他的恢复语句。
5、备份时的实例崩溃
当执行begin backup时实例崩溃:控制文件中的数据文件检查点SCN号和数据文件头部检查点SCN号相同,但是每个可读写的在线数据文件之间检查点SCN号不同, 那么要求介质恢复,例如发出begin backup命令后就会出现这种情况,需要通过end backup命令好才可以打开数据库。
6、日志空跑
在oracle数据库中,每一个数据块、日志都有相对应的SCN号。在实例崩溃,日志前滚的过程中,oracle会比较每个待前滚的日志块,如果日志块的SCN比数据文件的SCN号低,则表明数据文件的数据较新,则不会覆盖数据文件上的块,这样就形成日志空跑。日志空跑保证了跑日志过程中的数据一致性。
SCN的更多相关文章
- oracle中scn(系统改变号)
系统scn: select checkpoint_change# from v$database; 文件scn: select name ...
- oracle通过修改控制文件scn推进数据库scn
数据库当前scn 代码如下 复制代码 idle> select checkpoint_change# from v$database; CHECKPOINT_CHANGE#----------- ...
- 打完补丁后测试db_link对SCN的影响
环境:11.2.0.4.0 升 11.2.0.4.8 后测试 背景:oracle 的db_link会导致实例间SCN同步,SCN增长速度过快则会产生错误: 方案:oracle官方推荐升级版本,但升级之 ...
- dataguard 归档丢失(主库中无此丢失归档处理),备库基于SCN恢复
dataguard 归档丢失(主库中无此丢失归档处理),备库基于SCN恢复 环境: OS: CentOS 6.5 DB: Oracle 10.2.0.5 1.主备库环境 主库: SQL> sel ...
- 【练习】flashback基于scn的闪回查询
1.创建表dept1: :: SCOTT@ORA11GR2>create table dept1 as select * from dept; Table created. :: SCOTT@O ...
- SCN试验之二 checkpoin scn 与数据库scn的关系
oracle11g 观察数据库scn: SQL> select dbms_flashback.get_system_change_number from dual; GET_SYSTEM_CHA ...
- SCN试验之一
在数据库运行的时候,数据库系统的SCN不断地增长: SQL> select dbms_flashback.get_system_change_number from dual; GET_SYST ...
- Oracle的SCN与检查点机制
Oracle的SCN与检查点机制 SCN在Oracle的文档上以多种形式出现,一种是System Change Number,另一种是System Commit Number,在大多数情况下,Syst ...
- 转--Oracle DB 服务器系统时间修改问题与 SCN 关系的深入研究
论坛里一个朋友说将DB 服务器系统时间往往后修改了3个月(从11年改成10年),启动DB报600的错误. 一. 先做个测试 1.1 关闭DB SQL> shutdown immediate Da ...
随机推荐
- j技术方案
采用.net4.0作为基础技术平台,原来是采用.net4.5的,但是后来发现.net4.5不支持Windows Server2003,所以又降为.net4.0. 1.asp.net mvc 4.0 用 ...
- LVM在线扩容
我虚拟机根分区已经使用了35%,现在需要对他进行在线扩容,扩容之后使用率降到30% [root@localhost ~]# dfFilesystem 1K-blocks Used Available ...
- 【学】React的学习之旅3 - 添加事件(onClick)
button除了用<input type="button">之外,还可以直接用<button></button>来创建,而2个标签的中间的内容就 ...
- tomcat结合nginx使用小结
相信很多人都听过nginx,这个小巧的东西慢慢地在吞食apache和IIS的份额.那究竟它有什么作用呢?可能很多人未必了解. 说到反向代理,可能很多人都听说,但具体什么是反向代理,很多人估计就不清楚了 ...
- iOS 跳转至AppStore评分页面
iOS7之前: [[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"itms-apps://ax.itunes. ...
- 炉石ZZ操作 [20161224]
昨天吃完晚饭,开了一盘炉石.选的龙牧,遇到对面马克扎尔战士. 中途,我场上3个较大随从,他突然先拍下一个铜须,菊花一紧,然后果然拍下了大工匠(之前用龙人侦察者看到他牌库有这张牌),逗比的一幕开始了,首 ...
- [HTML] IE=edge,chrome=1的META标签详解
文件兼容性用于定义让IE如何编译你的网页.此文件解释文件兼容性,如何指定你网站的文件兼容性模式以及如何判断一个网页该使用的文件模式. meta信息中常有这么一句: <meta content=& ...
- JAVA 教程推荐
JAVA 教程 学习地址:http://www.manongjc.com/mysql/mysql_tutorial.html Java 简介 Java是由Sun Microsystems公司于1995 ...
- 7、IMS - DNS & ENUM
1.相关基础SBC:http://blog.sina.com.cn/s/blog_7a6f76080100vp9r.html 2.ENUM/DNS查询过程:http://blog.sina.com.c ...
- linux 查看系统信息
一.查看内存信息 可以使用free命令显示系统的物理内存和交换分区的总量,以及已使用的.空闲的.共享的.在内核缓冲内的和被缓存的内存数量. 使用free命令可以显示计算机系统的内存容量. [root@ ...