分布式數據庫事務
在分布式數據庫環境中,一個數據庫事務可以更新多個場地上的數據,這種數據庫事務稱為分布式事務。 |
|
分布式事務必須滿足傳統事務的特性,即原子性,一致性,分離性和持久性。但是分布式事務處理過程中,某些場地(Server)可能發生故障,或 者由于網絡發生故障而無法訪問到某些場地。為了防止分布式系統部分失敗時產生數據的不一致性。在分布式事務的控制中采用了兩階段提交協議(Two- Phase Commit Protocol)。即事務的提交分為兩個階段: ● 兩階段提交在應用程序向協調者發出一個提交命令時被啟動。這時提交進入第一階段,即預提交階段。在這一階段中: (1) 協調者準備局部(即在本地)提交并在日志中寫入"預提交"日志項,并包含有該事務的所有參與者的名字。 (2) 協調者詢問參與者能否提交該事務。一個參與者可能由于多種原因不能提交。例如,該Server提供的約束條件(Constraints)的延遲檢查不符合限制條件時,不能提交;參與者本身的Server進程或硬件發生故障,不能提交;或者協調者訪問不到某參與者(網絡故障),這時協調者都認為是收到了一個 否定的回答。 (3) 如果參與者能夠提交,則在其本身的日志中寫入"準備提交"日志項,該日志項立即寫入硬盤,然后給協調者發回一?quot;已準備好提交"的回答。 (4) 協調者等待所有參與者的回答,如果有參與者發回否定的回答,則協調者撤消該事務并給所有參與者發出一個"撤消該事務"的消息,結束該分布式事務,撤消該事務的所有影響。 ● 如果所有的參與者都送回"已準備好提交"的消息,則該事務的提交進入第二階段,即決策后提交階段。在這一階段中: (1) 協調者在日志中寫入"提交"日志項,并立即寫入硬盤。 (2) 協調者向參與者發出"提交該事務"的命令。各參與者接到該命令后,在各自的日志中寫入"提交"日志項,并立即寫入硬盤。然后送回"已提交"的消息,釋放該事務占用的資源。 (3) 當所有的參與者都送回"已提交"的消息后,協調者在日志中寫入"事務提交完成"日志項,釋放協調者占用的資源 。這樣,完成了該分布式事務的提交。 |