oracle(十一) scn
SCN(System Chang Number)作为oracle中的一个重要机制,在数据恢复、Data Guard、Streams复制、RAC节点间的同步等各个功能中起着重要作用。
理解SCN的运作机制,可以帮助你更加深入地了解上述功能。在理解SCN之前,我们先看下oracle事务中的数据变化是如何写入数据文件的:
1、事务开始;
2、在buffer cache中找到需要的数据块,如果没有找到,则从数据文件中载入buffer cache中;
3、事务修改buffer cache的数据块,该数据被标识为“脏数据”,并被写入log buffer中;
4、事务提交,LGWR进程将log buffer中的“脏数据”写入redo log file中;
5、当发生checkpoint,CKPT进程更新所有数据文件的文件头中的信息,DBWn进程则负责将Buffer Cache中的脏数据写入到数据文件中。
经过上述5个步骤,事务中的数据变化最终被写入到数据文件中。但是,一旦在上述中间环节时,数据库意外宕机了,在重新启动时如何知道哪些数据已经写入数据文件、
哪些没有写呢?SCN机制就能比较完善的解决上述问题。 正是它这种只会增加的特性确保了Oracle知道哪些应该被恢复、哪些应该被复制。总共有4中SCN:
(1)系统检查点(System Checkpoint)SCN、
(2)数据文件检查点(Datafile Checkpoint)SCN、
(3)结束SCN(Stop SCN)、
(4)开始SCN(Start SCN)。
其中前面3种SCN存在于控制文件中,最后一种则存在于数据文件的文件头中。在控制文件中,System Checkpoint SCN是针对整个数据库全局的,因而只存在一个,
而Datafile Checkpoint SCN和Stop SCN是针对每个数据文件的,因而一个数据文件就对应在控制文件中存在一份Datafile Checkpoint SCN和Stop SCN。
在数据库正常运行期间,Stop SCN是一个无穷大的数字。
下面,在简单介绍一下SCN如何在数据库恢复中起作用。数据库在正常关闭(shutdown immediate/normal)时,会先做一次checkpoint,将log file中的数据写
入数据文件中,将控制文件、数据文件中的SCN都更新为最新的SCN。数据库异常/意外关闭不会更新或者只更新部分Stop SCN。当数据库启动时,Oracle先检查
控制文件中的每个Datafile Checkpoint SCN和数据文件中的Start SCN是否相同,再检查每个Datafile Checkpoint SCN和Stop SCN是否相同。如果发现有不同,
就从Redo Log中找到丢失的SCN,重新写入数据文件中进行恢复。
最新文章
- rails数据库查询 N + 1 查询的解决办法
- mysql 导出csv
- css中图片等比例缩放
- 用Webshell直接杀入内网
- 安装VS2015可能出现的问题以及解决方法
- node-debug 三法三例之node debugger + node inspector
- Xcode修改项目名称教程
- C++内存泄露调试
- USACO6.4-Electric Fences:计算几何
- 使用固件库操作STM32F4时的必要配置(转)
- delphi edit编辑框使用
- Cocoapods 应用第二部分-私有库相关
- [LeetCode] Maximum Distance in Arrays 数组中的最大距离
- 20165223《网络对抗技术》Exp5 MSF基础应用
- spark优化参数调节和故障参数调节
- MUI学习03-滚动图(幻灯片)及菜单项(九宫格)
- 商务通服务器版LR_Data目录下相关配置文件
- 第30节:Java基础-内部类
- 【BZOJ2648】SJY摆棋子
- js keycode