log sequense number和scn的关系

csdn上,发现一个网友提出这样的我问题,

 

一时不知道其究竟是什么用意,所以关注了一下他的回复,继而发现这个网友还是属于思考型的,

可能对一些网上的文章的意思不是很了解,然后又有些知识基础,所以思考后,一些知识点就有

些纠缠了。

 

了解到他的意思,我也做了相应的回复。这样的网友还是相当值得学习的,对于技术的学习,

特别是oracle技术的学习,我在很多的文章里都指出了,不能单纯的模仿,单纯的囫囵吞枣,一定

要自己消化,消化不了的东西,硬性的吞下下,迟早要吃坏你的肠胃,折磨你的胃口的。

 

同时这里还看到另一个网友的一些回答,回答的有些莫名,看到这个网友以前的一些回复,也是一个

很有经验,也有一定思考能力的网友,不过对于这个贴的回复,有些过于草率,可能对学习者造成

一定的误解

 

下面是我对log sequence number和scn的一些个人理解

 

首先,这个贴是谈到redo log和恢复的问题谈起的,那么先一起看看有关redo log的视图

redo log文件的相关视图是v$log_history,v$log和v$loghist。

 

然后在看区别,

log sequence number是oracle里对redo文件切换的一个序号,针对于redo switch的,

而scn叻,scn是system change nubmer的缩写,表示的意思是数据库系统发生变化的编号,

是针对于system change的时间点的,当oracle数据库系统发生一个改变,比如数据修改,

一个alter语句等等,

 

所以。单纯这两个概念名词本身并没有关系的

 

不过,如你所知的,在一个reodo file需要进行switch的时候,这里通常是发生了一系列的scn

的变化的,在这里当发生日志切换的时候,oracle体系会拿到下一个redo file,然后记录写入当

前联机日志的最后一个日志块的scn, 也就是last_change,然后关闭当前这个redo file,拿到下个

并打开下个至于current,并增加log seqence,记录scn记录第一个日志块 所以虽然名词上没有

关系,但是对于一个log number的增加,其实里面是有着一段scn的改变的, 所以这里他们的关

系,只能描述为一个log sequence number的变化,通常包含了很多scn的变化。

 

 

至于你说到的恢复的问题的话,

 

主要还是check的scn,而这里log sequence number也并不是全无作用,要不oracle也不会让

他存在在这里主要的作用是定位于redo log并且根据sequence的顺序方便找出需要的redo file的,

当数据库异常关闭,data buffer里的数据还没有来的及写入datafile的话,这时候就是需要恢复的,

 

 

恢复的过程简而言之的话就是根据发生发生故障的scn,找到需要开始的redo log的日志段,根据

redo日志段里的信息。执行redo,一致到你取得cancel或者找不到更新的redo。

 

需要了解恢复的具体原理和细节的,需要关注专门介绍恢复的blog文,我们我也写些这个方面的文章。

 

你可能感兴趣的:(log sequense number和scn的关系)