我尝试使用以下查询获取表格中所有记录的上次更新日期和时间。
SELECT SCN_TO_TIMESTAMP(ORA_ROWSCN),id FROM TABLE_NAME
对于某些表格,其正确显示结果,但对于其他人,我收到了以下错误消息(具体来说,我使用HR Schema中的表格自动生成)
ORA-08181:指定的号码不是有效的系统更改号码
ORA-06512:at" SYS.SCN_TO_TIMESTAMP",第1行
- 00000 - "指定的号码不是有效的系统更改号码"
醇>*原因:提供的scn超出了有效scn的范围。 *行动:使用有效的scn。
为什么我收到此错误消息?在运行查询之前,我为同一个表运行了几个插入和更新查询。
谢谢
答案 0 :(得分:1)
SCN
(最后一次dml操作的系统更改编号)由oracle生成并记住有限时间。您正在将旧scn转换为时间戳并引发错误。
ORA_ROWSCN
有两种行为。如果使用"NOROWDEPENDENCIES"
创建tabe(默认值)。 ORA_ROWSCN返回oracle数据块的scn编号。
如果使用"ROWDEPENDENCIES"
创建了tabe。 ORA_ROWSCN
返回行的scn编号。
答案 1 :(得分:1)
Oracle 10g和9i存在限制,您只能在5天内闪回。在Oracle 11g中没有限制。
您可以检查数据库中最早的可用系统更改编号(SCN)编号。
使用此查询
select min(SCN) min_scn from sys.smon_scn_time;
使用上述查询中的SCN NUMBER,您可以获得SCN的最后一个TIMESTAMP
SELECT SCN_TO_TIMESTAMP( scn number here) FROM dual;
如果您检查旧SCN而不是最低SCN,那么您将收到错误。
来源link