一、简介

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. MIT线性代数:1.方程组的几何解析

  2. 学习笔记37_MVC模板页

    ASPX母版页: 1.添加一个母版页,位置../Views/Shared,有 <asp:ContentPlaceHolder ID = "ContentPlaceHolder1&quo ...

  3. ctf pwn ida 分析技巧

    几年前的笔记,搬运过来 ---   1 先根据运行程序得到的信息命名外围函数,主要函数大写开头 2 /添加注释 3 直接vim程序,修改alarm为isnan可以patch掉alarm函数 4 y 可 ...

  4. LVS NAT模式实践

    client:192.168.4.10/24 proxy:192.168.2.5/24 192.168.4.5/24 web1:192.168.4.100/24 web2:192.168.4.200/ ...

  5. nginx篇高级用法之基于TCP/UDP的四层调度

    nginx 从1.9版本开始支持基于TCP/UDP的四层调度,在编译nginx时使用--with-stream开启该模块 支持TCP/UDP调度时,支持给所有的软件做调度器,例如:nfs smb ft ...

  6. [BZOJ2821][Luogu4135] 作诗

    由于BZOJ这题要contact lydsy2012@163.com,所以就放个洛谷的传送门(我木有BZOJ权限号啊0.0) 诶?这不是莫队裸题?? 等等--这题强制在线欸,没办法莫队了,肿么破? 之 ...

  7. javaScipt类定义和实现

      最近在几个群上经常看到有人问在一个类里的一个 function 怎么调用 this. 定义后公开的方法.现发一篇类实现的随笔.首先说说类,在一个类里我们会有以下的几个特征:1. 公有方法2. 私有 ...

  8. 使用Typescript重构axios(十八)——请求取消功能:总体思路

    0. 系列文章 1.使用Typescript重构axios(一)--写在最前面 2.使用Typescript重构axios(二)--项目起手,跑通流程 3.使用Typescript重构axios(三) ...

  9. jquery jssdk分享报错解决方法

    jssdk分享报错解决方法 一般都是参数传错了

  10. vue的路由安全验证

    在传统的网页中: view层是由后端控制的,用户的请求到达后端的控制器中,只有当安安全全没有丝毫异常的情况下,后端才会将完成数据的渲染,返回给前端视图 前后端分离的项目: view层的切换权,转交给了 ...