楼主: lxwin2008

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

[复制链接]
论坛徽章:
0
11#
 楼主| 发表于 2005-1-7 08:42 | 只看该作者
ORA-01555 snapshot too old: rollback segment number string with name "string" too small

Cause: Rollback records needed by a reader for consistent read are overwritten by other writers.

Action: If in Automatic Undo Management mode, increase the setting of UNDO_RETENTION. Otherwise, use larger rollback segments.

转自oracle官网

使用道具 举报

回复
论坛徽章:
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
12#
发表于 2005-1-7 09:10 | 只看该作者
1555  的原因  就是 需要回滚段信息的时候回滚段已经被覆盖了

只不过具体下来可能分 delay  block  cleanout   /  consistent  reads 而已

先看应用是否有问题
然后考虑增加回滚段个数和增加回滚段大小

9i只有undp_retention 可以控制,当然9i这方面还有一些bug要注意

使用道具 举报

回复
论坛徽章:
0
13#
 楼主| 发表于 2005-1-7 09:28 | 只看该作者
通过读biti老大的回滚段探究和oracle官网1555错误介绍

那我想1555的错误在于Rollback records are overwritten

那么导致Rollback records are overwritten 的原因
未提交事务的回滚信息既然不能被覆盖,那么好象只有以提交才可能发生

请老大们明查!

使用道具 举报

回复
论坛徽章:
0
14#
 楼主| 发表于 2005-1-7 09:40 | 只看该作者
biti老大
我想consistent reads 是oracle实现的目标,而 delay block cleanout 是一种方法
两者能成为分类标准吗?

使用道具 举报

回复
论坛徽章:
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
15#
发表于 2005-1-7 09:45 | 只看该作者
只有提交了才能覆盖
只有覆盖了才可能导致1555

没有提交的怎么可能1555呢?

consistent reads    --------  我这里是看作一个过程,delay  block  cleanout 也是一个过程。 我是说在这两个过程中发生。

使用道具 举报

回复
论坛徽章:
0
16#
 楼主| 发表于 2005-1-7 09:53 | 只看该作者
biti老大
提交的时候才能发生,如果回滚提交了,数据块头也提交了 ,我想就没事了
那么问题也许就出在回滚提交了,而数据块头未提交了,不知道我的理解对不对

还有我想问 consistent reads 中就不存在delay block cleanout 的过程吗?

使用道具 举报

回复
论坛徽章:
0
17#
 楼主| 发表于 2005-1-7 10:07 | 只看该作者
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
18#
发表于 2005-1-7 10:25 | 只看该作者
如果你非要认为 delay  block  cleanout 是 consistent  reads 的一种 我也没意见
只不过 delay  block  cleanout 修改的是 ITL 而不是数据本身!
任何一个进程读到一个block的时候,首先就要检查 ITL  状态是否已经提交,如果没有提交,就会去 cleanout 。cleanout 完了,才去寻找自己需要的数据,这一步才  可能   产生我们通常意义所说的 consistent  reads .


事务已经提交了,数据块的ITL也已经被修改过了,当然就不会产生  delay  block  cleanout 了,但这和是否产生 1555  也没必然联系啊,那得看是不是有查询比这个事务更早开始啊,直到这个查询查到这个数据的时候,而这部分回滚段已经被覆盖了,但是查询又必须看到提交前的数据,自然就产生了 1555 。 但这和 delay  block  cleanout 不就没关系了么。

使用道具 举报

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

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

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

使用道具 举报

回复
论坛徽章:
0
20#
 楼主| 发表于 2005-1-7 10:41 | 只看该作者
为什么查询需要看到提交前的数据?是不是因为ITL未有提交呢?

使用道具 举报

回复

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

本版积分规则 发表回复

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