一、简介

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. 文件 File

    文件 1. 文件的一些常用方法 package com.ljw.study; import java.io.File; import java.util.Arrays; import java.uti ...

  2. python中生成器及迭代器

    列表生成式 列表生成式是python内部用来创建list的一种方法,其格式形如: L = [x*8 for x in range(10)] print(L) 此时会得到结果:[0, 8, 16, 24 ...

  3. Django学习day2——Django安装与环境配置

    安装 Django 文章中python版本为3.65 这里以windows7为例,在pip目录下运行pip install Django就能安装django最新版本(本文为django2.2版本) 也 ...

  4. NLP-BM25算法理解

    前两天老师给我们讲解了BM25算法,其中包括由来解释,以及算法推导,这里我再将其整理,这里我不讲解之前的BIM模型,大家有兴趣可以自行了解.Okapi BM25:一个非二值的模型bm25 是一种用来评 ...

  5. css3的过渡和动画的属性介绍

    一.过渡 什么是过渡? 过渡是指:某元素的css属性值在一段时间内,平滑过渡到另外一个值,过渡主要观察的是过程和结果. 设置能够过渡的属性: 支持过渡的样式属性,颜色的属性,取值为数值,transfo ...

  6. Dockerfile介绍及指令详情

    Dockerfile简介:   镜像的定制实际上就是定制每一层所添加的配置.文件.如果我们可以把每一层修改.安装.构建.操作的命令都写入一个脚本,用这个脚本来构建.定制镜像,那么哪些无法重复的问题.镜 ...

  7. 如何使用24行JavaScript代码实现Redux

    作者:Yazeed Bzadough 译者:小维FE 原文:freecodecamp 为了保证文章的可读性,本文采用意译而非直译. 90%的规约,10%的库. Redux是迄今为止创建的最重要的Jav ...

  8. 每天3分钟操作系统修炼秘籍(14):IO操作和DMA、RDMA

    点我查看秘籍连载 I/O操作和DMA.RDMA 用户进程想要执行IO操作时(例如想要读磁盘数据.向磁盘写数据.读键盘的输入等等),由于用户进程工作在用户模式下,它没有执行这些操作的权限,只能通过发起对 ...

  9. 201871010114-李岩松《面向对象程序设计(java)》第十一周学习总结

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

  10. C# IV: 数据库基础操作2

    需上一篇C# III:数据库基础操作 另外一个经常碰到的数据库操作是,单次执行多个SQL语句,譬如,一次性插入多条数据. 方法一,拼凑长SQL语句 拼凑长SQL语句实际上是String的操作.如下示例 ...