一、简介

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. js中几种继承实现

    继承实现的几种方式 1.借助call实现继承 function p1() { this.name = 'p1' this.say = function () { console.log(this.na ...

  2. iOS:探究视图控制器的转场动画

    一.介绍 在iOS开发中,转场动画的使用无处不见,不只是我们自己更多的使用UIViewblock动画实现一个转场动画,其实,在我们实现VC控制器跳转的时候都是转场动画的实现,例如标签栏控制器的切换.模 ...

  3. net core WebApi——April.Util更新之权限

    目录 前言 权限 中间层 小结 前言 在之前已经提到过,公用类库Util已经开源,目的一是为了简化开发的工作量,毕竟有些常规的功能类库重复率还是挺高的,二是为了一起探讨学习软件开发,用的人越多问题也就 ...

  4. 物理CPU数、CPU核心数、进程数

    参考CSDN博客:https://blog.csdn.net/helloworld0906/article/details/90547159 一. 物理cpu数.cpu核数.线程数(逻辑cpu数)的关 ...

  5. Windows7下安装Linux双操作系统

    本文链接:https://blog.csdn.net/zh175578809/article/details/78576193 最近正在学习Linux系统的常用操作命令,于是心血来潮,想自己安装一个L ...

  6. css 完美垂直居中解决方案兼容ie8以上等其他浏览器

    css 完美垂直居中解决方案兼容ie8以上等其他浏览器 <pre><!DOCTYPE html><html><head> <title>DI ...

  7. 第五天、vim,重定向,用户和组管理

    第五天.vim,重定向,用户和组管理 vim vi:Visual editor,文本编辑器 行编辑器:sed 全屏编辑器:vim,vi,nano 其他编辑器gedit,gvim 定义别名让vi等于vi ...

  8. TCP--文件上传

    客户端 public class Test2_UpdateClient { public static void main(String[] args) throws UnknownHostExcep ...

  9. Unity - Cinemachine实现相机抖动

    普通相机抖动脚本较易实现,但在使用cinemachine相机下,其Transform组件不可被代码改变,那么Cinemachine的相机抖动如何实现呢?本文结合实际项目,对实现相机抖动的三大步骤进行系 ...

  10. nowcoder 鹏

     鹏   时间限制:C/C++ 2秒,其他语言4秒空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 化而为鸟,其名为鹏.鹏之背,不知其 ...