Oracle SCN 详解
一、简介
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 详解的更多相关文章
- oracle checkpoint 详解
Oracle checkpoint详解 topcheckpoint扫盲 top什么是checkpoint 在数据库系统中,写日志和写数据文件是数据库中IO消耗最大的两种操作,在这两种操作中写数据文件属 ...
- oracle 数据类型详解---日期型(转载)
oracle 数据类型详解---日期型 oracle数据类型看起来非常简单,但用起来会发现有许多知识点,本文是我对ORACLE日期数据类型的一些整理,都是开发入门资料,与大家分享: 注:由于INTER ...
- oracle 序列 详解
序列: 是oacle提供的用于产生一系列唯一数字的数据库对象. l 自动提供唯一的数值 l 共享对象 l 主要用于提供主键值 l 将序列值装入内存可以提高访问效率 创建序列: 1. 要有创建 ...
- Oracle数据字典详解
学习笔记:oracle数据字典详解 --- 本文为TTT学习笔记,首先介绍数据字典及查看方法,然后分类总结各类数据字典的表和视图.然后列出一些附例. 数据字典系统表,保存在system表空间中. ...
- oracle rowid 详解
oracle rowid详解 今天是2013-09-15,存储在数据库中的每一行数据都有一个地址,oracle使用rowid数据类型在存储地址.rowid有如下类别: 1)physical rowid ...
- Oracle索引详解
Oracle索引详解(二) --索引分类 Oracle 提供了大量索引选项.知道在给定条件下使用哪个选项对于一个程序的性能来说非常重要.一个错误的选择可能会引发死锁,并导致数据库性能急剧下降或进程 ...
- Oracle内存详解之 Library cache 库缓冲
Oracle内存详解之 Library cache 库缓冲 2017年11月09日 11:38:39 阅读数:410更多 个人分类: 体系结构 Library cache是Shared pool的一部 ...
- Oracle date 详解
oracle 数据类型详解---日期型 oracle数据类型看起来非常简单,但用起来会发现有许多知识点,本文是我对ORACLE日期数据类型的一些整理,都是开发入门资料,与大家分享:注:由于INTERV ...
- 【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. ...
随机推荐
- windows 利用环境变量%PATH%中目录可写提权
使用PowerUp的时候有时候会有这种结果 [*] Checking %PATH% for potentially hijackable DLL locations... Permissions : ...
- [UWP]使用SpringAnimation创建有趣的动画
1. 什么是自然动画 最近用弹簧动画(SpringAnimation)做了两个番茄钟,关于弹簧动画官方文档已经介绍得够详细了,这篇文章就摘录一些官方文档核心内容. 在传统UI中,关键帧动画(KeyFr ...
- vue 单页面应用 app自适应方案
本文是使用淘宝的方案进行布局开发的,遇到的问题是会对app内使用的第三方插件,当页面进行缩放后,比如高德地图中的文字会显得过小,我使用的方法就是手动的动每一个尺寸进行手动的px 到 rem的替换,而不 ...
- 关于Struts.xml的路径配置以及对应的连接路径问题
主要记住一点!: 1. namespace的路径配置例如:/x: 2. name名自由配置(主要用来是做action跳转方法用的) 3. form表单中提交action时以这个格式提交(此 ...
- IDEA Debug 无法进入断点的解决方法
文章来源: https://studyidea.cn/idea_breakpoint_not_use 前言 某个多模块项目中使用多个版本的 Spring,如 Spring 4,Spring 5,在使用 ...
- 使用VSCode调试Egret项目中的ts代码
发布一次Android项目后,会在代码里,生成对应的.map文件.这样就可以在编辑器里或是Chrome里面对相应的TS文件进行断点调试了. 实际只要在tsconfig.json里面配置一下," ...
- 初识web API接口及Restful接口规范
一.web API接口 什么是web API接口?: 明确了请求方式,提供对应后台所需参数,请求url链接可以得到后台的响应数据 url : 返回数据的url https://api.map.baid ...
- JVM 运行参数 & 代码监控
1.Java代码监控 JDK提供java.lang.management包, 其实就是基于JMX技术规范,提供一套完整的MBean,动态获取JVM的运行时数据,达到监控JVM性能的目的. packag ...
- Redis实战--使用Jedis实现百万数据秒级插入
echo编辑整理,欢迎转载,转载请声明文章来源.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!!! 当我们 ...
- vue-create 报错 command failed: yarn --registry=https://registry.npm.taobao.org --disturl=https://npm.taobao.org/dist 完美解决方案
@vue/cli 3.x 创建项目失败解决方案 报错信息 command failed: yarn --registry=https://registry.npm.taobao.org --distu ...