今天同事告诉我,代码报错 ORA-01555: snapshot too old,确定是数据库的问题
由于查询时间较长,快照在该查询执行过程中被修改了(清除或者覆盖)。
可以通过v$undostat视图的maxquerylen列查询在过去的一段时间内,最长的查询执行的时间(以秒为单位)。UNDO_RETENTION参数中的时间设置应该至少与maxquerylen列中给出
的时间一样长。Oracle提供如下为新数据库设置撤销保留时间间隔的指导:
1、 OLTP系统:15分钟
2、 混合: 1小时
3、 DSS系统:3小时
4、 闪回查询:24小时
查看undo_retention参数语句
show parameter undo_retention;
修改数据库设置撤销保留时间间隔为1小时
ALTER SYSTEM SET undo_retention=3600 SCOPE=BOTH;
例文:http://blog.csdn.net/jamesxsy/article/details/7701302
可以通过加大undo表空间和加大undo的retention来解决,另外在写代码的时候尽量批次提交。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28686045/viewspace-1436522/
,如需转载,请注明出处,否则将追究法律责任。