oracle数据块中的scn何时变化

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

先看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又一次改变。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值