簡體   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