Oracle-10g

Oracle 10g:正確使用ora_rowscn檢測表行變化(即插入、更新、刪除)

  • February 26, 2014

對檢查表的記錄上次更新、修改或刪除時間的一些研究將我引向了稱為 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

引用自:https://dba.stackexchange.com/questions/5061