楼主: graysun

[精华] [Q]快照过旧的问题

[复制链接]
论坛徽章:
5
2010广州亚运会纪念徽章:板球
日期:2011-04-26 15:05:592010广州亚运会纪念徽章:手球
日期:2011-05-03 09:34:21紫蛋头
日期:2011-09-01 17:48:49迷宫蛋
日期:2011-11-02 09:25:33摩羯座
日期:2015-08-17 21:23:17
11#
发表于 2003-1-23 10:42 | 只看该作者

Re: hehe

最初由 biti_rainy 发布
[B]

这个恐怕为最大查询运行时间比较妥当?   [/B]

对,是这样的。

使用道具 举报

回复
论坛徽章:
8
授权会员
日期:2005-10-30 17:05:33奥运会纪念徽章:跳水
日期:2008-05-26 09:14:52奥运会纪念徽章:曲棍球
日期:2008-06-13 13:35:53奥运会纪念徽章:铁人三项
日期:2008-08-28 09:18:09生肖徽章2007版:马
日期:2009-09-08 11:21:202010年世界杯参赛球队:塞尔维亚
日期:2010-03-11 19:05:042011新春纪念徽章
日期:2011-02-18 11:43:33迷宫蛋
日期:2013-01-15 09:40:02
12#
发表于 2003-1-23 11:00 | 只看该作者
不错、不错
明白了

使用道具 举报

回复
论坛徽章:
4
ITPUB元老
日期:2005-02-28 12:57:00授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34ITPUB技术丛书作者
日期:2010-09-26 15:24:56
13#
发表于 2003-1-23 12:30 | 只看该作者

Re: hehe

通常FLASHBACK_TIME(用于FLASHBACK)如果高于UNDO_RETENTION (缺省是3小时),容易导致01555

SQL> show parameter undo_retention

NAME                                 TYPE
------------------------------------ ---------------------------------
VALUE
------------------------------
undo_retention                       integer
10800
SQL>

使用道具 举报

回复
论坛徽章:
0
14#
发表于 2003-4-8 14:51 | 只看该作者
8i如何来设置呢?

使用道具 举报

回复
论坛徽章:
4
ITPUB元老
日期:2005-02-28 12:57:00授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34ITPUB技术丛书作者
日期:2010-09-26 15:24:56
15#
发表于 2003-4-9 08:46 | 只看该作者
在8i,我的理解:

策略1:
一般的数据库可以调整(加大)optimal,以便为数据库可以完成查询而提供read   consistent view(rbs扩展的extent可以保留的多一些,返回给ts的相对少一些),对于大数据库(VLD),可以适具体情况甚至不使用这个参数,以便为数据库完成查询提供read   consistent view(rbs扩展的extent不会返回给ts)。

策略2:
延迟commit;

策略3:
增加回滚段,对大事务使用大的回滚段

BTW:
RBS的管理不是个简单的问题,还需要具体情况具体对待

使用道具 举报

回复
论坛徽章:
3
ITPUB元老
日期:2005-11-26 03:00:34授权会员
日期:2005-11-26 03:43:55会员2006贡献徽章
日期:2006-04-17 13:46:34
16#
发表于 2003-12-10 16:33 | 只看该作者

Re: 因为

最初由 biti_rainy 发布
[B]当某个查询a开始之后
这个时候b更新了a将可能查询的数据,然后b提交了事务
然后这个时候因为c的事务,这个时候去使用了b曾经使用过的回滚段数据块,于是原先的数据消失(造成这样的原因是因为回滚段轮循使用了一圈)
或者因为optimal收缩的缘故导致数据丢失

这个时候查询a才扫描到该数据块,在buffer  cache中发现数据已经被更改过,于是去回滚段中找 before  image,但是却发现数据已经被覆盖了!
于是就出了ora-1555 snapshot too  old 错误

undo_rention:是决定事务结束后继续保持一段数据的时间 [/B]


是不是这样的,我做一个插入从一个很大很多的记录表中插入另一张表,而现在的操作的上个月的,而另外的插入是操作本月的。同样还是快照错误。

使用道具 举报

回复
论坛徽章:
3
ITPUB元老
日期:2005-11-26 03:00:34授权会员
日期:2005-11-26 03:43:55会员2006贡献徽章
日期:2006-04-17 13:46:34
17#
发表于 2003-12-11 16:40 | 只看该作者

Re: 因为

最初由 biti_rainy 发布
[B]当某个查询a开始之后
这个时候b更新了a将可能查询的数据,然后b提交了事务
然后这个时候因为c的事务,这个时候去使用了b曾经使用过的回滚段数据块,于是原先的数据消失(造成这样的原因是因为回滚段轮循使用了一圈)
或者因为optimal收缩的缘故导致数据丢失

这个时候查询a才扫描到该数据块,在buffer  cache中发现数据已经被更改过,于是去回滚段中找 before  image,但是却发现数据已经被覆盖了!
于是就出了ora-1555 snapshot too  old 错误

undo_rention:是决定事务结束后继续保持一段数据的时间 [/B]


提出疑议,我刚做了一个查询,从一张很多数据量的表中一个分区查询,而对此分区的无任何修改和插入操作,可长时间查询不到,报出ora-1555 snapshot too  old 错误。不知biti能否给以解释。

使用道具 举报

回复
论坛徽章:
63
版主7段
日期:2012-05-15 15:24:11itpub13周年纪念徽章
日期:2014-10-08 15:16:50itpub13周年纪念徽章
日期:2014-10-08 15:16:50itpub13周年纪念徽章
日期:2014-10-08 15:16:50itpub13周年纪念徽章
日期:2014-10-10 14:34:59马上加薪
日期:2015-01-08 15:39:192015年新春福章
日期:2015-03-04 14:19:112015年新春福章
日期:2015-03-06 11:57:31
18#
发表于 2003-12-11 17:17 | 只看该作者
如果回滚空间中相应的内容被覆盖,Oracle就认为旧数据块过于陈旧,无法重建出来,这就是snapshot too old的由来。针对这种错误,Oracle建议使用更大的回滚空间,这是有道理的,但更大的回滚空间仍有不敷使用的时候,不足以应付多变的应用,只能算一种消极应付的对策。
第一种情况:
假定不能重建的数据块为X,当X中的记录被更新(无论来自于本次游标操作,还是其它数据库连接,更多可能是来自于自身),SCN同时刷新,如果经过某段间隔再要读取X中记录就必须根据回滚空间相关内容重建旧X,而一旦这段间隔中发生较多的数据库更新操作,回滚空间有可能在消耗完空闲内容后被迫覆盖旧内容,这样X的重建就无法完成。
比较好的解决方法是:游标展开后将记录主键和更新所需用到的域读至内存,不执行更新操作,随即关闭游标,再处理这些记录,根据主键分批更新回数据库。
第二种情况:
与第一种情况类似,只不过更新操作全部来自于其它数据库连接。
没有太好的解决方法,尽量加快查询过程,保证其它连接不发生或少发生与本次查询相关的更新操作。

使用道具 举报

回复
论坛徽章:
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
19#
发表于 2003-12-11 18:21 | 只看该作者

Re: Re: 因为

最初由 mengmeng 发布
[B]

提出疑议,我刚做了一个查询,从一张很多数据量的表中一个分区查询,而对此分区的无任何修改和插入操作,可长时间查询不到,报出ora-1555 snapshot too  old 错误。不知biti能否给以解释。 [/B]


若查询开始的时候表中无任何事务,那,你应该是遭遇了 delay  block  cleanout !
这是比较少见的情况,当然若真有可能出现
那在你做这个查询之前对相关表做个analyze 分析  或者做个 全表扫描就好了

使用道具 举报

回复
论坛徽章:
0
20#
发表于 2003-12-11 18:28 | 只看该作者

Re: Re: Re: 因为

最初由 biti_rainy 发布
[B]

若查询开始的时候表中无任何事务,那,你应该是遭遇了 delay  block  cleanout !
这是比较少见的情况,当然若真有可能出现
那在你做这个查询之前对相关表做个analyze 分析  或者做个 全表扫描就好了 [/B]

Bity可不可以講得更明白一點?有關delay block cleanout!

使用道具 举报

回复

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

本版积分规则 发表回复

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