Oracle

多伺服器 Oracle RAC 環境中的 SYSTIMESTAMP 來自哪裡?

  • July 9, 2018

多伺服器 Oracle RAC 環境中的 SYSTIMESTAMP 來自哪裡?

我希望 SYSTIMESTAMP 來自一個公共位置(主節點?),而不是目前為請求提供服務的伺服器。

附加細節:

我們使用時間戳來確保日誌表中的條目是按順序記錄的。比如說,我們的 RAC 中有兩個節點,它們的時間間隔為 1 秒。我們的應用伺服器在 0.03 秒內插入兩個日誌條目。第一個插入由 Node1 提供服務,第二個由 Node2 提供服務。如果兩個節點之間存在一秒的差異,時間戳可能會顯示日誌條目以錯誤的順序出現!(我只會使用一個序列,但是出於性能原因我們的序列被記憶體了……)

高達 11g 我知道 Oracle 使用本地作業系統時間作為 RAC 環境中的系統時間,而且我從未聽說它發生了變化,所以我很樂意說它仍然存在。

您通常使用 NTP 或其他解決方案將所有伺服器同步在一起,以確保時間同步。通常,如果您的伺服器本地時間不同步甚至 30 秒左右,您往往會看到其他問題,例如 Kerberos 身份驗證問題,因此它們之間不太可能相距甚遠。

如果您的時間戳的解析度必須以毫秒為精度,那麼假設使用 NTP 可以解決問題,我不會太舒服;您可能必須非常頻繁地同步,即使這樣,網路延遲等也可能是一個問題。

由於您說由於性能原因正在記憶體 Oracle 序列,這通常是正確的(並將記憶體大小增加到比預設值 20 大得多),您可以做的只是確定插入順序的序列是定義那些序列為NOCACHE ORDER. 是的,這將需要額外的鎖,但這將保證你想要什麼;可能無法保證保持伺服器節點時間同步。

創建序列文件

如果您使用 Oracle Real Application Clusters,則 ORDER 僅用於保證有序生成。

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