200块钱3小时上门二维码-400元3小时快餐,约附近学生50一次,51品茶快约

公司新闻

记一次生产数据库Oracle快照过旧解决的思路及方法

作者:admin 日期:2023-10-16 浏览:

记一次生产数据库Oracle快照过旧解决的思路及方法

因之前业务设计时很多接口都是在凌晨执行,所以凌晨undo都会急剧增加,而最近考虑到闪回问题,在增加undo_retention后接口报错快照过旧,这是什么问题呢?下面一起来看看吧~

ORA-01555 快照过旧 回退段号 10 (名称为 _SYSSMU10_3452551959$ ) 过小

ORA-06512 在 RFUSER.SPLIT_OTM_OM_NEW , line 343

ORA-06512 在 line 1

======= at System.Data.OracleClient.OracleConnection.CheckError(OciErrorHandle errorHandle, Int32 rc)

at System.Data.OracleClient.OracleCommand.Execute(OciStatementHandle statementHandle, CommandBehavior behavior, Boolean needRowid, OciRowidDescriptor& rowidDescriptor, ArrayList& resultParameterOrdinals)

at System.Data.OracleClient.OracleCommand.ExecuteNonQueryInternal(Boolean needRowid, OciRowidDescriptor& rowidDescriptor)

at System.Data.OracleClient.OracleCommand.ExecuteNonQuery()

at FSL.Business.SP_OtmShipmentDataInOut.RF_SQL_Handle_MoreThan.Start(Int32 ioID, String ConnectionName) in d \IT_SVN\SourceCode\RF系统\RF_ReConstruction\FSL.Business.SP_OtmShipmentDataInOut\RF_SQL_Handle_MoreThan.cs line 43

ORA-01555 快照过旧,是数据库中很常见的一个错误,比如当我们的事务需要使用undo来构建CR块的时候,而此时对应的undo已经不存在了,这个时候就会报ORA-01555的错误。

ORA-01555错误在Oracle 8i及之前的版本最多。从9i开始的undo自动管理,至现在的10g、11g中的undo auto tuning,使得ORA-01555的错误越来越少。但是这个错误,仍然不可避免。

无锡数据恢复

出现ORA-01555错误,通常有2种情况:

(1)、SQL语句执行时间太长,或者undo表空间过小,或者事务量过大,或者过于频繁的提交,导致执行SQL过程中进行一致性读时,SQL执行后修改的前镜像(既UNDO数据)在UNDO表空间中已经被覆盖,不能构造一致性读块(CR blocks)。这种情况最多。

(2)、SQL语句执行过程中,访问到的块,在进行延迟块清除时,不能确定该块的事务提交时间与SQL执行开始时间的先后次序。这种情况很少。

针对第一种情况解决办法

(1)、增加UNDO表空间大??;

(2)、增加undo_retention时间,默认只有15分钟;

(3)、优化出错的SQL,减少查询的时间,首选方法;

(4)、避免频繁的提交

这里在增加undo表空间后问题得到解决。

后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注一下~

  电话咨询