分布式數(shù)據(jù)庫中的事務(wù)管理和恢復(fù)
,*,單擊此處編輯母版標(biāo)題樣式,單擊此處編輯母版文本樣式,第二級,第三級,第四級,第五級,分布式事務(wù)概述,分布式事務(wù)的執(zhí)行與恢復(fù),兩階段提交協(xié)議,分布式數(shù)據(jù)庫中的數(shù)據(jù)更新,分布式事務(wù)增強(qiáng)數(shù)據(jù)庫一致性,本章主要內(nèi)容,分布式事務(wù)概述,分布式事務(wù)定義和特性,分布式事務(wù)的結(jié)構(gòu)和事務(wù)狀態(tài),分布式事務(wù)管理的問題和目標(biāo),分布式事務(wù)定義和特性,1.,分布式事務(wù)的定義,事務(wù),是為了實(shí)現(xiàn)特定的業(yè)務(wù)功能而訪問數(shù)據(jù)庫的一個(gè)最小的邏輯工作單位,它是一個(gè)操作序列。,分布式事務(wù),在分布式系統(tǒng)中,對分布在網(wǎng)絡(luò)中不同站點(diǎn)上數(shù)據(jù)庫存取操作的序列。,一個(gè)分布式事務(wù)即全局事務(wù),通常由一個(gè)主(父)事務(wù)和在不同站點(diǎn)上執(zhí)行的子事務(wù)(局部事務(wù))組成。,主事務(wù)負(fù)責(zé)事務(wù)的開始,提交和異常中止。,子事務(wù)完成對相應(yīng)站點(diǎn)上數(shù)據(jù)庫的訪問操作。,全局事務(wù)是訪問或更新多個(gè)站點(diǎn)上數(shù)據(jù)的事務(wù)。,局部事務(wù)是僅僅訪問或更新一個(gè)站點(diǎn)上數(shù)據(jù)的事務(wù)。,2,.分布式事務(wù)的特性:ACID,原子性(atomicity)指事務(wù)執(zhí)行時(shí)的不可分割性。這個(gè)特性確保了每個(gè)事務(wù)要么全部發(fā)生,要么全部不發(fā)生。,一致性(consistency)事務(wù)執(zhí)行的結(jié)果必須使數(shù)據(jù)庫從一個(gè)一致性狀態(tài)轉(zhuǎn)到另一個(gè)一致性狀態(tài)。,隔離性(isolaty)一個(gè)事務(wù)的執(zhí)行不被其他事務(wù)干擾。,持久性(durability)一個(gè)事務(wù)一旦提交,它對數(shù)據(jù)庫中數(shù)據(jù)的改變應(yīng)該是永久性的。無論系統(tǒng)發(fā)生任何故障,都不會丟失該事務(wù)的執(zhí)行結(jié)果。,應(yīng)用,分布式事務(wù)的結(jié)構(gòu),分布式事務(wù),分布式事務(wù),分布式事務(wù),子,事,務(wù),子,事,務(wù),子,事,務(wù),子,事,務(wù),子,事,務(wù),子,事,務(wù),分布式事務(wù)的一般結(jié)構(gòu)為:,Begin Transaction 原語:開始一個(gè)事務(wù),T1,T2,:子事務(wù)或操作序列,:,Tn,Commit 原語:事務(wù)成功完成的結(jié)束,RollBack 或Abort原語:事務(wù)失敗的結(jié)束,2.分布式數(shù)據(jù)庫中進(jìn)程的協(xié)作,(1)兩個(gè)概念,進(jìn)程:,是一個(gè)具有一定獨(dú)立功能的程序關(guān)于某個(gè)數(shù)據(jù)集合的一次運(yùn),行活動(dòng)。,它有兩個(gè)側(cè)面:,進(jìn)程說明:定義進(jìn)程的行為模式,包括數(shù)據(jù)和對數(shù)據(jù)的一組,操作,執(zhí)行這組操作,完成某一功能。,進(jìn)程執(zhí)行:按進(jìn)程說明中所定義的模式來啟動(dòng)這個(gè)進(jìn)程,執(zhí),行其中的那組操作。,事務(wù)代理(Agent):在分布式數(shù)據(jù)庫系統(tǒng)中,為了完成在不同站,點(diǎn)上的相應(yīng)功能,分布式應(yīng)用必須在這些站點(diǎn)中執(zhí)行若干進(jìn),程,這些進(jìn)程就稱為該應(yīng)用在那個(gè)站點(diǎn)上的“事務(wù)代理”。,(,2)進(jìn)程的協(xié)作,為了協(xié)調(diào)地執(zhí)行分布式應(yīng)用的全局操作,分駐于不同站點(diǎn)的諸事務(wù)代理必須進(jìn)行協(xié)調(diào)。為考慮事務(wù)的特性,把各站點(diǎn)上的諸代理組建成協(xié)作進(jìn)程來完成一個(gè)全局應(yīng)用,并作如下規(guī)定:,1)每一應(yīng)用均有一個(gè)負(fù)責(zé)啟動(dòng)整個(gè)事務(wù)的總代理或稱根代理,建立總代理的站點(diǎn)稱為源站點(diǎn);,2)只有總代理才能發(fā)出全局有效的事務(wù)開始,提交和撤銷原語;,3)只有總代理才能請求建立新的事務(wù)代理;,4)各站點(diǎn)上的子事務(wù)都執(zhí)行成功,總代理才能決定提交該事務(wù),否則總代理將決定撤銷該事務(wù)。,FUND_TRANSFER:,Read(terminal,$AMOUNT,$FROM_ACC,$TO_ACC);,Begin_Transaction;,Select AMOUNT into$FROM_AMOUNT from ACCOUNT,where ACCOUNT_NUMBER=$FROM_ACC;,if$FROM_AMOUNT-$AMOUNT0 then abort,else begin,Update ACCOUNT set AMOUNT=AMOUNT-$AMOUNT,where ACCOUNT_NUMBER=$FROM_ACC;,Update ACCOUNT set AMOUNT=AMOUNT-$AMOUNT,where ACCOUNT_NUMBER=$TO_ACC;,Commit,end,圖1全局級的FUND_TRANSFER事務(wù),ROOT_AGENT AGENT:,輸入:匯出金額和轉(zhuǎn)出/轉(zhuǎn)入賬號,事務(wù)開始:檢查轉(zhuǎn)出賬號中,是否又足夠的轉(zhuǎn)出資金,更新轉(zhuǎn)出賬號存款余額,創(chuàng)建代理Agent,向代理送信息:轉(zhuǎn)入帳號,金額,等待來自Agent的消息,成功,提交事務(wù):成功結(jié)束,否,撤銷事務(wù):失敗結(jié)束,接收來自根代理的消息,更新轉(zhuǎn)入賬號存款余額,發(fā)送執(zhí)行消息給根代理,(成功或失敗),ROOT-AGENT;,Read(terminal,$AMOUNT,$FROM_ACC,$TO_ACC);,Begin_transaction;,Select AMOUNT into$FROM_AMOUNT from ACCOUNT,where ACCOUNT_NUMBER=$FROM_ACCOUNT;,if$FROM_AMOUNT-$AMOUNT0 then abort,else begin,Update ACCOUNT set AMOUNT=AMOUNT-$AMOUNT,where ACCOUNT=$FROM_ACC;,Create AGENT;,SEND to AGENT($AMOUNT,$TO_ACC);,Commit,end,AGENT;,Receive from ROOT_AGENT($AMOUNT,$TO_ACC);,Update ACCOUNT set AMOUNT=AMOUNT+$AMOUNT,where ACCOUNT=$TO_ACC;,Send to ROOT_AGENT(SUCCESS/FALL),圖3兩個(gè)代理組成的FUND_TRANSFER事務(wù),分布式事務(wù)管理的問題和目標(biāo),分布式事務(wù)管理的問題,(,1,)處理數(shù)據(jù)項(xiàng)的多個(gè)副本,分布式事務(wù)管理負(fù)責(zé)保持同一數(shù)據(jù)的多個(gè)副本間的一致性。,(,2,)單個(gè)站點(diǎn)的故障,當(dāng)故障站點(diǎn)得到恢復(fù)時(shí),,DDBMS,協(xié)同該故障站點(diǎn)上的,DBMS,,必須在該站點(diǎn)與系統(tǒng)重新連接時(shí),使它的局部數(shù)據(jù)與其他站點(diǎn)同步。,(,3,)通信網(wǎng)絡(luò)的故障,系統(tǒng)必須有能力處理一個(gè)或多個(gè)連接站點(diǎn)的通信網(wǎng)絡(luò)故障。這個(gè)問題的一個(gè)極端情況是發(fā)生網(wǎng)絡(luò)分割。,(,4,)分布式提交,如果在提交一個(gè)分布式事務(wù)過程中至少有一個(gè)站點(diǎn)發(fā)生故障的話,那么這個(gè)分布式事務(wù)的提交將會產(chǎn)生問題。,2.,分布式事務(wù)管理的目標(biāo),事務(wù)管理的任務(wù)就是負(fù)責(zé)當(dāng)若干個(gè)事務(wù)并發(fā)執(zhí)行和事,務(wù)執(zhí)行發(fā)生錯(cuò)誤時(shí),使數(shù)據(jù)庫仍保持一致狀態(tài)。,例如:,某公司在銀行中有A,B兩個(gè)賬號,現(xiàn)在公司想從賬號A中取出一萬元,存入賬號B。,1、定義一個(gè)事務(wù),該事務(wù)包括兩個(gè)操作,第一個(gè)操作是從賬號A中減去一萬元,第二個(gè)操作是向賬號B中加入一萬元。,2、在事務(wù)開始時(shí),數(shù)據(jù)庫是處于一個(gè)一致性狀態(tài)。,3、在事務(wù)執(zhí)行時(shí),如果只做第一個(gè)操作則用戶邏輯上就會發(fā)生錯(cuò)誤,少了一萬元,這時(shí)數(shù)據(jù)庫就處于非一致性狀態(tài)。,4、當(dāng)我們接著做第二個(gè)操作,且成功提交后,數(shù)據(jù)庫又處在了一致性的狀態(tài)。,事務(wù)管理所追求的理想目標(biāo)是高執(zhí)行效率,高并行性,和高可靠性。這三大理想目標(biāo)往往不能兼得,因?yàn)樗麄冎?間密切相關(guān),而又矛盾??煽啃源胧剐氏陆?,而事,務(wù)運(yùn)行效率不僅取決于采用的策略,還與下列因素有關(guān):,(1)CPU和主存利用率,(2)控制報(bào)文,(3)相應(yīng)時(shí)間,(4)可用性,由此可見事務(wù)管理的目標(biāo)是:,(1)維護(hù)分布式事務(wù)的原子性,一致性,持久性和隔,離性。,(2)獲得最小的主存和CPU開銷,降低控制報(bào)文的傳,輸個(gè)數(shù)和加快分布式事務(wù)的響應(yīng)速度;,(3)獲得最大限度的系統(tǒng)可靠性和可用性。,分布式事務(wù)的執(zhí)行與恢復(fù),分布式事務(wù)管理的抽象模型,在分布式數(shù)據(jù)庫系統(tǒng)中,事務(wù)管理功能分成兩,個(gè)層次。,在每個(gè)站點(diǎn)上,類似于集中式數(shù)據(jù)庫系統(tǒng)中,的局部事務(wù)管理器(LTM)進(jìn)行局部事務(wù)的管理,,負(fù)責(zé)本站點(diǎn)事務(wù)的執(zhí)行,完成對本站點(diǎn)數(shù)據(jù)庫數(shù)據(jù),的訪問;,對整個(gè)分布式數(shù)據(jù)庫系統(tǒng),由駐留在各個(gè)站點(diǎn),上的分布式事務(wù)管理器(DTM)共同協(xié)作,實(shí)現(xiàn),對分布式事務(wù)的協(xié)調(diào)和管理。,圖5分布式事務(wù)管理的抽象模型,站,點(diǎn),1,站,點(diǎn),3,站,點(diǎn),2,本地事務(wù)管理器,LTM1,分布式事務(wù)管理器,DTM1,分布式事務(wù)管理器,DTM1,本地事務(wù)管理器,LTM2,分布式事務(wù)管理器,DTM1,本地事務(wù)管理器,LTM3,局部事務(wù)管理器LTM的結(jié)構(gòu)和功能在許多方面,與集中式系統(tǒng)類似,主要包括:,(1)保證本地事務(wù)的ACID特性;,(2)維護(hù)一個(gè)用于恢復(fù)的日志,代替DTM把,用于分布式事務(wù)執(zhí)行和恢復(fù)的信息記入日志。,(3)參與適當(dāng)?shù)牟l(fā)控制模式,以協(xié)調(diào)在該站,點(diǎn)上執(zhí)行的事務(wù)的并發(fā)執(zhí)行。接收并聽從本站點(diǎn)上,DTM代理發(fā)來的LOG原語,記入日志并執(zhí)行之。,LOG原語包括:local begin_transaction,local commit,local abort,分布式事務(wù)管理器DTM的功能包括:,(1)保證分布式事務(wù)的ACID特性,尤其是執(zhí)行分布,式事務(wù)的原子性,使每個(gè)站點(diǎn)的子事務(wù)都成功執(zhí)行,或都,不執(zhí)行。這是通過向各個(gè)站點(diǎn)發(fā),begin_transaction,commit或abort,create原語來實(shí)現(xiàn)的。,(2)負(fù)責(zé)協(xié)調(diào)由該站點(diǎn)發(fā)出的所有分布式事務(wù)的執(zhí),行。包括:啟動(dòng)分布式事務(wù)的執(zhí)行;將分布式事務(wù)分解為,一些子事務(wù),并將這些子事務(wù)分派到恰當(dāng)?shù)恼军c(diǎn)上去執(zhí),行;決定分布式事務(wù)的終止,即決定在該分布式事務(wù)中所,包含的所有站點(diǎn)上的子事務(wù)都撤銷或都提交。,(3)支持分布式事務(wù)的執(zhí)行位置透明性,這也是分,布式事務(wù)管理的最基本要求。分布式事務(wù)管理器根,據(jù)事務(wù)內(nèi)部的邏輯劃分為若干子事務(wù),按某種要求,分布到相應(yīng)站點(diǎn)上執(zhí)行,最后由源發(fā)站點(diǎn)提供事務(wù),的最終結(jié)果。它實(shí)現(xiàn)了對網(wǎng)絡(luò)上各站點(diǎn)的各個(gè)子事,務(wù)的監(jiān)督與管理,完成對整個(gè)分布式事務(wù)執(zhí)行過程,的調(diào)度和管理,從而保證分布式數(shù)據(jù)庫系統(tǒng)的高效,率。,分布式事務(wù)執(zhí)行的控制模型,分布式事務(wù)的控制模型是指協(xié)調(diào)分布式事務(wù)中,各成員DBMS執(zhí)行其子事務(wù)的通用方法;,控制分布式事務(wù)執(zhí)行的控制模型有:,1)主從模型,2)三角模型,3)層次控制模型,圖6 分布式執(zhí)行的主從控制模型,圖7 分布式執(zhí)行的三角控制模型,圖8 分布式執(zhí)行的層次控制模型,分布式數(shù)據(jù)庫系統(tǒng)中的故障,事務(wù)故障恢復(fù)的基本概念,研究數(shù)據(jù)庫系統(tǒng)中故障的恢復(fù),主要是指如何恢復(fù)因,故障而破壞的數(shù)據(jù)庫,使數(shù)據(jù)庫恢復(fù)到一個(gè)正確,一致的,狀態(tài)。恢復(fù)的基本原理是數(shù)據(jù)冗余,即利用冗余存儲在別,處的信息和數(shù)據(jù),部分或全部重建數(shù)據(jù)庫。,1.事務(wù)故障和事務(wù)恢復(fù),當(dāng)發(fā)生事務(wù)故障時(shí),保證事務(wù)原子性的措施稱為事務(wù),故障恢復(fù),簡稱為事務(wù)恢復(fù)。,事務(wù)恢復(fù)主要時(shí)依靠日志來實(shí)現(xiàn)的。,2.事務(wù)狀態(tài)及狀態(tài)轉(zhuǎn)移,為保證可恢復(fù)性,系統(tǒng)需要保存事務(wù)的起始,終止,,提交或撤銷的時(shí)間軌跡,事務(wù)恢復(fù)管理器還對下列操作進(jìn),行跟蹤記錄。,1)begin transaction:標(biāo)記事務(wù)開始執(zhí)行。,2)read或write:表示事務(wù)對某個(gè)數(shù)據(jù)項(xiàng)進(jìn)行讀或?qū)憽?3)End _transaction:表示事務(wù)的讀或?qū)懖僮饕呀?jīng)結(jié)束,并,標(biāo)記事務(wù)執(zhí)行結(jié)束。但是,在這一點(diǎn),需要檢查被該事務(wù),所作的改變是否永久寫入數(shù)據(jù)庫(已提交),或事務(wù)由于,違反可串行性或其他原因而被撤銷。,4)commit_transaction:表示事務(wù)已經(jīng)成功結(jié)束,因此事務(wù),執(zhí)行的任何改變可以安全提交到數(shù)據(jù)庫并且不會被撤銷。,5)rollback(或 abort):表示事務(wù)沒有成功結(jié)束,因此必須撤,銷事務(wù)對數(shù)據(jù)庫所作的任何改變或影響。,read/write,Begin end,transaction transaction commit,abort abort,active,Partially,committed,committed,failed,terminated,3.事務(wù)的提交點(diǎn),當(dāng)事務(wù)T所有的站點(diǎn)數(shù)據(jù)庫存取操作都已成功執(zhí)行,,并且所有操作對數(shù)據(jù)庫的影響都已記錄在日志中時(shí),該事,務(wù)T就到達(dá)提交點(diǎn)(committed point).提交點(diǎn)后事務(wù)就成為,已提交的事務(wù),并且假定其結(jié)果已永久記錄在數(shù)據(jù)庫中,(事務(wù)的永久性)。然后事務(wù)在日志中寫入提交記錄,commit,T.在系統(tǒng)發(fā)生故障時(shí),需要掃描日志,檢查那,些已在日志中寫入start_tran