系统scn:                 select checkpoint_change# from v$database;

文件scn:                 select name,checkpoint_change# from v$datafile;

结束scn:                 select name,last_change# from v$datafile;

数据文件头部scn:     select name,checkpoint_change# from v$datafile_header;

系统scn、文件scn、结束scn,这三者是在控制文件中,数据文件头部scn在数据文件上。

数据库正常运行,系统scn、文件scn、数据文件头部scn(也称为开始scn),这三者是相同的,而结束scn是空,即无穷大(因为正常运行,还未关闭啊),这是正常运行的情况,那么当正常关闭时,四者的scn号是相同的。假如发生非正常关闭,结束scn是空值,那么下次启动数据库,oracle发现结束scn是空值,就知道上次是非正常关闭,所以就要进行实例恢复了。实例恢复需要的是redo log,那么oracle是如何确定使用哪个redo log?以及确定之后又该从该redo log哪里进行恢复的呢?下面做个实验。。。

当前数据库的系统scn号:

这是redo log的一些信息:

我们主要关注第一次改变编号和状态,我们可以看见,第3号日志组,序列号36的FIRST_CHANGE#和当前数据库的系统scn号一致,为什么呢,FIRST_CHANGE#又是什么呢?从查询结果我们可以看出,1号日志组是最旧的,2号次之,3号是最新的,这是从FIRST_CHANGE#可以看出来的,有FRIST就应该有NEXT啊,其实不难理解,下一个日志组的FIRST_CHANGE#其实就是这当前日志组的NEXT。所以例如1号日知组,FIRST_CHANGE#是1372964,NEXT是1395875。FIRST_CHANGE#的意义是该日志文件的第一条日志内容的scn号,NEXT就是该日志文件的最后一条内容的scn号了。那么如果此时数据库崩溃,数据文件的scn号是1398359,而3号日志文件的FIRST_CHANGE#也是1398359,且当3号日志组的状态是current,恢复就只要恢复3号日志组文件的内容就可以了,因为其他日志文件所记录的内容已写入到数据文件中。

      还有一种情况,如果三个日志组的状态是active、active、current,那么数据文件的scn号就会和比较旧的active的日志组的FIRST_CHANGE#一致,这时如果崩溃后恢复,那么三个日志组都会用到。

      结论:现在可以理解了,scn号的目的是为了保证数据库状态的一致性,而scn和redo log的FIRST_CHANGE#作用是,当实例恢复的时候,确定了该跑哪个日志组,才能将脏块重现在buffer cache中。而确定日志组后,又该从该日志组的哪条日志开始,就要从控制文件的LRBA中获取了(在我的上一个随笔检查点队列中有描述)。

转载于:https://www.cnblogs.com/oraclelike/p/6155512.html

oracle中scn(系统改变号)相关推荐

  1. 手动修改oracle scn号,SCN(系统改变号)

    1. scn: system change number 用以标识数据库在某个确切时刻提交的版本. 数据库的内部逻辑时钟. 每个数据库都有一个全局的SCN生成器. 它会随着外部变化的加快而加快变化,在 ...

  2. Oracle 系统改变号SCN详解

    这篇文章是参考甲骨论老相老师的教学视频: http://v.youku.com/v_show/id_XNDAyNDIyMDgw.html 所做的学习笔记. 1. SCN的定义 scn的英文全称就是 s ...

  3. oracle最新scn补丁,Oracle 系统改变号(SCN), Headroom, 安全和补丁信息

    适用于: Oracle Database – Enterprise Edition – 版本 10.1.0.5到 11.2.0.3 [Release 10.1 to 11.2] 本文信息适用于任何平台 ...

  4. 获取当前scn号scn1_Oracle 系统改变号SCN详解

    Scn : scn的英文全称就是 system change number, 中文直译过来就是系统改变号了. 1.SCN的定义 scn的英文全称就是 system change number, 中文直 ...

  5. oracle scn 作用,Oracle中scn讲解

    SCN System Change Numbers (SCNs)&System Commit Numbers(系统改变号&系统提交号) A system change number ( ...

  6. Oracle中的系统权限管理

    在实际的IT项目管理中,对数据库的管理显得尤为重要,一般情况下,数据库的管理工作会有公司中的DBA人员来负责.但是,不是任何有关数据库的操作都要去联系DBA啦,万一人家不在或有其它事情不能立即处理时该 ...

  7. Oracle中获取系统当前时间 和 进行时间间隔操作

    原文转载至:http://blog.sina.com.cn/s/blog_4ce36a780101b1rl.html 以 年-月-日 时:分:秒 格式获取当前数据库系统时间: select to_ch ...

  8. oracle 截取时间至小时,Oracle中获取系统当前时间 和 进行时间间隔操作

    原文转载至:http://blog.sina.com.cn/s/blog_4ce36a780101b1rl.html 以 年-月-日 时:分:秒 格式获取当前数据库系统时间: select to_ch ...

  9. oracle中获取时间的方法,oracle中获取系统当前时间,启动时间以及运行时间

    1.获取当前时间 可以通过如下三种方式获取当前时间: select sysdate from dual; select Current_date from dual; select SYSTIMEST ...

最新文章

  1. selenium之窗口操作
  2. 非常全面的Android Bitmap知识点梳理
  3. Python学习 - 之 数据封装和私有属性
  4. android 血压计开发,智能血压计方案开发
  5. spring加载classpath与classpath*的区别别
  6. git获取特定的commit
  7. 主机安全扫描入门-用Java封装Nmap
  8. OpenCV调用工业相机
  9. 记一次简单的burpsuite弱口令爆破实验
  10. Samsung SENS R60plus
  11. MongoDB分片式高可用集群搭建
  12. 怎样判断小红书被限流?小红书被限流有这几大表现
  13. 华为手机连电脑当摄像头用_今天才知道,华为手机摄像头还能这样用!还不会用你买什么华为?...
  14. 如何听节拍器_七个方法可以拯救你的节奏感!
  15. Realtek WiFi concurrent 模式介绍
  16. android模拟器 百度云盘,MEmu逍遥安卓模拟器海外纯净版
  17. Vue简明实用教程(13)——Vue的生命周期
  18. 硬盘的主流技术,最新的硬盘技术
  19. 微信小游戏-CocosCreator教学系列--Sprite教学
  20. 增值税发票OCR识别扫描

热门文章

  1. SQL Server cast() 批量更新列内容
  2. Struts2中s:iterator/s:iterator标签的使用:
  3. linux s t i a权限,关于Linux下s、t、i、a权限
  4. C++:05---命名空间
  5. 算法(21)-leetcode-剑指offer5
  6. php 实现的n,php 实现数据N等分。
  7. python开发web项目_Django2:Web项目开发入门笔记(20)
  8. java 1000以内的完数
  9. 人生有五不:不等、不管、不看、不做、不给
  10. gcc交叉编译的实现