楼主: samchj

[精华] consistent read(读一致性)的通俗理解

[复制链接]
招聘 : 其它语言研发
论坛徽章:
0
41#
 楼主| 发表于 2005-4-11 10:29 | 只看该作者
最初由 tracyly 发布
[B]Hi,Samchj,
还有问题,请问你dump的这些block是在buffer中的还是在datafile中的。
在buffer中的话,如何dump的呢?
   此致敬礼。 [/B]


dump buffer中的信息:
alter session set events 'immediate trace name buffers level 6';

你下载上面的那篇文档看一下就搞定了,嘻嘻!那篇文档有详细讲解!

使用道具 举报

回复
招聘 : 其它语言研发
论坛徽章:
0
42#
 楼主| 发表于 2005-4-11 10:35 | 只看该作者
dump的是内存中所有的块,所以呢时间比较长,然后你先确定那个块的块号,然后在dump文件中有好多块的,但是有状态,xcur/cr等等,你找相应的看看就明白了。
欢迎问问题,嘻嘻!共同提高

使用道具 举报

回复
论坛徽章:
0
43#
发表于 2005-4-12 10:13 | 只看该作者
谢谢诸位的耐心指点。我学,我学,我学学学。。。学无止境啊!

使用道具 举报

回复
论坛徽章:
2
授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34
44#
发表于 2005-7-25 11:03 | 只看该作者

Re: consistent read(读一致性)的通俗理解

最初由 samchj 发布
[B][php]

11.如果这个undo entry包含:
a):包含一个指向前一个交易undo block的地址,读取这个交易的id号在这个前一个交易的undo block头里并读取相应
的交易表entries,返回第五步。record纪录也是从后往前读的,因此有irb指定先读取哪一个。
* Rec #0x1  slt: 0x00  objn: 48636(0x0000bdfc)  objd: 49636  tblspc: 33(0x00000021)
*       Layer:  11 (Row)   opc: 1   rci 0x00
Undo type:  Regular undo   Last buffer split:  No
Temp Object:  No
Tablespace Undo:  No
rdba: 0x00801b7c---------------------------------------->>>>>>  这里有一个指针指向前一个undo block证明
这个undo chain上还有一些undo 块。
*-----------------------------
KDO undo record:
KTB Redo
op: 0x02  ver: 0x01
op: C  uba: 0x00801b7c.02a7.3e
KDO Op code: URP row dependencies Disabled
  xtype: XA  bdba: 0x054016c1  hdba: 0x054016b9
itli: 1  ispac: 0  maxfr: 4863
tabn: 0 slot: 85(0x55) flag: 0x2c lock: 0 ckix: 0
ncol: 8 nnew: 5 size: 0
col  3: [ 3]  c1 06 36
col  4: [ 3]  c1 06 36
col  5: [ 1]  30
col  6: [ 2]  c1 02
col  7: [ 6]  c4 02 23 38 39 3d

*-----------------------------
* Rec #0x2  slt: 0x00  objn: 48636(0x0000bdfc)  objd: 49636  tblspc: 33(0x00000021)
*       Layer:  11 (Row)   opc: 1   rci 0x01
Undo type:  Regular undo   Last buffer split:  No
Temp Object:  No
Tablespace Undo:  No
rdba: 0x00000000------------------------------------------>>>>>>这里的dba因为rci决定了它不是这个block的最
后一个record。
这是因为,如果你查询的表有很多个交易在修改,那也需要读取这些所有的这些交易所涉及的undo block,应用到重做
[php]
[/B]



这里我怎么始终找不到a pointer to a previous transaction undo block address, 倒是指向ITL的entries 很容易发现。是否两者只能存在一个呢,

另这里的RDBA在我的dump文件里怎么始终是0x00000000,

使用道具 举报

回复
论坛徽章:
2
授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34
45#
发表于 2005-7-25 11:09 | 只看该作者
Samchi,在一致读的步骤中,有两处不太明白,能否说明一下:
1、一个交易占用几个undo块时,是从rdba读取其前一个undo块地址吗?
2、一个undo block 中的record是从后往前读的,由irb指定先读取哪一个,跟随其后读取的record number从哪里得知,是从 rci 吗?
先谢过了。

使用道具 举报

回复
论坛徽章:
2
授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34
46#
发表于 2005-8-3 14:22 | 只看该作者

Re: Re: consistent read(读一致性)的通俗理解

最初由 nattyneat 发布
[B]


这里我怎么始终找不到a pointer to a previous transaction undo block address, 倒是指向ITL的entries 很容易发现。是否两者只能存在一个呢,

另这里的RDBA在我的dump文件里怎么始终是0x00000000, [/B]


这里“a pointer to a previous transaction undo block address”
理解为“在这个事务中的,涉及到的Next undo block address 的地址”,这样一切都通顺了,
那个rdba指向的就是同一事务中涉及到的,next undo block 的地址(如果该事务用到了N>1 个undo blocks)。某一个数据块的递归回滚是通过保存在回滚块中的旧的ITL来进行的。

开始阅读到这篇文章的时候,对这一句 的理解就是
假如某个数据块在两个不同的事务a,b中被修改了两次。
产生一致读,回滚事务a对应的UNDO CHAIN 时候,undo chain上的head entry 会包含一个指针指向 事务b对该数据块修改而产生的undo chain 上的tail undo entry所在的回滚块。

还疑惑oracle为什么既要在undo block 中的ITL部分又要搞个指针指向前一事务的undo block 。这不是重复了吗。
终于明白了,谢谢Eygle的回复。
特写下个人对这个问题的理解历程,望后来者可以避免同样的错误。

使用道具 举报

回复
论坛徽章:
0
47#
发表于 2005-8-5 11:01 | 只看该作者
还疑惑oracle为什么既要在undo block 中的ITL部分又要搞个指针指向前一事务的undo block 。这不是重复了吗?----------------->

rci是如何构成一个chain,通过rci读取直到读到0x00结束,完成了多块导航。--------------->


希望大师们给予详细解答。

使用道具 举报

回复
招聘 : 数据库管理员
论坛徽章:
0
48#
发表于 2005-8-17 01:03 | 只看该作者
文章开始提到一致读的步骤是
1. Read the Data Block.
2. Read the Row Header.
3. Check the Lock Byte to determine whether there's an ITL entry.
4. Read the ITL entry to determine the Transaction ID (Xid).
我有个疑问,如果查询开始后某个块被更新过多次,那么就需要递归的构建cr,递归是否也使用这个过程
但是cr中的lb 为 0x0,这个时候怎么确定相应的itl呢?
对transaction rollback的时候也存在这个问题.

使用道具 举报

回复
论坛徽章:
14
奥运会纪念徽章:自行车
日期:2008-04-25 21:00:142013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-10 13:11:14奥运会纪念徽章:皮划艇激流回旋
日期:2012-08-13 10:25:38鲜花蛋
日期:2012-02-10 11:40:172010新春纪念徽章
日期:2010-03-01 11:04:58授权会员
日期:2010-01-12 09:40:47ITPUB元老
日期:2010-01-12 09:33:092009新春纪念徽章
日期:2009-01-04 14:52:28奥运会纪念徽章:拳击
日期:2008-10-24 13:22:33
49#
发表于 2006-7-6 09:04 | 只看该作者

Re: consistent read(读一致性)的通俗理解

[QUOTE]最初由 samchj 发布
[B]首先介绍undo 中的简单结构:
undo header-->transaction table-->undo entries(undo block)-->
undo entries包含的只有一个行改变的col值的undo,并不包含整个行的befor image。
KDO undo record:
KTB Redo op: 0x02 ver: 0x01 op: C uba: 0x02000004.0005.0a
KDO Op code: URP xtype: XA bdba: 0x01c00007 hdba: 0x01c00006
itli: 1 ispac: 0 maxfr: 4863 tabn: 0 slot: 1(0x1) flag: 0x2c
lock: 0 ckix: 0 ncol: 8 nnew: 2 size: -1
col 5: [ 3] c2 20 24
col 7: [ 2] c1 1f


consistent read:
1.读取数据块,如果该块在内存中,则增加一个克隆用于undo
2.读取行头:
tab 0, row 0, @0x1e4c
tl: 44 fb: --H-FL-- lb: 0x1 cc: 8
3.检查lb是否这里有一个itl:
Itl  Xid                      Uba                     Flag
0x01 xid: 0x0003.000.00000010 uba: 0x02000004.0005.09 ----
4.如果有,则读取这个itl的xid,xid=us#.slot#.wrap#

-------------------------------------------------------------------------------------------------------------

看到这里,由一个疑问:
检查lb如果为0,会怎样呢?
如果lock byte为零,意味着这个块被cleanout过。那么这个行上执行的前一个事务(已经提交)的System commit number还是有可能大于查询的snapshot scn。oracle 能够在这里直接读这个块吗?

使用道具 举报

回复
论坛徽章:
14
奥运会纪念徽章:自行车
日期:2008-04-25 21:00:142013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-10 13:11:14奥运会纪念徽章:皮划艇激流回旋
日期:2012-08-13 10:25:38鲜花蛋
日期:2012-02-10 11:40:172010新春纪念徽章
日期:2010-03-01 11:04:58授权会员
日期:2010-01-12 09:40:47ITPUB元老
日期:2010-01-12 09:33:092009新春纪念徽章
日期:2009-01-04 14:52:28奥运会纪念徽章:拳击
日期:2008-10-24 13:22:33
50#
发表于 2006-7-6 09:08 | 只看该作者
最初由 biti_rainy 发布
[B]窃以为对于回滚段有价值该讨论的已经讨论的差不多了

这个文章流传了已经很久了 [/B]


斑竹有没有介绍undo segment header block 和 undo block内部格式的文章?
把undo block作dump, 还是看不懂每个entry和field的含义?多谢!

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表