首页 > 解决方案 > 从 SCN_TO_TIMESTAMP(ORA_ROWSCN) 中提取日期

问题描述

我有一个问题,我应该为每一行提取行创建日期并成为大型报告的一部分。使用 SCN_TO_TIMESTAMP(ORA_ROWSCN) 我可以查看记录创建日期,但我无法转换、提取该数据并在其他地方使用它。我收到一条错误消息,上面写着“ORA-08181: specified number is not a valid system change number

ORA-06512: at "SYS.SCN_TO_TIMESTAMP", line 1"

我写的查询如下:

*insert into MEMBER_CREATION_DATE(NATIONAL_ID,CHECKNO,CREATION_DATE)
select NATIONAL_ID,CHECKNO,trunc(scn_to_timestamp(ora_rowscn)) from MEMBER*

标签: sqloracle

解决方案


你的线索是ORA-08181: specified number is not a valid system change number

这意味着SCN_TO_TIMESTAMP无法获得,ORA_ROWSCN因为记录不再是UNDO数据的一部分。与该SCN_TO_TIMESTAMP系统更改编号关联的时间戳太旧,因此您会收到错误消息。

您可以通过以下查询检查数据库中最旧的可用SCN号码:

select min(SCN) min_scn from sys.smon_scn_time;

正如甲骨文所说:

SCN生成时的时间戳和时间戳之间的关联会SCN被数据库记住一段有限的时间。如果数据库在自动撤消管理模式下运行,此期限是自动调整的撤消保留期的最大值,以及数据库中所有闪回存档的保留时间,但不少于 120 小时。仅当数据库打开时,关联才会过时。如果SCN为参数指定的 toSCN_TO_TIMESTAMP太旧,则返回错误。


推荐阅读