任何想法 ORA-1555:快照太旧:回滚段号 我收到这个错误,似乎没有错。请说明可能出现的条件以及如何避免这种情况?
答案 0 :(得分:5)
频繁提交可能是ORA-1555的原因。 这一切都与读取一致性有关。您启动查询的时间oracle会记录之前的图像。因此,您的查询结果不会被同时发生的DML(您的大事务)所改变。前映像使用回滚段来获取在拍摄前映像之后更改的数据值。 通过提交您的大事务,您告诉oracle可以覆盖该事务的回滚数据。 如果您的查询需要覆盖的回滚段中的数据,则会出现此错误。您提交的越少,您所需的回滚数据被覆盖的可能性就越小。
ORA-1555的一个常见原因是一个完成这一过程的过程:表上的游标,循环记录,更新/删除同一个表并提交每个x记录。
正如guigui所说:让回滚段增长到包含整个交易
答案 1 :(得分:2)
我建议你阅读汤姆的回答: http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1441804355350
“当人们试图通常节省空间时,会发生ORA-1555。它们会很小 回滚段,如果需要可以增长(并将使用OPTIMAL收缩)。所以, 他们首先说10个左右的1meg回滚段。这些回滚段可能 如果我们让它们(在这个例子中),它们每个都会增长到100meg,但它们永远不会增长 你得到一笔大交易 “
答案 2 :(得分:2)
通常,当代码在游标内部提交时会发生这种情况。
例如
for x in (select ... from ...)
loop
do something
commit;
end loop;
有关其他示例,请参阅guigui42的AskTom链接表。