【发布时间】:2020-10-29 03:28:01
【问题描述】:
我的数据库中有两个表,我正在尝试使用 Oracle 12DB 中的“SCN_TO_TIMESTAMP(MAX(ora_rowscn))”和“dba_tab_modifications”获取最后一个 DML(插入、更新或删除时间戳)。
以下是两个表的信息:
Table Name | Create Date | Last DML | SCN_TO_TIMESTAMP(MAX(ora_rowscn))
| |(as given from user)|
-----------+-------------+--------------------+-----------------------------------
Table1 | 25 SEP 2017 | 13 OCT 2020 |ORA-08181: specified number is not a valid system change number
| | |ORA-06512: at "SYS.SCN_TO_TIMESTAMP"
Table2 | 30 JAN 2017 | 29 OCT 2020
结果如下:
Table Name | SCN_TO_TIMESTAMP(MAX(ora_rowscn)) |dba/all_tab_modifications
-----------+--------------------------------------+-------------------------
Table1 |ORA-08181: specified number is not a | NULL (0 row returned)
| valid system change number |
|ORA-06512: at "SYS.SCN_TO_TIMESTAMP" |
Table2 |29/OCT/20 03:40:15.000000000 AM | 29/OCT/20 03:50:52
dba/all_tab_modifications 的最早日期:
02/OCT/18 22:00:02
谁能告诉我为什么我无法获得 Table1 的最后一个 DML,但我能够获得 Table2 的最后一个 DML?
我正在考虑按照其他博客的建议执行“DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO”。但是,我的问题是,如果第二个表的 DML 已经被监控,它应该已经被刷新了。
两个表都在同一用户 ID 下的不同存储过程中更新。
谁能分享我如何获得第一张桌子的最后一个 DML 的想法?提前致谢!
【问题讨论】: