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文,我们我也写些这个方面的文章。