【问题标题】:Last Updated record with timestamp [duplicate]带有时间戳的上次更新记录 [重复]
【发布时间】:2017-05-12 10:21:21
【问题描述】:

我正在尝试使用以下查询获取表中所有记录的最后更新日期和时间。

SELECT SCN_TO_TIMESTAMP(ORA_ROWSCN),id FROM TABLE_NAME

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

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

ORA-06512:在“SYS.SCN_TO_TIMESTAMP”第 1 行

  1. 00000 - “指定的编号不是有效的系统更改编号”

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

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

谢谢

【问题讨论】:

  • 另外,最好有一个额外的列来跟踪数据更改。 ORA_ROWSCN 非常不可靠,不适用于旧数据(例如您的情况)。

标签: sql oracle


【解决方案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

【讨论】:

  • select min(SCN) min_scn from sys.smon_scn_time; 给我“ORA-00942:表或视图不存在”。这就是 Oracle 11g 上的 SQL Developer。
  • @mivk : 因为它在 SYS 模式中,所以你需要 dba 才能读取它(sys 或 system)
【解决方案2】:

SCN(最后一次 dml 操作的系统更改号)由 oracle 生成并在有限的时间内记住。您正在将旧 scn 转换为时间戳并引发错误。

ORA_ROWSCN 有两种行为。如果 tabe 是用"NOROWDEPENDENCIES" 创建的(默认)。 ORA_ROWSCN 返回 oracle 数据块的 scn 号。

如果 tabe 是用"ROWDEPENDENCIES" 创建的。 ORA_ROWSCN 返回行的 scn 编号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-26
    • 1970-01-01
    • 2010-09-18
    相关资源
    最近更新 更多