Oracle 讀取一致性

原文地址:Managing Read Consistency
oracle版本:11g r1
 
Oracle分佈式數據庫中的一個重要限制就是讀取一致性。問題產生的原因是因爲每個系統都有自己的SCN,SCN可以當作數據庫的內部時間戳。Oracle數據庫服務通過SCN來明確查詢數據的版本號。
 
分佈式事務中的SCN在三種情況進行同步:1、每個SQL語句執行結束時;2、每個事務的開始時;3、每個食物結束時。節點間如果有大量通信尤其是分佈式更新操作,這個同步的動作會非常頻繁。儘管有這樣那樣的問題,在分佈式系統中實際上沒有任何方式能保證SCN的絕對同步:總會存在這樣的情況,一個節點持有的SCN是另外一個節點之前的SCN。
 
因爲SCN獲取機制,你可以查詢一個略微舊的快照數據,因此無法立刻看到遠程數據庫的最新變化。根據讀取一致性,查詢可以得到一致並且舊的數據。注意,查詢所得到的數據是基於舊的SCN,因此如果本地執行更新事務並更新遠程節點的兩個表後,下次訪問這兩張表時會得到更新前的數據。
 
SCN獲取機制的一個結果就是2個連續的 select 語句能夠得到不同的數據,甚至在2個語句之間沒有DML執行。例如,你執行更新語句然後向遠程數據庫提交該更新。當你用 select 語句查詢視圖(基於該遠程表),視圖不回顯示更新的列。下一次執行 select 語句時,這個更新出現。
 
你可以使用下列條件來確定在查詢前兩個機器的SCN是同步的:
 

  • 因爲SCN是在遠程查詢後完成同步,會在每個遠程查詢之前都有一個虛擬的遠程查詢,例如, select * from dual@remote 。
  • 因爲SCN會在每個遠程事務的開始、提交、回滾當前事務時進行同步,在遠程查詢之前。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章