scn的构成(SCNracle世界中的第四维度)

这几天一直在阅读翠姐编的《oracle数据库系统管理实例教程》。虽然说这本书的内容我之前都已经学习过了,书上的有些内容还是给了我很大的启发。这本书非常通俗易懂,十分适合初学者学习。在阅读的过程中,我发现了很多自己的漏洞。尤其是在对与oracle体系结构的理解方面,我发现自己对于某些机制的了解不如自己想象的那么深刻。于是我通过借鉴了杨建荣老师的《oracle dba工作笔记》和盖国强老师的《深入解析oracle》之后,感觉自己有了一定进步。最近感触颇多,但由于篇幅有限,今天就只聊聊我对SCN的感触。

老张一句话:啥是scn?

scn是oracle内部的一个时间机制。

老张的理解:

这个世界是三维的,然而在oracle的二进制世界中却多了一个维度——时间。我们可以依据时间(scn)来调整oracle数据库的状态。这个时间(scn)有点特殊,它并不能用现实世界中的时间去理解它。oracle二进制里面的时间只有当数据库发生改变的时候才会改变。它在oracle中可以说是随处可见,控制文件、数据文件、日志文件等文件中都存在着它的身影。oracle数据库里的bytes就跟现实世界中的元素一样,oracle里面的所有东西都是由bytes构成的,时间也不例外。scn有它的结构。它由一个高位scnwrap和一个低位scnwrap组成。

从数据文件头中读取scn(这里的checkpoint_change#是最后一次事务的提交的scn)

scn的构成(SCNracle世界中的第四维度)(1)

为了更好地理解oracle scn,我将控制文件转储了出来:

scn的构成(SCNracle世界中的第四维度)(2)

以下是控制文件里面的内容:

在控制文件中,开头是一些关于版本号、节点名、主机名之类的信息

scn的构成(SCNracle世界中的第四维度)(3)

每一类文件在控制文件中的信息都已经被归类好,先看看日志文件的:

scn的构成(SCNracle世界中的第四维度)(4)

可以很清楚地看到我的数据库里面有五个日志文件。其中每个日志文件都有两个scn,low scn和next scn,他们分别是这个日志文件的低位和高位scn。其中有一个文件比较特殊,第三个日志文件的结束scn是无穷大的,这说明这个文件目前正在被使用。利用这一点可以确定需要恢复的信息位于哪一个日志或归档文件中。

scn的构成(SCNracle世界中的第四维度)(5)

这是控制文件的数据文件信息,里面有很多中scn,其中checkpoint_cnt scn 是检查点scn,他表示这个数据文件最后一次检查点进行的时间。stop scn表示上一次关闭数据库的时间。此外还有很多scn的种类,这里就不提了。

检查点scn

检查点的目的就是缩短舵机时间

工作原理:

当数据进行修改的时候,首先将数据从磁盘读入到内存中。修改数据的同时,oracle会记录重做信息到联机重做日志组文件中。当检查点发生的时候,oracle会通知dbwn进程,把修改过的数据(checkpoint scn之前的脏数据)从databuffer写入磁盘中,写入完成之后,ckpt进程会更新相应控制文件和数据文件头,记录检查点信息,标识变更。

查看检查点scn可以用下列查询:

scn的构成(SCNracle世界中的第四维度)(6)

数据库在启动过程中对SCN的验证分为两个阶段:

第一阶段,检查控制文件和数据文件中数据文件的检查点次数是否一致(不同的数据文件检查点次数可能是不同的),如果不一致说明要么控制文件过旧,要么数据文件过旧,需要执行相应的恢复操作;如果一致继续执行下一步检查。

第二阶段,检查数据文件的启动SCN和终止SCN是否一致,如果数据库关闭是非正常关闭,那么终止SCN肯定是无穷大,这个时候需要完成一个实例恢复的过程;如果启动SCN和终止SCN相同,那么数据库就可以OPEN了。

另外,存储在控制文件中的数据库SCN、数据文件SCN和存储在数据文件头中的启动SCN实际都是在执行检查点时由CKPT进程对控制文件和数据文件头的更新,3者必定是相同的,在执行SHUTDOWN IMMEDIATE|NORMAL|TRANSANTIONAL关闭数据库时会再次触发检查点,这时前面3种类型的SCN和存储在控制文件中的终止SCN必定是相同的

此篇文章转发于公众号“老张的技术博客”,如有侵权,将于第一时间删除!

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页