2008-10-08 48 views

回答

1

我強烈懷疑SYSDATE也是OS鏈接的。非常注意你需要使用它的原因。如果有任何實現增量跟蹤事件的邏輯(例如,您正在執行增量導出),並且您必須確保沒有項目被遺漏以及沒有重複項,那麼基於順序標識而不是SYSDATE進行追蹤。

事實上,即使對於非集羣系統也是如此,因爲SYSDATE有時可能會發生變化(節省時間,系統管理員錯誤...)。

1

使用NTP跨所有服務器(Oracle和其他)同步時間並確保不會發生。不一致的系統時鐘是災難的祕訣。

我會猜想 sysdate將返回您描述的情況下不一致的結果。

+0

謝謝德米特里,我想知道這個人是否對你的猜測有更強烈的意見呢? – 2008-10-10 21:33:11

0

我花了一點時間尋找答案,但找不到一個,但是,鑑於sysdate只是從操作系統返回日期/時間,我懷疑dmitriy是正確的。

2

SYSDATE與節點OS相關;如果在集羣中保證正確,那麼每次調用SYSDATE時節點都必須同步。 在集羣環境中,有序的序列非常昂貴;如果可能,最好避免。 有序序列將保證您的唯一性和順序 - 但是,如果在從序列中選擇並且在提交事務之前處理失敗,您仍然可以獲得空位。

我們用了幾個解決方法:

  1. 一般而言,序列設置爲 無序與大容量高速緩存 (25,000),以減少跨集羣 通信。
  2. 使用NTP時間同步 節點(它們仍然可以 不正確,+/- 納秒,所以你 不能依靠這一點)
  3. 對於審計風格的日誌中,我們使用SYSTIMESTAMP (時間戳(6) )作爲唯一 標識 - 與事實 ,有可能生活(雖然 可能性極小),該日誌 可能出現亂序(這是 也有可能與正常 處理,取決於當 承諾發生在)
  4. 當需要有序 序列,並有可能 是空白 - 用一個有序序列 (儘量避免在羣集 環境「緩存」沒有幫助)

  5. 凡有序序列是 要求 - 但不能有差距 - 我們有我們自己的序列表,鎖定記錄,獲取數字並保持記錄鎖定,直到用戶提交 ;這將導致 其他人試圖獲得相同的 序列,直到用戶的 事務完全提交 - 儘可能避免這樣做。