oracle中scn(系统改变号)
系统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中获取了(在我的上一个随笔检查点队列中有描述)。
oracle中scn(系统改变号)的更多相关文章
- Oracle中的不等于号
今天碰到一个Oracle不等于的问题,最后搜索了一下,发现下面资料,拿来跟大家分享一下 关于Oracle中的不等于号: 在Oracle中, <> != ~= ^= 都是不等于号的意思. ...
- 问题:oracle 不等于;结果:Oracle中的不等于号
Oracle中的不等于号 今天碰到一个Oracle不等于的问题,最后搜索了一下,发现下面资料,拿来跟大家分享一下 关于Oracle中的不等于号: 在Oracle中, <> != ~= ...
- 浅析Oracle中的不等于号
前几天碰到一个关于Oracle不等于的问题,最后搜索了一下,发现下面资料,拿来跟大家分享一下,需要的朋友可以参考下 关于Oracle中的不等于号: 在Oracle中, <> != ...
- Oracle的SCN与检查点机制
Oracle的SCN与检查点机制 SCN在Oracle的文档上以多种形式出现,一种是System Change Number,另一种是System Commit Number,在大多数情况下,Syst ...
- Talend 将Oracle中数据导入到hive中,根据系统时间设置hive分区字段
首先,概览下任务图: 流程是,先用tHDFSDelete将hdfs上的文件删除掉,然后将oracle中的机构表中的数据导入到HDFS中:建立hive连接->hive建表->tJava获取系 ...
- Oracle中常用的系统函数
本文主要来梳理下Oracle中的常用的系统函数,掌握这些函数的使用,对于我们编写SQL语句或PL/SQL代码时很有帮助,所以这也是必须掌握的知识点. 本文主要包括以下函数介绍:1.字符串函数2. 数值 ...
- Oracle中的单引号问题
SELECT '<a href="javascript:void(0)" onclick="openWyl('''||a.aac001 FROM ac01 a; S ...
- Oracle中奇怪的【不等于号】
Oracle中奇怪的[不等于号] 在Oracle中,不等号有三种:<>,!=,^= 例如: select * from test where name<>'xn'.返回的结 ...
- 关于Oracle RAC中SCN原理和机制的探索
今天看书时看到了关于RAC中SCN的问题,为了进一步搞清楚其内部原理和机制,对该问题进行了广泛的查阅和搜索,遗憾的是,可以参考的资料很少,网上大部分是人云亦云的帖子,其中,详细介绍其内部原理和机制的资 ...
随机推荐
- 新手程序员随笔2——初识html、css和javascript
翻看博客,发现好久木有发blog了.纠其原因,一则是近来工作上卡到了一个编程难题,我是一个单线程的小猿,当我手头有事情做的时候,我不想分心去做其它事情,如写blog.二则是我个人的写作能力不佳,想到写 ...
- Android端接收和发送cookie
流程: 首先android端使用HttpClient的方式发送HTTP请求,此时服务器创立cookie,并发送cookie给android端,android端再将cookie保存起来,在需要发送coo ...
- Jingle 相关问题
1. //page模板默认的相对位置,主要用于开发hybrid应用,实现page的自动装载 basePagePath : 'html/'. 所以所有的section 要放在html文件下面才行
- 1.javascript篇(基础)
js基础部分 js定义: 1.js是通过浏览器解析,然后由浏览器执行的一种脚本语言2.css控制样式,而js控制行为 基本格式: <script type="text/javascri ...
- ES6 ( 三 ) 字符串扩展
一.字符Unicode表示方法 ES6中可以使用以下6种方法表示字符 '\z' === 'z' // true '\172' === 'z' // true '\x7A' === 'z' // tru ...
- Jvascript简介
一.Javascript就是我们所说的脚本语言.它不同于C++/java等语言,它更加灵活! 正因为其灵活性,没有那么多的规章制度,也是我们容易学的地方,但很多时候也是 令人无奈的地方! 二.我们要知 ...
- 学习使用html与css,并尝试写php
这两天看了一点php,本想着实践一下,发现自己的服务器还没弄好,php的代码只写了两三行嵌在html中,还运行不了,同时还发现自己这几天学的html和css还不够,总是频频出现问题,学习的样式和布局都 ...
- git常使用命令整理
1.git撤销本地所有修改(tracked和untracked) . git clean -df . git reset --hard 第一个命令只删除所有untracked的文件,如果文件已经被tr ...
- 关于datagridview里使用combox的总结
最近写的程序中需要在DataGridView中使用下拉选择的功能,首选方案是列的ColumnType属性 使用EditingControlShowing事件, if (e.Control is Com ...
- Vmware安装Centos NAT方式设置静态IP
[Vmware中在搭建集群环境等,DHCP自动获取IP方式不方便,为了固定IP减少频繁更改配置信息,建议使用静态IP来配置,网络连接主要有三种方式 1.nat 2.桥接,3主机模式 ,在这里主要介NA ...