oracle数据块中的scn何时变化

来源:互联网 发布:如何注册国家顶级域名 编辑:程序博客网 时间:2024/06/04 19:03

今天突然想到这个问题,有点迷惑,于是乎设计出如下实验找出结论。

先看update-commit的情况,因为是做完实验后写的,所以我直接在实验步骤后贴上实验数据

sqlplus窗口1

1:dump块        ....................................  scn: 0x0000.0620b7d3  col  0: [ 1]  37

sqlplus新开窗口2

3:窗口2dump块 ................................scn: 0x0000.0620b7d3  col  0: [ 1]  37

4:窗口2刷新buffer_cache

5:窗口2dump块 ................................scn: 0x0000.0620b8ec  col  0: [ 3]  35 35 32

6:窗口1commit

7:dump块 ..........................................scn: 0x0000.0620b8ec  col  0: [ 3]  35 35 32

8:刷新buffer_cache

9:dump块 ..........................................scn: 0x0000.0620b8ec  col  0: [ 3]  35 35 32

从上面的实验数据可以看出来,数据块的scn在开始更新的之后,flush buffer  cache后立马就记录了,并且commi时不改变。

再看update-rollback的情况,同样,直接贴上实验数据:

sqlplus窗口1

1 :窗口1flush buffer_cache        

2 :窗口1dump           ............................scn: 0x0000.0620ba9e col  0: [ 3]  38 38 38

3 :窗口1update 

新开窗口2

4 :窗口2dump ......................................scn: 0x0000.0620ba9e col  0: [ 3]  38 38 38  

5 :窗口2flush buffer_cache 

6 :窗口2dump ......................................scn: 0x0000.0620c0b1 col  0: [ 3]  34 34 34

7 :窗口1rollback

8 :窗口1dump ......................................scn: 0x0000.0620c0b1 col  0: [ 3]  34 34 34

9 :窗口1flush buffer_cache

10 :窗口1dump ....................................scn: 0x0000.0620c0c8 col  0: [ 3]  38 38 38

ok,可以看到commit-rollback的情况是:update记录后,flush buffer cache立马更新块scn,rollback动作发出后,又更新了一次scn。


所以这里可以这样理解:scn在块内容改变的同时改变。flush时改了一次,rollback因为又从undo中恢复了旧数据,所以又改了一次块内容,伴随着内容修改,scn又一次改变。



0 0
原创粉丝点击