Oracle 10g:正確使用ora_rowscn檢測表行變化(即插入、更新、刪除)
對檢查表的記錄上次更新、修改或刪除時間的一些研究將我引向了稱為 ora_rowscn 的偽列。
首先,我這樣做:
select max(ora_rowscn) from tablename;
我記下了這個數字。然後我進行插入、更新和刪除,檢查每個前後的最大值。它似乎隨著每種類型的變化而增加。
如果您想知道我為什麼要這樣做,我們會在 C# Windows 服務中記憶體一個實體列表。該服務在兩個負載平衡的伺服器上執行,因此每個執行都有一個單獨的實例。當伺服器 A 發生更新時,伺服器 B 需要知道它。我想要做的是將 max(ora_rowscn) 記憶體到一個變數中。每次我們的應用程序插入、更新或刪除記錄時,它都會從數據庫中獲取一個新的最大值。如果值不同,那麼它顯然知道它需要從數據庫中獲取一個新列表。
所以我的實際問題是:是否有任何其他我應該注意的可能導致插入、更新或刪除不增加該值的記錄的障礙?
**編輯:**有人可以添加
ora_rowscn
為標籤嗎?
是否有任何其他我應該注意的可能導致插入、更新或刪除不增加此值的記錄的障礙?
ora_rowscn在行更改時始終遞增 - 但在預設配置中,它也可以在行未更改時遞增
如果您需要檢查整個表的 udates,一種方法是使用 auditing。另一方面,如果您只需要檢查您嘗試更新的行是否存在衝突,那麼
ora_rowscn
使用rowdependencies
是理想的。
每次獲取 max(ora_rowscn) 都需要進行全表掃描。每次刷新整個記憶體可能會更快。
聽起來您需要一種方法來通知其他服務發生了更改以及更改是什麼。您可以維護一個日誌表,其中有一列指示哪個系統需要使用更改。該列可以有兩個基於函式的索引,一個用於每個服務,以便每個索引只包含需要使用的條目。然後,當它們被消耗時,它們可以將值設為 NULL 以將其從索引中刪除。
或者您可以只使用 Oracle 的Advanced Queuing。