一、简介

scn,system change number 在某个时间点定义数据库已提交版本的时间戳标记,Oracle为每个已提交事务分配一个唯一的scn,scn值是对数据库进行更改的逻辑时间点。scn是一个6字节的数字,分为两部分,scn_base和scn_wrap,scn_base是一个四字节的数字,scn_wrap是一个2字节的数字。scn_base到达最大值时,scn_wrap增加1,scn_base将被重置为0,一直持续到scn_wrap达到最大值。scn分为以下几种:

二、check point scn

1、start scn(datafile_header)

当检查点发生或者实力关闭时,所有缓存数据需要全部写入到数据文件中,此时数据库文件中的各个start scn更新到一致。Oracle启动时先检查是否需要media recovery,若数据文件中各个start scn不一致,出现某个start scn较小,说明该文件较旧(被替换成老文件或者未及时更新),此时需要手动进行redo介质恢复。

select checkpoint_change# from v$datafile_header;

2、stop scn (又称end scn,control file)

实例正常关闭时,将会触发checkpoint,同时执行完全检查点,并用该检查点时的scn号更新四个scn,这时所有数据文件的stop scn都设置为数据文件头的start scn (除了offline 和read only的数据文件)

数据库重启时,Oracle将数据文件头中的start scn和datafile scn比较,如果两者匹配,Oracle接下来比较start scn 和stop scn,如果匹配,数据库不需要实例恢复,直接打开;所有数据文件打开后,online 且 read write的数据文件stop scn再次被设置为null,表示数据文件已经打开并且能够正常使用了。有些表空间时read only,这时,system checkpoint scn会不断增长,而start scn和datafile scn停止更新,直到表空间设为可读写,这时,system checkpoint scn会大于start scn和datafile scn。

数据库非正常关闭(实例崩溃),stop scn不会被设置,依然为null,数据库启动到mount时可以查询出来。重启时,smon进程会执行实例恢复,进行前滚,打开数据库、回滚。

数据文件介质故障,datafile scn及system checkpoint scn 比start scn大。介质故障时,数据文件被以前的备份代替,datafile scn肯定比start scn大,Oracle此时进行介质恢复。

控制文件介质故障,system checkpoint scn 及datafile scn 比start scn小,在数据库恢复时,control file可能不是最新的,把一个较早的控制文件还原为当前的控制文件,然后执行恢复操作,这时control file 中的system checkpoint scn和datafile scn 可能比start scn小。这时,恢复数据库用:recover database using backup controlfile 或其他。

备份时的实例崩溃,当执行begin backup 时,实例崩溃:control file中的datafile scn和start scn相同,但是每个可读写的在线数据文件之间的检查点scn不同,那就要求介质恢复。

日志切换或者checkpoint,当日志切换或发生checkpoint(上述第五个步骤)时,从Low SCN到Next SCN之间的所有redo记录的数据就被DBWn进程写入数据文件中,而CKPT进程则将所有数据文件(无论redo log中的数据是否影响到该数据文件)的文件头上记录的Start SCN(通过视图v$datafile_header的字段checkpoint_change#可以查询)更新为Next SCN,同时将控制文件中的System Checkpoint SCN(通过视图v$database的字段checkpoint_change#可以查询)、每个数据文件对应的Datafile Checkpoint(通过视图v$datafile的字段checkpoint_change#可以查询)也更新为Next SCN。但是,如果该数据文件所在的表空间被设置为read-only时,数据文件的Start SCN和控制文件中Datafile Checkpoint SCN都不会被更新。

3、datafile scn (control file)

用来跟start scn 对比,判断start scn 是否时最新的,Oracle 在更新每个数据文件的start scn之前会先更新控制文件中的datafile scn ,因此控制文件中的datafile scn总会保持最新。

4、system checkpoint scn(control file )

用来判断控制文件是否是最新的,与start scn对比,若system checkpoint scn 较旧,则需对控制文件进行介质恢复

异常1:start scn不一致------某个数据文件旧,介质恢复

异常2:system scn=datafile scn 控制文件旧,介质恢复

异常3:system scn=datafile scn > start scn 数据文件旧,介质恢复

异常4:stop scn为空(启动过程中)需进行实例恢复

三、system current scn

Sql>select current_scn from v$database;

Sql>select scn_to_timestamp(4788376) from dual;

Sql>select timestamp_to_scn(sysdate) from dual; (scn与自然时间的转换,若一个自然时间对应多个scn,则转换时取最小scn)

四、redolog scn (archive log)

redo log中的high scn和low scn

Oracle的Redo log会顺序纪录数据库的各个变化。一组redo log文件写满后,会自动切换到下一组redo log文件。则上一组redo log的high scn就是下一组redo log的low scn。在current log中high scn为无穷大。

可通过查询v$log_history查看 low scn和 high scn。

a.Low scn(开始写一组日志时,会在该日志中记录当前SCN)

b.Last redo scn(日志文件被更新时,会记录当前scn反映日志更新进度)

c. Thread closed scn(未切换日志组时关闭数据库时,记录当前SCN)

d. nexto scn (切换日志组时,在当前日志文件中记录,并作为下一组日志文件的Low scn)

五、block scn

在数据块中记录块被修改的scn,用来保证一致性读(consistent read),在一项查询事务进行过程中(假设查询比较长),若在此过程中对数据块进行了修改(不管提交与否),都不会影响在数据修改之前发起的查询事务。即服务进程会去回滚段上读取block scn小于 发起查询时刻scn的数据内容。

Oracle SCN 详解的更多相关文章

  1. oracle checkpoint 详解

    Oracle checkpoint详解 topcheckpoint扫盲 top什么是checkpoint 在数据库系统中,写日志和写数据文件是数据库中IO消耗最大的两种操作,在这两种操作中写数据文件属 ...

  2. oracle 数据类型详解---日期型(转载)

    oracle 数据类型详解---日期型 oracle数据类型看起来非常简单,但用起来会发现有许多知识点,本文是我对ORACLE日期数据类型的一些整理,都是开发入门资料,与大家分享: 注:由于INTER ...

  3. oracle 序列 详解

    序列: 是oacle提供的用于产生一系列唯一数字的数据库对象. l  自动提供唯一的数值 l  共享对象 l  主要用于提供主键值 l  将序列值装入内存可以提高访问效率 创建序列: 1.  要有创建 ...

  4. Oracle数据字典详解

    学习笔记:oracle数据字典详解 --- 本文为TTT学习笔记,首先介绍数据字典及查看方法,然后分类总结各类数据字典的表和视图.然后列出一些附例.   数据字典系统表,保存在system表空间中. ...

  5. oracle rowid 详解

    oracle rowid详解 今天是2013-09-15,存储在数据库中的每一行数据都有一个地址,oracle使用rowid数据类型在存储地址.rowid有如下类别: 1)physical rowid ...

  6. Oracle索引详解

    Oracle索引详解(二) --索引分类   Oracle 提供了大量索引选项.知道在给定条件下使用哪个选项对于一个程序的性能来说非常重要.一个错误的选择可能会引发死锁,并导致数据库性能急剧下降或进程 ...

  7. Oracle内存详解之 Library cache 库缓冲

    Oracle内存详解之 Library cache 库缓冲 2017年11月09日 11:38:39 阅读数:410更多 个人分类: 体系结构 Library cache是Shared pool的一部 ...

  8. Oracle date 详解

    oracle 数据类型详解---日期型 oracle数据类型看起来非常简单,但用起来会发现有许多知识点,本文是我对ORACLE日期数据类型的一些整理,都是开发入门资料,与大家分享:注:由于INTERV ...

  9. 【Oracle】详解ORACLE中的trigger(触发器)

    本篇主要内容如下: 8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 8.2 创建触发器 8.2.1 触发器触发次序 8.2.2 创建DML触发器 8.2. ...

随机推荐

  1. 和manacher有关的乱写

    当初学kmp hash的时候被教导manacher非常的鸡肋 今天因为一篇神奇的题解我忍不住颓废了两节课把它学了 思路,代码都比较好懂 虽然它不如各种自动机霸气,唯一的功能貌似就是$O(n)$求出所有 ...

  2. Js对象继承小结

    1.继承 对象的定义好用一些的一般是把实例对象的属性定义在类里面,通过this指针指向具体实例属性.定义对象的public方法时将其绑定到prototype中.子类在继承父类时可以通过对象冒充来继承父 ...

  3. NOIP模拟测试14

    考完19了再写14,我也是够咕的. 14的题很好,也充分暴露了我的问题. T1是个分析性质推结论的题 对于区间[L,R],不妨设a[L]!=a[R],那么两个端点对答案没有贡献,也就是[L+1,R], ...

  4. 基于 H5 Canvas 实现楼宇自控系统

    前言 楼宇自控是指楼宇中电力设备,如电梯.水泵.风机.空调等,其主要工作性质是强电驱动.通常这些设备是开放性的工作状态,也就是说没有形成一个闭环回路.只要接通电源,设备就在工作,至于工作状态.进程.能 ...

  5. tslib1.1移植

    安装步骤: 1.准备工作确保以下软件已安装 # apt-get install autoconf(或autoconf2.13)# apt-get install automake# apt-get i ...

  6. python基础-匿名函数和内置函数

    匿名函数和内置函数 匿名函数:没有名字,使用一次即被收回,加括号就可以运行的函数. 语法:lambda 参数:返回值 使用方式: 将匿名函数赋值给变量,给匿名函数一个名字,使用这个变量来调用(还不如用 ...

  7. 201871010114-李岩松《面向对象程序设计(java)》第六、七周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...

  8. cocos creator 3D | 蚂蚁庄园运动会星星球

    上一篇文章写了一个简易版的蚂蚁庄园登山赛,有小伙伴留言说想要看星星球的,那么就写起来吧! 效果预览 配置环境 cocos creator 3d 1.0.0 小球点击 3d里节点无法用 cc.Node. ...

  9. Java 读取Word批注中的文本和图片

    本文将介绍读取Word批注的方法,包括读取Word批注中的文本及图片.关于操作Word批注的方法还可以参考这两篇文章:Java 添加.回复.修改.删除Word批注:Java 给Word指定字符串添加批 ...

  10. JQury自动切换图片

    [标签]Jquery图片自动切换<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "ht ...