SQL - 我的表最后一次更改了什么时候?

时间:2015-03-05 14:24:52

标签: sql oracle

我想找到在Oracle数据库中对表(现在,将来我想在多个表中执行此操作)执行最后一次INSERT,UPDATE或DELETE语句的时间。 我创建了一个表,然后我更新了其中一行。现在我提出以下问题:

SELECT SCN_TO_TIMESTAMP(ora_rowscn) from test_table;

此查询返回每行的时间戳,并为每个行提供首次创建时间的时间。

但我更新的行与其他行的时间戳相同。为什么?不应该更新时间戳吗?

1 个答案:

答案 0 :(得分:0)

ORA_ROWSCN不是正确的解决方案。它在行级别上不一定可靠。而且,对于已删除的行,它根本不会有用。

如果您真的需要知道何时对表进行DML更改,您应该查看Oracle的审核功能。

另一种方法是使用触发器记录何时对表进行更改。因为您说您只关心最近更改的时间,所以您可以创建一个单列表来记录时间,并编写一个触发器,触发任何DML语句以维护它。如果您是在生产环境中执行此操作,或者甚至只是在多个会话可能正在修改表的情况下执行此操作,那么您需要考虑在进行并发更改时它应如何工作。您可以强制该表最多只有一行,但这将序列化对表的每个更改。您可以允许每个会话插入一个单独的行并在查询时获取最大值,但是您可能想要考虑不时清除旧行。