我是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_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 ,以查看前一个日期是否更改。我还可以看到,我需要一个 Date + Time (日期+时间),以便在同一天对多个更改进行正确设置。
那么查询是我找到了需要使用的内容还是其他适合我的问题?
答案 0 :(得分:0)
否,您不能为此使用MAX(DateLastMod)
。来自documentation:
这些视图仅针对具有MONITORING的表填充 属性。它们旨在长期收集统计信息 一段的时间。出于性能原因,Oracle数据库不会 实际修改发生后,立即填充这些视图。
因此,您必须自己制定一些解决方案。在我的头顶上:
DateLastMod
。根据表的大小以及您需要检查该表以进行修改的次数,对这一列进行索引可能会有所帮助。解决方案1将序列化对表的更改,这样可能会对性能产生影响。
如果VARCHAR2
实际上存储为DATE
,而不仅仅是以DD-Mon-YY格式显示,则应尽可能将其更改为{{1}}。这将为数据添加一个时间分量。