Oracle SCN机制详细解读

深入剖析 – Oracle SCN机制详细解读

http://blog.chinaunix.net/uid-20274021-id-1969571.html

SCN即系统改变号(System Change Number),是在某个时间点定义数据库已提交版本的时间戳标记。 Oracle为每个已提交的事务分配一个唯一的SCN。 SCN的值是对数据库进行更改的逻辑时间点。 Oracle使用此编号记录对数据库所做的更改。 在数据库中,SCN也可以说是无处不在,数据文件头,控制文件,数据块头,日志文件等等都标记着SCN。也正是这样,数据库的一致性维护和SCN密切相关。不管是数据的备份,恢复都是离不开SCN的。

在理解这几种SCN之前,我们先看下oracle事务中的数据变化是如何写入数据文件的:

第一步:事务开始;

第二步:在buffer cache中找到需要的数据块,如果没找到,从数据文件中载入buffer cache中;

第三步:事务修改buffer cache的数据块,该数据被标识为“脏数据”,并被写入log buffer中;

第四步:事务提交,LGWR进程将log buffer中的“脏数据”的日志条目写入redo log file中;

第五步:当发生checkpoint,CKPT进程更新所有数据文件的文件头中的信息,DBWn进程则负责将Buffer Cache中的脏数据

写入到数据文件中。

经过上述5个步骤,事务中的数据变化最终被写入到数据文件中。但是,一旦在上述中间环节数据库意外宕机了,在重新启动时

如何知道哪些数据已经写入数据文件、哪些没有写呢?(同样,在DG、streams中也存在

类似疑问:redolog中哪些是上一次同步已经复制过的数据、哪些没有)

SCN机制就能比较完善的解决上述问题。 SCN是一个数字,确切的说是一个只会增加、不会减少的数字。正是它这种只会增

加的特性确保了 Oracle知道哪些应该被恢复、哪些应该被复制。

首先这里我们先介绍四个SCN概念。

1、系统检查点scn (System Checkpoint SCN)

当一个checkpoint检查点动作完成后,Oracle就把系统检查点的SCN存储到 控制文件中。

select checkpoint_change# from v$database;

2,数据文件检查点scn (Datafile Checkpoint SCN)

当一个checkpoint动作完成后,Oracle就把每个数据文件的Datafile Checkpoint SCN 单独存放在控制文件中

select name,checkpoint_change# from v$datafile;

3,启动scn (Start SCN)

Oracle把这个检查点的scn 存储在每个数据文件的文件头中,这个值称为启动scn,这个SCN用于用于在数据库实例启动时,检查是否需要执行数据库恢复media recovery。

select name,checkpoint_change# from v$datafile_header;

4、终止scn (Stop SCN)

每个数据文件的终止scn都 存储在控制文件中。这个SCN号用于检查数据库启动过程是否需要做instance recovery。

select name,last_change# from v$datafile;

5.media recovery和instance recovery

1).media recovery是需要利用以前的备份来进行恢复的,而INSTANCE RECOVERY是不需要的。

2).media recovery通常发生在数据库的数据文件之类发生损坏,需要利用以前的备份来进行的恢复,需要人工处理。

3).instance recovery则是发生在实例不正常关闭情况下的恢复,是INSTANCE自己来的,不需要人工干预的。

6、在数据库运行期间的scn值

1).在数据库打开并运行之后,控制文件中的 系统检查点、控制文件中的 数据文件检查点scn和每个数据文件头中的 启动scn都是相同的。控制文件中的每个数据文件的 终止scn都为null.

2).在安全关闭数据库的过程中,系统会执行一个检查点动作,这时所有数据文件的 终止scn都会设置成数据文件头中的那个 启动scn的值。

3).在数据库重新启动的时候,Oracle将文件头中的那个 启动scn与 数据文件检查点scn进行比较,如果这两个值相互匹配,oracle接下来还要比较数据文件头中的 启动scn和控制文件中数据文件的 终止scn。如果这两个值也一致,就意味着所有数据块多已经提交,所有对数据库的修改都没有在关闭数据库的过程中丢失,因此这次启动数据库的过程也不需要任何恢复操作,此时数据库就可以打开了。当所有的数据库都打开之后,存储在控制文件中的数据文件 终止scn的值再次被更改为null,这表示数据文件已经打开并能够正常使用了。   

7.SCN与数据库启动

在数据库启动过程中,当 System Checkpoint SCN、Datafile Checkpoint SCN和Start SCN都相同时,数据库可以正常启动,不需要做media recovery。三者当中有一个不同时,则需要做media recovery.如果在启动的过程中, End SCN为NULL,则需要做instance recovery。Oracle在启动过程中首先检查是否需要media recovery,然后再检查是否需要instance recovery。

8.SCN与数据库关闭

如果数据库的正常关闭的话,将 会触发一个checkpoint, 同时将数据文件的 END SCN设置为相应数据文件的 Start SCN。当数据库启动时,发现它们是一致的,则不需要做instance recovery。在数据库正常启动后,ORACLE会将END SCN设置为NULL.如果数据库异常关闭的话,则END SCN将为NULL。

9.恢复数据库时什么时候需要using backup controlfile

数据文件检查点scn(Datafile Checkpoint SCN)

select checkpoint_change# from v$datafile;

启动scn(Start SCN)

select checkpoint_change# from v$datafile_header;

如果查询结果 数据文件检查点scn >= 启动scn,则不需要使用using backup controlfile;

如果查询结果 数据文件检查点scn < 启动scn,则需要使用using backup controlfile;

Image placeholder
幸福旅途
未设置
  60人点赞

没有讨论,发表一下自己的看法吧

推荐文章
分层存储超详细解读,为什么大数据时代它已不可或缺

如今,分层存储已成为了一种常见的存储方法,它将数据存储在具有不同特性(如性能、成本和容量)的不同存储介质上。不同的存储媒介被分配到不同的层次结构中,其中最高性能的存储媒介被认为是第0层或第1层,然后是

Oracle 之利用BBED修改数据块SCN—-没有备份数据文件的数据恢复

测试环境 OS:redhat6.6 oracle:12.1.0.2  BBED(OracleBlockBrowerandEDitorTool),用来直接查看和修改数据文件数据的一个工具,是Orac

警告:ORA-00600 2252 错误正在SCN问题下不断爆发

自2019年6月23日之后,Oracle启用了SCN自动Auto-Rollover的新特性,也就是自动调整了SCN的增长率算法(缺省32K每秒,允许SCN最高以每秒96K计算)。注意,这里说的自动,是

cnpm如何安装vue?

如何使用cnpm安装vue?步骤1:确保你电脑上安装了最新版本的Node.js。步骤2:安装淘宝镜像(国内使用npm速度很慢,可以使用淘宝定制的cnpm(gzip压缩支持)命令行工具代替默认的npm)

深度解读当代前端架构演进与趋势(上)

软件架构的核心思想,就是推断软件系统各个组件之间数据流动的方式。软件架构的质量取决于你设法推断这些数据流的难易程度!本文要讲的内容,就是在今天的Web应用程序背后探索这些数据流和最终的体系结构。We

HDFS 源码解读:HadoopRPC 实现细节的探究

桔妹导读:HDSF作为分布式文件系统,常常涉及DataNode、NameNode、Client之间的配合、相互调用才能完成完整的流程。为了降低节点之间的耦合性,HDFS将节点间的调用抽象成不同的接口,

解读 KubeCon EU 2019 应用管理领域的新看点

作者 |阿里云智能事业群技术专家邓宏超划重点阿里云容器平台技术专家、原CoreOS公司工程师、K8sOperator项目的核心作者之一邓洪超,精彩解读KubeConEU2019“应用管理“领域精华内容

中国移动智能硬件质量报告解读 分布式路由市场你了解多少?

今年6月份,中国移动终端实验室发布了《中国移动2019年智能硬件质量报告》(第一期),并于近日对该报告进行了相关解读,同时对优秀智能硬件产品进行颁奖。根据介绍,本次报告在内容上主要包括手机产品综合评测

微服务配置中心完全解读

本文作者:风卿,Nacos社区committer.在撰写这篇技术选型的文章之前,是比较犹豫的。因为,以其中一个开源项目开发者的身份,去写一篇三个开源项目的对比,即便很克制的去客观的比较,也很难有信服力

解读2019华为第001号文件:AI时代软件开发的第一要义是可信

晓查发自凹非寺量子位出品|公众号QbitAIAI加持,万物互联、万物智能。我们在享受科技进步的同时,软件开发行业却面临着更大的挑战。过去,软件出现安全问题或许仅仅意味着经济损失,但当走向产业互联网时代

《Gartner 2019年数据中心网络魔力象限》报告解读

日前,Gartner发布了2019年数据中心网络魔力象限。此次报告从7个维度(产品或服务、总体生存能力、销售执行/定价、市场反应/记录、营销执行、客户体验和操作),来衡量12个入选企业,并基于前瞻性和

开创万兆组网时代 新华三商用万兆解决方案解读

随着网络技术的不断发展,越来越多的终端设备纷纷接入网络,用户对于高速网络的需求越来越高。网络速率也从10兆到百兆再到千兆一步步得以提升。我们享受了高速网络所带来的极大便利,但这些还远远不够……由于物联

助力平安城市 新华三安防监控解决方案解读

大家应该都有看过警匪片,在影视片段中警察通过视频监控能够对城市的各个角落进行全局监控,并对犯罪分子进行实时追踪。为城市治安防控以及案件侦破提供了极大便利。而在现实生活中,视频监控系统也的确有着非常重要

vue源码解读(四)Vue中的异步更新策略

欢迎star我的github仓库,共同学习~目前vue源码学习系列已经更新了6篇啦~https://github.com/yisha0307/...快速跳转: Vue的双向绑定原理(已完成) 说说vu

入门 | Tensorflow实战讲解神经网络搭建详细过程

作者| AI小昕编辑| 磐石出品| 磐创AI技术团队【磐创AI导读】:本文详细介绍了神经网络在实战过程中的构建与调节方式。之前我们讲了神经网络的起源、单层神经网络、多层神经网络的搭建过程、搭建时要注意

浅析 PHP7 的垃圾回收机制

垃圾回收机制 垃圾回收机制是一种动态存储分配方案。它会自动释放程序不再需要的已分配的内存块。自动回收内存的过程叫垃圾收集。垃圾回收机制可以让程序员不必过分关心程序内存分配,从而将更多的精力投入到业务逻

浅析 PHP7 底层运行机制

PHP7代码执行过程 PHP是解释型语言,其执行过程需先编译成中间代码,再经由特定的虚拟机,翻译成特定的指令被执行。其执行过程如下: PHP代码=>Token=>抽象语法树=>Opcodes=>执行

PHP-FPM 与 Nginx 的通信机制总结

PHP-FPM介绍 CGI协议与FastCGI协议 每种动态语言(PHP,Python等)的代码文件需要通过对应的解析器才能被服务器识别,而CGI协议就是用来使解释器与服务器可以互相通信。PHP文件在

Go语言高级编程_2.5 内部机制

2.5内部机制 对于刚刚接触CGO用户来说,CGO的很多特性类似魔法。CGO特性主要是通过一个叫cgo的命令行工具来辅助输出Go和C之间的桥接代码。本节我们尝试从生成的代码分析Go语言和C语言函数直接

浅析 PHP7 底层运行机制

PHP7代码执行过程 PHP是解释型语言,其执行过程需先编译成中间代码,再经由特定的虚拟机,翻译成特定的指令被执行。其执行过程如下: PHP代码=>Token=>抽象语法树=>Opcodes=>执行

算法题:设计和实现一个 LRU Cache 缓存机制

理论基础 LRU算法、Cache 实现LRUCache缓存机制 题目描述 设计和实现一个LRUCache缓存机制 解题思路 leastrecentlyused最近最少使用(被淘汰) Doubl

算法题:设计和实现一个 LRU Cache 缓存机制

题目来源于力扣 理论基础 LRU算法、Cache 实现LRUCache缓存机制题目描述 设计和实现一个LRUCache缓存机制 解题思路leastrecentlyused最近最少使用(被淘汰) Do

陆天炜: GoldenDB事务一致性处理机制优化历程

前言:GoldenDB是中兴通讯推出的一款自研的金融级交易型分布式数据。针对金融行业关注的数据库事务一致性问题,中兴通讯GoldenDB分布式数据库架构师陆天炜,在DTCC2019数据库大会上做了干货

面试官问:请介绍一下MySQL数据库的锁机制?

为什么要加锁问题背景当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。要解决的问题多用户环境下保证数

我们走访了900名微软员工,为你揭秘全球最大软件公司的代码评审机制

大数据文摘出品来源:michaelagreiler编译:倪倪、钱天培、毅航全球最大的软件公司之一微软拥有约140,000名员工,其中大约44%,即超过60,000名员工,是工程师。Office、Vis