带有时间戳的上次更新记录

时间:2016-12-28 06:55:33

标签: sql oracle

我尝试使用以下查询获取表格中所有记录的上次更新日期和时间。

SELECT SCN_TO_TIMESTAMP(ORA_ROWSCN),id FROM TABLE_NAME

对于某些表格,其正确显示结果,但对于其他人,我收到了以下错误消息(具体来说,我使用HR Schema中的表格自动生成)

  

ORA-08181:指定的号码不是有效的系统更改号码

     

ORA-06512:at" SYS.SCN_TO_TIMESTAMP",第1行

     
      
  1. 00000 - "指定的号码不是有效的系统更改号码"
  2.         

    *原因:提供的scn超出了有效scn的范围。   *行动:使用有效的scn。

为什么我收到此错误消息?在运行查询之前,我为同一个表运行了几个插入和更新查询。

谢谢

2 个答案:

答案 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