楼主: lxwin2008

ora-01555错误的一点猜想,请大家指正

[复制链接]
论坛徽章:
86
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20咸鸭蛋
日期:2012-05-08 10:27:19版主8段
日期:2012-05-15 15:24:112013年新春福章
日期:2013-02-25 14:51:24
21#
发表于 2005-1-7 10:44 | 只看该作者
最初由 lxwin2008 发布
[B]为什么查询需要看到提交前的数据?是不是因为ITL未有提交呢? [/B]


因为查询比  事务更早开始
查询 SCN 比事务的 ITL 中 commit  SCN 小,必须要看到之前的数据!这是一个一致读  的基本概念,也是1555错误的最基本类型。研究的太深入了,反而把基础给丢了

使用道具 举报

回复
论坛徽章:
0
22#
 楼主| 发表于 2005-1-7 10:47 | 只看该作者
最初由 lxwin2008 发布
[B]直到这个查询查到这个数据的时候,而这部分回滚段已经被覆盖了,但是查询又必须看到提交前的数据,自然就产生了 1555 。 但这和 delay block cleanout 不就没关系了么。

1.直到这个查询查到这个数据的时候,而这部分回滚段已经被覆盖了
  证明回滚已经提交,提交才能覆盖
2 但是查询又必须看到提交前的数据
  证明您说所的ITL未被标识未提交

那么请问老大这种情况是怎么产生的呢?不是由于delay block cleanout 吗? [/B]



老大 这个我的理解对吗?

使用道具 举报

回复
论坛徽章:
86
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20咸鸭蛋
日期:2012-05-08 10:27:19版主8段
日期:2012-05-15 15:24:112013年新春福章
日期:2013-02-25 14:51:24
23#
发表于 2005-1-7 11:06 | 只看该作者
2 但是查询又必须看到提交前的数据
证明您说所的ITL未被标识未提交   --------  错!已经标志提交,但是查询需要看到提交前的数据是因为查询SCN <  ITL  commit  SCN !


我上面已经说了:
因为查询比 事务更早开始
查询 SCN 比事务的 ITL 中 commit SCN 小,必须要看到之前的数据!这是一个一致读 的基本概念,也是1555错误的最基本类型。研究的太深入了,反而把基础给丢了

使用道具 举报

回复
论坛徽章:
0
24#
 楼主| 发表于 2005-1-7 11:07 | 只看该作者
我想这个问题在于数据块的ITL 是 没有提交信息 还是 有提交但是scn比查询scn大 呵呵
1.正如我上边所说是由于延迟
2正如您所说大查询中有许多并行事务访问同样的数据块

使用道具 举报

回复
论坛徽章:
0
25#
 楼主| 发表于 2005-1-7 11:12 | 只看该作者
2 但是查询又必须看到提交前的数据
证明您说所的ITL未被标识未提交 -------- 错!已经标志提交,但是查询需要看到提交前的数据是因为查询SCN < ITL commit SCN !


您写的回滚段探究文章中介绍了这个
原文:
如果提交scn大于T或者还没有产生commit scn 将尝试去回滚段查找数据

使用道具 举报

回复
论坛徽章:
86
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20咸鸭蛋
日期:2012-05-08 10:27:19版主8段
日期:2012-05-15 15:24:112013年新春福章
日期:2013-02-25 14:51:24
26#
发表于 2005-1-7 11:35 | 只看该作者
有什么冲突吗?

1:如果提交 SCN 也就是 ITL 中 commit SCN  >  查询SCN,查询需要去回滚段中查找数据
2:如果ITL 中没有commit  SCN ,分两种情况,一种是活动事务还没有提交将会去回滚段中寻找变化前数据,第二种是 已经结束事务没有标志提交,将会产生delay  block  cleanout ,将会去回滚段中先寻找 COMMIT SCN 。 这里又分


如果 commit SCN 小于 查询scn,则进行 cleanout  之后就直接读block中数据,如果commit  SCN 大于查询scn,则需要读回滚段中数据(这里是一个递归的过程),如果commit SCN 没找到,则找出回滚段事务表中有一个 contril  SCN ,是当前事务表中所能找到的最小的一个SCN,如果这个SCN 比查询scn小,则把这个scn当作 commit SCN 更新到 ITL ,并且直接读 block数据,如果这个SCN 大于查询SCN ,则 oracle无法知道  查询scn 和该事务的先后关系,于是产生 1555 错误,这也就是 delay  block  cleanout 导致的 1555 错误。


一致读  的过程是一个非常复杂的过程!

使用道具 举报

回复
论坛徽章:
0
27#
 楼主| 发表于 2005-1-7 12:20 | 只看该作者
刚才吃饭去了 谢谢biti老大 还有没有更多的资料啊

使用道具 举报

回复
论坛徽章:
86
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20咸鸭蛋
日期:2012-05-08 10:27:19版主8段
日期:2012-05-15 15:24:112013年新春福章
日期:2013-02-25 14:51:24
28#
发表于 2005-1-7 12:36 | 只看该作者
你有兴趣就去 www.ixora.com.au  淘

使用道具 举报

回复
论坛徽章:
0
29#
 楼主| 发表于 2005-1-7 12:44 | 只看该作者
有没有biti老大翻译过的呀?您以前的回滚段探究只介绍了大概 读起来不是很过瘾 嘿嘿

使用道具 举报

回复
论坛徽章:
0
30#
 楼主| 发表于 2005-1-7 12:46 | 只看该作者
太深入的理解估计自己是达不到了  只希望能有个正确的认识 呵呵

使用道具 举报

回复

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

本版积分规则 发表回复

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