[英]Find out when AllData table column's was updated the last time
我是Oracle SQL的新手(最常与MS SQL,MySQL接触),我试图弄清楚如何每秒或每两秒检查一次数据库,看看表列中的内容是否已更改。
我目前有这种类型的架构( AllData ):
ID | Script_name | Tester | DateLastMod | Tools
-------------------------------------------------
1 | Script_1 | Bob | 10-FEB-19 | Web
2 | Script_2 | Bob | 10-FEB-19 | Web
3 | Script_3 | David | 10-FEB-19 | Desktop
4 | Script_4 | Bill | 10-FEB-19 | Web
我发现与此查询类似的东西:
SELECT * FROM all_tab_modifications WHERE TABLE_OWNER = 'ME';
Table_owner | Table_name | Inserts | Updates | Deletes | TimeStamp
------------------------------------------------------------------
Me | Alldata | null | 6 | 0 | 11-Feb-19
但是我不确定那是否是用于查看自上次检查以来是否已更改Alldata表列的正确查询?
大致的流程为:
用户将ID 3- > Tester更改为Sean (日期为2月11日)。
ID | Script_name | Tester | DateLastMod | Tools ------------------------------------------------- 1 | Script_1 | Bob | 10-FEB-19 | Web 2 | Script_2 | Bob | 10-FEB-19 | Web 3 | Script_3 | Sean | 11-FEB-19 | Desktop 4 | Script_4 | Bill | 10-FEB-19 | Web
(检查更新)
找到更新的表数据,以便刷新jTable中的数据。
(检查更新)
ID | Script_name | Tester | DateLastMod | Tools ------------------------------------------------- 1 | Script_1 | Bob | 10-FEB-19 | Web 2 | Script_2 | Bob | 10-FEB-19 | Web 3 | Script_3 | Sean | 11-FEB-19 | Desktop 4 | Script_4 | Bill | 10-FEB-19 | Web
没变。
(检查更新)
ID | Script_name | Tester | DateLastMod | Tools ------------------------------------------------- 1 | Script_1 | Bob | 10-FEB-19 | Web 2 | Script_2 | Bob | 10-FEB-19 | Web 3 | Script_3 | Sean | 10-FEB-19 | Desktop 4 | Script_4 | Bill | 10-FEB-19 | Web
没变。
用户将ID 1- > Script_name更改为Script_11 (日期为2月11日)。
ID | Script_name | Tester | DateLastMod | Tools ------------------------------------------------- 1 | Script_11 | Bob | 11-FEB-19 | Web 2 | Script_2 | Bob | 10-FEB-19 | Web 3 | Script_3 | Sean | 11-FEB-19 | Desktop 4 | Script_4 | Bill | 10-FEB-19 | Web
(检查更新)
找到更新的表数据,以便刷新jTable中的数据。
(检查更新)
ID | Script_name | Tester | DateLastMod | Tools ------------------------------------------------- 1 | Script_11 | Bob | 11-FEB-19 | Web 2 | Script_2 | Bob | 10-FEB-19 | Web 3 | Script_3 | Sean | 11-FEB-19 | Desktop 4 | Script_4 | Bill | 10-FEB-19 | Web
没变。
等等等等...
因此,我需要检查的几乎就是DataLastMod ,以查看先前的日期是否更改。 我还可以看到,我需要一个“ 日期+时间” ,以使其在同一天对多个更改正确无误。
那么查询是我找到了需要使用的内容还是其他适合我的问题的内容?
不,您不能为此使用all_tab_modifications
。 从文档中 :
这些视图仅针对具有MONITORING属性的表填充。 它们旨在长时间收集统计信息。 出于性能原因,在实际修改发生时,Oracle数据库不会立即填充这些视图。
因此,您必须自己制定一些解决方案。 从我的头顶上:
MAX(DateLastMod)
。 根据表的大小以及您需要检查该表进行修改的次数,这可能对索引此列很有帮助。 解决方案1将序列化对表的更改,因此可能会对性能产生影响。
如果DateLastMod
实际上存储为VARCHAR2
,而不仅仅是以DD-Mon-YY格式显示,则应尽可能将其绝对更改为DATE
。 这将为数据添加时间成分。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.