java - 查看 AllData 表列的上次更新时间
问题描述
我是 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以查看前一个日期是否更改。我还可以看到,我需要一个Date + Time才能使其在同一天进行多次更改。
那么查询是我发现需要使用什么还是有其他适合我的问题的东西?
解决方案
不,您不能all_tab_modifications
用于此目的。从文档中:
这些视图仅为具有 MONITORING 属性的表填充。它们旨在用于长时间的统计数据收集。出于性能原因,Oracle 数据库不会在实际修改发生时立即填充这些视图。
所以你必须推出自己的一些解决方案。在我的头顶上:
- 正如 a_horse_with_no_name 建议的那样,使用更改通知来监视此表的更改,并使用上次更新的时间戳更新其他一些表或字段。就个人而言,我觉得 CQN 有点令人困惑,所以我避免了它。您也可以在触发器中执行此操作。
MAX(DateLastMod)
从你的桌子上使用。根据表的大小以及您需要检查该表以进行修改的次数,为该列编制索引可能会有所帮助。
解决方案 #1 将序列化对您的表的更改,因此可能会对性能产生影响。
如果DateLastMod
实际上存储为 aVARCHAR2
而不仅仅是以 DD-Mon-YY 格式显示DATE
,如果可能,您绝对应该将其更改为 a 。这将为数据添加一个时间组件。
推荐阅读
- flyway - 如何使用 flyway 从 SQL Server 迁移到 PostgreSQL?
- microsoft-information-protection - MIP SDK 无法保护文件
- javascript - 如何在 Ajax 调用中包含用户 ID 对象
- stripe-payments - 条纹完全重定向方法更改当前显示站点域的后退按钮文本
- java - Maven - 如何在使用 openjpa 插件时只运行一次编译目标
- javascript - 如何使用 AngularFireAuth 初始化 firebaseui 小部件?
- c# - 读取多级 XML 文件
- python - nsubj 表示在 dep → head 路径之后的链中的第一个动词;SpaCy 中的 DependencyMatcher
- reactjs - 在 slatejs 编辑器中反序列化嵌套的 html
- html - 即使使用“box-sizing:border-box”,输入元素也比 div 容器宽