设为首页 加入收藏

TOP

Oracle事务原理探究2--读书笔记五(四)
2015-07-24 11:48:20 来源: 作者: 【 】 浏览:22
Tags:Oracle 事务 原理 探究 2-- 读书 笔记
only; session3: update t1 set n1=99 where id = 3; commit; alter system checkpoint; My session: select id, n1 from t1;
我们在自己的会话查询之前,转储一下数据块的结果,不过转储之前执行一下切换检查点命令(alter system checkpoint;),使改变刷新输出到磁盘。

?

?

Itl ? ? ? ? ? Xid ? ? ? ? ? ? ? ? ?Uba ? ? ? ? Flag ?Lck ? ? ? ?Scn/Fsc
0x01 ? 0x0009.010.0000062d ?0x00c00712.0127.07 ?--U- ? ?1 ?fsc 0x0000.0034a241 --flag U 代表上界提交,意思是这个事务已经提交,只是目前标记还没清理。
0x02 ? 0x0005.018.0000062a ?0x00c0068a.013f.2f ?---- ? ?1 ?fsc 0x0000.00000000 ----锁住的是id为1的行,为会话1所锁住的行

bdba: 0x00416169
data_block_dump,data header at 0x1cd0825c
===============
tsiz: 0x1fa0
hsiz: 0x18
pbl: 0x1cd0825c
? ? ?76543210
flag=--------
ntab=1
nrow=3
frre=-1
fsbo=0x18
fseo=0x1f71
avsp=0x1f6b
tosp=0x1f6b

block_row_dump:
tab 0, row 0, @0x1f7b
tl: 10 fb: --H-FL-- lb: 0x2 ?cc: 2 -- 事务0x2似乎锁住了这一行,其实是锁住了这一行
col ?0: [ 2] ?c1 02
col ?1: [ 3] ?c2 02 02
tab 0, row 1, @0x1f71
tl: 10 fb: --H-FL-- lb: 0x0 ?cc: 2
col ?0: [ 2] ?c1 03
col ?1: [ 3] ?c2 02 03
tab 0, row 2, @0x1f85
tl: 9 fb: --H-FL-- lb: 0x1 ?cc: 2 -- 事务0x1似乎锁住了这一行,其实没有锁住,只是锁标记没有清除
col ?0: [ 2] ?c1 04
col ?1: [ 2] ?c1 64
end_of_block_dump
执行查询之后,转储数据块结果(需要先执行alter system checkpoint;)

?

?

Itl ? ? ? ? ? Xid ? ? ? ? ? ? ? ? ?Uba ? ? ? ? Flag ?Lck ? ? ? ?Scn/Fsc
0x01 ? 0x0009.010.0000062d ?0x00c00712.0127.07 ?C--- ? ?0 ?scn 0x0000.0034a241 -- flag C 已提交并清除完成,表明,查询会将已提交的数据清除标记。
0x02 ? 0x0005.018.0000062a ?0x00c0068a.013f.2f ?---- ? ?1 ?fsc 0x0000.00000000 --- 锁住的是id为1的行,为会话1所锁住的行
bdba: 0x00416169
data_block_dump,data header at 0x1cd0825c
===============
tsiz: 0x1fa0
hsiz: 0x18
pbl: 0x1cd0825c
? ? ?76543210
flag=--------
ntab=1
nrow=3
frre=-1
fsbo=0x18
fseo=0x1f71
avsp=0x1f6b
tosp=0x1f6b

block_row_dump:
tab 0, row 0, @0x1f7b
tl: 10 fb: --H-FL-- lb: 0x2 ?cc: 2 -- 事务0x2似乎锁住了这一行,其实是锁住了这一行。
col ?0: [ 2] ?c1 02
col ?1: [ 3] ?c2 02 02
tab 0, row 1, @0x1f71
tl: 10 fb: --H-FL-- lb: 0x0 ?cc: 2
col ?0: [ 2] ?c1 03
col ?1: [ 3] ?c2 02 03
tab 0, row 2, @0x1f85
tl: 9 fb: --H-FL-- lb: 0x0 ?cc: 2 --锁标记已经被清除了。
col ?0: [ 2] ?c1 04
col ?1: [ 2] ?c1 64
end_of_block_dump

3.4 真实的查询操作

? ? ? ? 我们知道,如果我们需要查询一个数据,假设我们是事务1,开始于1:00,于1:05分开始查找A表记录1号。另一个事务2于1:01开始,在1:05分之前将A表记录1号修改了3遍,比如最开始记录1号的值是1,另一个事务将其由1改成2,又改成了3,最后改成了4。另一个事务2于1:10提交的。这样我们的事务1查找的记录1号的值应该为1,但是数据块里面的值已经被修改好几遍了,而且已经变成了4。那么oracle是怎么找到原始值1的呢。下面让我们通过一个小例子来解释这种现象:

? ? ? ?其实,就是讲前面的步骤在执行一下,原谅我直接将上面的命令再拷贝一部分放在下面:(sys用户登录)

? ? ? 3.4.1 准备工作

execute dbms_random.seed(0)

set doc off
doc

end doc is marked with #

#

set linesize 120
set trimspool on
set pagesize 24
set arraysize 25

-- set longchunksize 32768
-- set long 32768

set autotrace off

clear breaks
ttitle off
btitle off

column owner format a15
column segment_name format a20
column table_name format a20
column index_name format a20
column object_name format a20
column subobject_name format a20
column partition_name format a20
column subpartition_name format a20
column column_name format a20
column column_expression format a40 word wrap
column constraint_name format a20

column referenced_name format a30

column file_name format a60

column low_value format a24
column high_value format a24

column parent_id_plus_exp	format 999
column id_plus_exp		format 990
column plan_plus_exp 		format a90
column object_node_plus_exp	format a14
column other_plus_exp		forma
首页 上一页 1 2 3 4 5 6 7 下一页 尾页 4/9/9
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇oracle建立索引常用的规则 下一篇Oracle中deferred_segment_creati..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·C++ 语言社区-CSDN社 (2025-12-24 17:48:24)
·CSDN问答专区社区-CS (2025-12-24 17:48:22)
·C++中`a = b = c`与` (2025-12-24 17:48:19)
·C语言结构体怎么直接 (2025-12-24 17:19:44)
·为什么指针作为c语言 (2025-12-24 17:19:41)