数据库在用job执行 存储过程时出现  ORA-01555: 快照过旧: 回退段号 3280 (名称为 "_SYSSMU3P?? 这个错误,貌似是执行的太慢导致的结果,这个应该怎么解决??谢谢

解决方案 »

  1.   

    啊。这个得修改数据库参数了
    应该是这个参数undo_retention.
    show parameter undo_retention
    看看它的值是多少?一般来说是900,单位是秒
    这个900的意思是,执行的sql在undo块里保留的时间。
    如果你的sql执行时间太长,就不够用了。
    就快照过旧了。
      

  2.   

    你的undo表空间不够用,增大UNDO表空间大小
      

  3.   


    1. 提问之前先google。
    2. 
    Oracle ORA-01555 快照过旧 说明
    http://blog.csdn.net/tianlesoftware/article/details/4745898
      

  4.   

    1.你的事务太大,执行时间太长
    2.UNDO太小,但这个数据说设成物理内存大小左右就行了,之前官方人员非官方推荐是1/3,但显然不够。
      但这个如果太大了,大事务未提交被kill后,将来是会滚死人的。
    3.undo_retention太短,我的业务库是900,仓库是10800
      

  5.   

    优化sql加快查询速度出现这个提示的原因是你想访问的某些数据从你执行查询开始后到现在被修改多次导致oracle找不到它最原始的状态
      

  6.   

    原因:
    SQL语句执行时间太长,或者UNDO表空间过小,或者事务量过大,或者过于频繁的提交,导致执行SQL过程中进行一致性读时,SQL执行后修改的前镜像(即UNDO数据)在UNDO表空间中已经被覆盖,不能构造一致性读块(CR blocks)。解决:
    (1)增加UNDO表空间大小
    (2)增加undo_retention 时间,默认只有15分钟
    (3)优化出错的SQL,减少查询的时间,首选方法
    (4)避免频繁的提交-- 引自tianlesoftware博文
      

  7.   

    本来回滚段的处理 oracle 9i以后就是默认 自动管理了。你这里可能是回滚表空间不够大,同时进行大的事务导致报错。