ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Oracle------ SCN

2018-10-31 12:02:22  阅读:196  来源: 互联网

标签:


原文转载自:https://blog.csdn.net/JackieLiuLixi/article/details/17140659

1.SCN(System Change Number)作为oracle中的一个重要机制,在数据恢复、Data Guard、Streams复制、RAC节点间的同步等各个功能中起着重要作用。

2. 在理解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中的脏数据写入到数据文件中。

3. SCN是一个只会增加、不会减少的数字,它是由当时的timestamp转换过来的。每当需要产生一个新的SCN到redo记录时,系统获取当时的timestamp,并将其转换未数字作为SCN。

4. 一共有4种SCN。系统检查点(System Checkpoint)SCN、数据文件检查点(Datafile Checkpoint)SCN、结束SCN(Stop SCN)以及开始SCN(Start SCN)。其中前面三个存在于控制文件中,最后一个存在于数据文件中。

5. 在控制文件中,System Checkpoint SCN是针对整个数据库全局的,因此该SCN只有一个。而Datafile Checkpoint SCN以及Stop SCN是对于每个数据文件的,因此存在多个。在数据库正常运行期间,Stop SCN是一个无穷大或者说是NULL,当数据库正常结束时,系统会自动进行一次checkpoint,保持Stop SCN与其他三个SCN保持一致(即都为最新的Next SCN)。但是如果是宕机等异常情况,则Stop SCN与Start SCN不一致,这样就可以判断数据库是否需要修复。

6. 在一个事务提交后(上述第四个步骤)会在redo log中存在一条redo记录,同时,系统为其提供一个最新的SCN记录在该条记录中,如果该条记录再redo log被清空(日志满做切换时或发生checkpoint时,所有变化日志已经被写入数据文件中),则其SCN被记录为redo log的low SCN,以后在日志再次被清空前写入的redo记录中的SCN则成为Next SCN。

7. 当日志切换或者发生checkpoint(上述第五个步骤)时,从Low SCN到Next SCN之间所有redo记录的数据就被DBWn进程写入数据文件中,而CKPT进程则将所有数据文件(无论redo log中的数据是否影响该数据文件)的文件头上记录的Start SCN更新为Next SCN,同时将控制文件中的System Checkpoint SCN、每个数据文件对应的Datafile Checkpoint更新为Next SCN。但是如果该数据文件被设置成了read-only时,数据文件的Start SCN和控制文件中Datafile Checkpoint SCN都不更新。

8. 当数据库启动时,Oracle先检查控制文件中的每个Datafile Checkpoint SCN和数据文件中的Start SCN是否相同,再检查每个Datafile Checkpoint SCN和Stop SCN是否相同。如果发现不同,就从Redo log中找到丢失的SCN,重新写入数据文件中进行恢复。

9.    如果打开数据库时发现 system scn>datafile scn,那么以为着使用旧的备份数据文件,也就是需要介质恢复 
  如果是 system scn<datafile scn,及控制文件 scn 是旧的,代表使用了老的控制文件,需要 recover using backup controlfile 进行恢复。 

标签:
来源: https://www.cnblogs.com/kennyael/p/9882215.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有