繁体   English   中英

找出上次更新AllData表列的时间

[英]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数据库不会立即填充这些视图。

因此,您必须自己制定一些解决方案。 从我的头顶上:

  1. 如a_horse_with_no_name所建议,请使用更改通知来监视对此表的更改,并使用上次更新的时间戳来更新其他表或字段。 就个人而言,我发现CQN有点令人困惑,所以我避免了这一点。 您也可以在触发器中执行此操作。
  2. 从表中使用MAX(DateLastMod) 根据表的大小以及您需要检查该表进行修改的次数,这可能对索引此列很有帮助。

解决方案1将序列化对表的更改,因此可能会对性能产生影响。

如果DateLastMod实际上存储为VARCHAR2 ,而不仅仅是以DD-Mon-YY格式显示,则应尽可能将其绝对更改为DATE 这将为数据添加时间成分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM