`
hanyi366
  • 浏览: 290402 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

关于Oracle ORA-01555快照过旧的错误

 
阅读更多

关于Oracle ORA-01555快照过旧的错误

首先了解Oracle在什么情况下会产生ORA-01555错误:
 
假设有一张6000万行数据的testdb表,预计testdb全表扫描1次需要2个小时,参考过程如下:
1、在1点钟,用户A发出了select * from testdb;此时不管将来testdb怎么变化,正确的结果应该是用户A会看到在1点钟这个时刻的内容。
2、在130分,用户B执行了update命令,更新了testdb表中的第4100万行的这条记录,这时,用户A的全表扫描还没有到达第4100万条。毫无疑问,这个时候,第4100万行的这条记录是被写入了回滚段,假设是回滚段UNDOTS1,如果用户A的全表扫描到达了第4100万行,是应该会正确的从回滚段UNDOTS1中读取出1点钟时刻的内容的。
3、这时,用户B将他刚才做的操作提交了,但是这时,系统仍然可以给用户A提供正确的数据,因为那第4100万行记录的内容仍然还在回滚段UNDOTS1里,系统可以根据SCN到回滚段里找到正确的数据,但要注意到,这时记录在UNDOTS1里的第4100万行记录已经发生了重大的改变:就是第4100万行在回滚段UNDOTS1里的数据有可能随时被覆盖掉,因为这条记录已经被提交了!
4、由于用户A的查询时间漫长,而业务在一直不断的进行,UNDOTS1回滚段在被多个不同的transaction使用着,这个回滚段里的extent循环到了第4100万行数据所在的extent,由于这条记录已经被标记提交了,所以这个extent是可以被其他transaction覆盖掉的!
5、到了145分,用户A的查询终于到了第4100万行,而这时已经出现了第4条说的情况,需要到回滚段UNDOTS1去找数据,但是已经被覆盖掉了,这时就出现了ORA-01555错误。
          ↑
   以上此段非本人原创
 
 
 
原因分析:"报表"程序执行时间漫长,在程序查询的过程中其他用户对"报表"进行了更新,被更新的数据写入了回滚段当程序到回滚段找数据时,发现数据已经被覆盖掉,于是就出现了ORA-01555错误。另外"报表"程序执行效率不高也会造成ORA-01555错误。
解决办法:
1、扩大回滚段,因为回滚段是循环使用的,如果回滚段足够大,那么那些被提交的数据就能保存足够长的时间,使那些大事务完成一致性读取。之前EBS系统UNDO表空间为9GB,目前为10GB。见下图:
 
2、增加undo_retention时间,因为UNDO回滚段是循环使用,里面的数据可能随时被循环覆盖掉,如果设置undo_retention时间更长,那么在retention规定的时间内,任何其他事务都不能覆盖这些数据。目前EBS系统undo_retention10800(3个小时)。见下图:
 
 
3最重要的一点就是优化程序相关查询语句,减少查询语句的一致性读,降低读取不到回滚段数据的风险。所有的出错信息都会纪录到数据库日志alert_PROD.log文件中,下图红线部分是一条SQL查询词句,ORA-01555很有可能是这条语句造成,把这条语句提供给开发人员来分析和优化程序代码。
分享到:
评论

相关推荐

    [Oracle] 浅析令人抓狂的ORA-01555问题

    ORA-01555错误是Oracle数据库中一个常见的运行时异常,通常会让数据库管理员感到头疼。这个错误并不会对数据造成实际的丢失或破坏,但它会导致查询操作无法正常完成,从而影响应用程序的正常运行。本文将深入探讨ORA...

    oracle错误及解决方法

    - **ORA-01555:快照过旧**:考虑增大_undo表空间或者优化查询以减少回滚段的使用。 - **ORA-27037:无法打开文件**:检查文件路径、权限或磁盘空间。 - **ORA-01405:不能检索隐藏列**:确保没有尝试访问不应...

    ora 01555 snapshot too old

    具体来说,当Oracle尝试构建一个旧的事务快照时,如果发现回滚段中没有足够的信息来还原这个快照,就会触发ORA-01555错误。 ##### 解决方案 针对ORA-01555错误,可以采取以下几种策略来解决或预防: 1. **增加...

    oracle 回滚段

    Oracle 回滚段 Oracle 回滚段是 Oracle 数据库中的一种重要组件,它用于保存数据库修改前的数据,以便在需要时可以通过 ROLLBACK 命令恢复到修改前的数据。回滚段的设置对数据库的性能产生直接影响,特别是在更新...

    Oracle--errorCode.zip_oracle

    - **ORA-01555**:快照过旧,通常出现在长时间运行的事务或高并发环境中,表示事务无法读取先前版本的数据。 5. **错误处理**:在开发和运维过程中,我们可以通过异常处理机制来捕获并处理这些错误,比如在PL/SQL...

    Oracle错误代码及解决方法

    6. ORA-01555:快照过旧。这是因为回滚段空间不足,导致无法读取旧版本的数据。增加回滚段大小、优化事务管理或提升数据库实例的内存配置可缓解此问题。 7. ORA-29913:执行错误。当调用存储过程或函数时,如果参数...

    ORA错误分析及解决

    此错误通常表示“快照过旧”,意味着在回滚操作或查询过程中,所需的数据库快照不再可用。这可能是由于回滚段空间不足或归档日志切换过于频繁导致的。为了解决这个问题,我们可以采取以下策略: 1. 扩大回滚段大小...

    oracle 数据库错误一览表

    三、ORA-01555:快照过旧 这个错误表示在事务中尝试回滚到一个不再可用的数据库快照。这可能是因为回滚段空间不足或回滚段被重用。解决方法包括增加回滚段大小,优化事务,或使用更大的undo表空间。 四、ORA-02091...

    oracle10g服务器断电恢复

    - 导出数据时遇到 ora-01555 快照过旧问题,调整 undo 表空间大小和 undo_retention 参数无效。 - 创建新的 undo 表空间并删除旧的,但在删除时由于 ora-01548 错误,发现仍有基于旧 undo 表空间的活动事务。 5. ...

    Oracle数据库常见问题诊断-常见错误篇

    ORA-01555 错误 - 快照过旧 **问题描述:** - **ORA-01555:** 当查询返回的结果基于过期的快照版本时发生此错误。通常是由于事务回滚段 (UNDO) 太小或事务处理时间过长所导致。 **解决办法:** - 增大 UNDO 表...

    Oracle错误大全

    “ORA-00990”和“ORA-01652”涉及到表空间容量不足,而“ORA-01555”表示快照过旧,可能需要调整缓存或归档日志策略。 7. 性能和优化问题: “ORA-01555”、“ORA-01445”和“ORA-01578”都可能与查询性能有关,...

    oracle错误一览表

    10. **性能优化**:错误如ORA-01555(快照过旧)可能暗示需要优化查询或调整缓存设置以提高性能。 通过深入研究《Oracle错误一览表》文档,不仅可以解决当前遇到的问题,还能增强对Oracle数据库工作原理的理解,...

    oracle补丁

    2. ORA-01555:这个错误提示“快照过旧”,意味着在查询过程中无法找到足够的重做日志信息来恢复旧的数据版本。这可能是由于数据库回滚段空间不足,或者长时间运行的事务导致的。 在Oracle 10g到11g的迁移过程中,...

    Oracle错误码大全

    4. ORA-01555: 快照过旧 - 数据库回滚段空间不足,导致无法回滚事务。可以增大回滚段大小,或者优化事务以减少回滚数据的需求。 5. ORA-01652: 无法扩展临时表空间 - 执行大查询或操作时,临时表空间不足。增加临时...

    ORACLE-ERRORS.zip_oracle

    5. **ORA-01555**: 快照过旧。当试图访问的数据被修改或删除,而回滚段不足以回溯到之前的状态时,会出现这个错误。可能需要增大回滚段大小或优化事务处理。 6. **ORA-12154**: TNS:无法解析指定的连接标识符。这是...

    ORACLE错误大全

    ORA-01555(快照过旧)表示查询无法使用缓存的块,可能需要优化查询,增加共享池大小,或者调整回滚段设置。 8. **网络连接问题**: ORA-12154(无法解析服务名)或ORA-12541(无监听程序)等错误通常与网络配置...

    Oracle常见问题的错误码大全

    “ORA-01555”(快照过旧),表示读一致性问题,可能需要调整事务隔离级别或者增加回滚段大小;“ORA-27101”(共享内存区域未找到),这可能是系统资源不足或配置问题。 6. 日志和跟踪文件:Oracle数据库的alert....

    Ora92ErrMsg.zip_oracle

    除此之外,Oracle还有一系列其他错误码,如"ORA-01555"(快照过旧),可能是因为回滚段空间不足导致的,需要增大回滚段或者调整事务管理策略;"ORA-02091"(事务被中断)可能是因为在一个嵌套的事务中,外部事务被...

    oracle error message oracle code error oracle返回码

    - ORA-01555: 快照过旧。这表明回滚段不足以支持当前操作,可能需要增大回滚段大小。 - ORA-22905: 不能从非索引的BLOB/CLOB访问。当你试图访问非索引的大型对象(BLOB或CLOB)时,可能会遇到这个问题。 - ORA-00600...

Global site tag (gtag.js) - Google Analytics