專利名稱:用于管理分布式事務內(nèi)跨越多個dbms的分布式保存點的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及分布式數(shù)據(jù)庫管理系統(tǒng)以及分布式數(shù)據(jù)庫管理系統(tǒng)內(nèi)保存點的管理。
背景技術(shù):
數(shù)據(jù)庫是收集的、記錄的以及相關(guān)的數(shù)據(jù)的倉庫,在數(shù)據(jù)元素的集中、數(shù)據(jù)的邏輯一致性、數(shù)據(jù)的內(nèi)在含義以及數(shù)據(jù)可以被使用方面具有其內(nèi)在價值。另外,由于數(shù)據(jù)庫組織、記錄和文件的可訪問性和數(shù)據(jù)的可動態(tài)更新性,數(shù)據(jù)庫的價值遠超過數(shù)據(jù)庫的各個元素之和的價值。例程性、重復性和一致性地將數(shù)據(jù)加到數(shù)據(jù)庫以及從數(shù)據(jù)庫恢復相關(guān)、及時、正確的數(shù)據(jù)的能力是其數(shù)據(jù)庫管理系統(tǒng)(DBMS)的功能。DBMS是一組計算機應用程序,它們創(chuàng)建數(shù)據(jù)庫組織(模式(schema)和元數(shù)據(jù)),并且存儲、檢索和更新數(shù)據(jù)庫中的文件。大型數(shù)據(jù)庫由具有保證數(shù)據(jù)及時性和有效性的機制的復雜數(shù)據(jù)庫管理系統(tǒng)(DBMS)來管理。DBMS的關(guān)鍵要求是數(shù)據(jù)正確且最新。
以及時方式收集和報告的正確數(shù)據(jù)對于多用戶數(shù)據(jù)庫是關(guān)鍵的。這就是并發(fā)控制的原因。并發(fā)控制確保試圖訪問和更新相同數(shù)據(jù)的若干用戶以受控的方式操作從而使更新結(jié)果正確,并且還保證數(shù)據(jù)讀取者看到當前提交數(shù)據(jù),而不是過時或未提交數(shù)據(jù)。典型的例子是分配航線預訂數(shù)據(jù)庫中的各航線席位。即使在很多預訂分配很多航班的很多席位的情況下,DBMS的并發(fā)控制功能也必須確保只有一個乘客分配給一個席位,以及相反,一個席位只分配給一個乘客。
DBMS訪問語句對數(shù)據(jù)庫文件的操作包括SELECT(選擇)、INSERT(插入)、UPDATE(更新)和DELETE(刪除)的“數(shù)據(jù)操縱”操作等。
1.SELECT操作從數(shù)據(jù)庫檢索數(shù)據(jù),并且將數(shù)據(jù)返回給請求者。
2.INSERT操作將數(shù)據(jù)輸入到數(shù)據(jù)庫中。
3.UPDATE操作改變現(xiàn)有記錄的值。
4.DELETE操作從數(shù)據(jù)庫中刪除記錄。
事務處理-事務的讀寫操作如插入、刪除和修改的文件修改操作需要“并發(fā)控制”。這些操作典型地跟在讀取操作之后,并且是寫入操作的一部分。典型地,讀取操作例如Read_Item(x)將名稱為“x”的數(shù)據(jù)庫項目讀入到名稱為“x”的終端用戶程序的程序值中。Write_Item(x)將終端用戶程序變量x的值寫入到數(shù)據(jù)庫項目x中。
事務處理-并發(fā)控制并發(fā)控制保證試圖大致同時修改(插入、更新、刪除)記錄的若干終端用戶以受控的方式操作,從而使存儲在數(shù)據(jù)庫中的數(shù)據(jù)正確。它還保證讀取者看到當前提交數(shù)據(jù),而不是過時數(shù)據(jù)或未提交數(shù)據(jù)。
事務處理和事務狀態(tài)在單數(shù)據(jù)庫中存在多種并發(fā)控制方式。作為示例,最常見的是“鎖定”,從而當一個用戶試圖修改、更新或刪除一個記錄時,沒有其它用戶可以訪問該記錄直到事務完成為止。事務可以通過事務所作修改的提交(提交)或事務所作修改的撤銷(事務回滾)來完成?;貪L事務的決策可以是應用程序決策,或者可以是系統(tǒng)決策(例如,響應阻止提交的情況)?!巴瓿伞笔欠翘囟ㄐg(shù)語,并且可以意味著在允許另一用戶訪問記錄之前寫入數(shù)據(jù)或者超出寫入數(shù)據(jù)以“提交”事務。并發(fā)控制導致(1)“提交”事務或者(2)中止事務并將數(shù)據(jù)庫“回滾”至先前狀態(tài)。
在并發(fā)控制和事務日志記錄的上下文中,將上面1和2項的模型分解成更小粒度級別或事務狀態(tài)。因此,事務可以分解成如下步驟或事務狀態(tài)1.BEGIN_TRANSACTION(開始事務),標志事務的開始。
2.SELECT或INSERT,表示作為數(shù)據(jù)庫事務一部分的對數(shù)據(jù)庫項目的讀取或?qū)懭氩僮鳌?br>
3.END_TRANSACTION(結(jié)束事務),表示SELECT或INSERT操作結(jié)束。因而這些命令標志事務執(zhí)行的結(jié)束。正是在這一點上DBMS判定是否可以“提交”即永久性應用修改。
4.COMMIT_TRANSACTION(提交事務),通知事務成功結(jié)束,事務將提交給數(shù)據(jù)庫并且不被撤消。
5.ROLLBACK(回滾)或ABORT(中止),通知事務不成功結(jié)束,并且必須回滾,也就是,對數(shù)據(jù)庫的修改必須撤消。
事務處理-系統(tǒng)日志當并發(fā)控制失敗和出現(xiàn)并行問題時,需要“回滾”失敗的事務。事務回滾使用系統(tǒng)日志來完成。系統(tǒng)日志記錄事務信息作為事務進度。典型地,該信息包括事務ID以及事務所執(zhí)行的每一次操作之前和之后的數(shù)據(jù)映象。通過COMMIT或ROLLBACK階段的事務進度也記錄在日志中。
日志記錄停止在“提交點”,這是訪問數(shù)據(jù)庫的所有操作已成功執(zhí)行并且所有事務操作對數(shù)據(jù)庫的影響已記錄在日志或日記帳(journal)中的時候。
事務處理-恢復和回滾如果事務不能提交,則數(shù)據(jù)庫必須回滾至失敗事務開始之前的先前狀態(tài)。這通過使用日記帳或日志條目來撤消數(shù)據(jù)庫中的某些修改并且重做數(shù)據(jù)庫中的其它修改來完成。
事務處理-恢復和回滾-保存點保存點如同事務內(nèi)的書簽。它們可以在事務的開始和結(jié)束之間由應用創(chuàng)建。
保存點允許通過應用請求撤消自從設置保存點以來對數(shù)據(jù)和模式所作的修改以“回滾至保存點”。保存點使一組非原子數(shù)據(jù)庫請求或原子事務的子事務表現(xiàn)得具有原子性,因為它們可以作為一個單元來撤消。如果在執(zhí)行期間發(fā)生應用錯誤,或者如果應用檢測到錯誤,則可以使用保存點撤消在開始保存點的時間與請求保存點回滾的時間之間的事務所作修改,并且返回到事務的先前點。
保存點類似于復合SQL語句,因為它允許將若干SQL語句分組成單個可執(zhí)行塊。在執(zhí)行塊的第一條語句之前,需要開始保存點塊的保存點請求。如果任何隨后語句以應用錯誤結(jié)束,則DBMS將只回滾該語句。這就提供比復合SQL語句更細的粒度,在復合SQL語句中,塊中任何處的單個錯誤使整塊以錯誤結(jié)束,并且回滾整個復合SQL語句。在語句保存點塊的結(jié)束,可以釋放保存點或回滾至保存點。
應用保存點對事務或工作單元中的SQL語句子集所執(zhí)行的工作提供控制。在應用內(nèi),可以設置保存點,然后釋放保存點或者回滾自從保存點以來所執(zhí)行的工作。也可以在單個事務內(nèi)使用多個保存點和嵌套保存點。下面代碼段演示在單個事務內(nèi)使用兩個保存點以控制應用的行為。
<pre listing-type="program-listing">INSERT INTO order..INSERT INTO order_item..lamp---設置事務中的第一保存點SAVEPOINT before_radio ON ROLLBACK RETAIN CURSORSINSERT INTO order_item..RadioINSERT INTO order_item..Power CordPseudo-SQLIF SQLSTATE=“No Power Cord”ROLLBACK TO SAVEPOINT before_radioRELEASE SAVEPOINT before_radio--設置事務中的第二保存點SAVEPOINT before_checkout ON ROLLBACK RETAINCURSORSINSERT INTO order..ApprovalPseudo-SQL<!-- SIPO <DP n="4"> --><dp n="d4"/>IF SQLSTATE=“No approvarROLLBACK TO SAVEPOINT before checkout--提交事務,這將釋放保存點COMMIT</pre>在該代碼段中,第一保存點強制兩個數(shù)據(jù)對象之間的相關(guān)性,而本質(zhì)上,這兩個對象本身之間并沒有相關(guān)性。不能使用引用完整性來描述上面收音機和電源線之間的關(guān)系,因為一個可以在不存在另一個的情況下存在。然而,銷售商不想在不帶電源線的情況下將收音機發(fā)貨給顧客。但是,銷售商也不想由于收音機沒有電源線而通過回滾整個事務來取消燈的訂單。應用保存點提供完成該訂單所需的粒度控制。
保存點比使用多個COMMIT和ROLLBACK語句提供更好的性能和更清晰的應用設計。當發(fā)出COMMIT命令時,DBMS必須做一些額外工作來提交當前事務并且開始新事務。保存點允許在不增加多個COMMIT語句的開銷的情況下將事務分解成較小的單元或步驟。下面代碼段演示通過使用多個事務而不是保存點所引起的性能惡化<pre listing-type="program-listing">INSERT INTO order..INSERT INTO order_item..lamp--提交當前事務,開始新事務COMMITINSERT INTO order_item..RadioINSERT INTO order_item..Power CordPseudo-SQLIF SQLSTATE=“No Power Cord”--回滾當前事務,開始新事務ROLLBACKELSE--提交當前事務,開始新事務COMMIT<!-- SIPO <DP n="5"> --><dp n="d5"/>INSERTINTO order..ApprovalPseudo-SQLIF SQLSTATE=“No approval”--回滾當前事務,開始新事務ROLLBACKELSE--提交當前事務,開始新事務COMMIT</pre>多個提交點的另一個缺點是對象可能已被提交因此在它被完全完成之前可見于其它應用。在例子2中,在增加完所有項目之前,并且更糟的是在它被認可之前,訂單可被其它用戶獲得。使用應用保存點將避免這種‘臟(dirty)數(shù)據(jù)’暴露,同時對操作提供粒度控制。
比較應用保存點與復合SQL塊,保存點比復合SQL塊提供如下優(yōu)點事務控制增強;鎖定競爭較少;以及與應用邏輯的集成改善。
復合SQL塊可以是原子的(ATOMIC)或非原子的。如果原子復合SQL塊內(nèi)的語句失敗,則回滾整個復合SQL塊。如果非原子復合SQL塊內(nèi)的語句失敗,則包括整個復合SQL塊的事務提交或回滾由應用控制。比較起來,如果保存點范圍內(nèi)的語句失敗,則應用可以回滾保存點范圍內(nèi)的所有語句,但是提交保存點范圍外的語句所執(zhí)行的工作。該選項在第一代碼段中示出,如果回滾保存點工作,則提交保存點之前的兩條INSERT語句的工作??蛇x地,應用可以提交事務中的所有語句包括保存點范圍內(nèi)的語句所執(zhí)行的工作。
當用戶發(fā)出復合SQL塊時,DBMS如IBM DB2關(guān)系數(shù)據(jù)庫管理系統(tǒng)同時獲取整個復合SQL塊語句所需的鎖定。當用戶設置應用保存點時,DBMS在發(fā)出保存點范圍內(nèi)的各語句時獲取鎖定。保存點的鎖定行為可以導致比復合SQL塊顯著少的鎖定競爭,從而除非應用要求由復合SQL語句執(zhí)行的鎖定,否則最好使用保存點。
復合SQL塊作為單條語句執(zhí)行完整的一組語句。應用不能使用控制結(jié)構(gòu)或函數(shù)來將語句加到復合SQL塊。比較起來,當設置應用保存點時,應用可以通過控制結(jié)構(gòu)如while循環(huán)或使用動態(tài)SQL語句調(diào)用其它應用函數(shù)或方法來發(fā)出保存點范圍內(nèi)的SQL語句。應用保存點允許用戶自由地以直觀方式將SQL語句與應用邏輯進行集成。例如,在下面代碼段中,應用設置保存點并且在保存點范圍內(nèi)發(fā)出兩條INSERT語句。該應用使用當真時調(diào)用add_batteries()函數(shù)的IF語句。add_batteries()發(fā)出在本上下文中包括在保存點范圍內(nèi)的一條SQL語句。最后,應用回滾在保存點內(nèi)所執(zhí)行的工作(包括由add_batteries()函數(shù)發(fā)出的SQL語句)或者提交在整個事務中所執(zhí)行的工作<pre listing-type="program-listing">Void add_batteries(){--由下面語句執(zhí)行的工作由main()中設置的保存點控制INSERT INTO order_item..Batteries}Void main(int argc,char[]*argV){INSERT INTO order..INSERT INTO order_item..lamp--設置事務中的第一保存點SAVEPOINT before_radio ON ROLLBACK RETAIN CURSORSINSERT INTO order_item..RadioINSERT INTO order_item..Power CordIf(strcmp(Radio.power_source(),“AC/DC”)){add_batteries();}Pseudo-SQLIF SQLSTATE=“No Power Cord”ROLLBACK TO SAVEPOINT before_radio<!-- SIPO <DP n="7"> --><dp n="d7"/>COMMIT}</pre>因此,即使在原子過程(atomic process)內(nèi),保存點也提供較細的粒度(granularity)。
分布式數(shù)據(jù)庫分布式數(shù)據(jù)庫日益變得重要。這是受到如現(xiàn)代企業(yè)的分布式特性、多個服務器的增大可靠性和可維護性、跨全球或分布式企業(yè)的數(shù)據(jù)共享以及當大型數(shù)據(jù)庫分布在具有局部處理本地事務的能力的多個場地上時性能改善的諸多因素的激勵。然而,支持多個交互DBMS和分布式數(shù)據(jù)庫的多個服務器的分散要求數(shù)據(jù)網(wǎng)絡化、數(shù)據(jù)分布和復制管理功能、跨越多個服務器的查詢執(zhí)行策略以及事務和查詢、跨越多個服務器的一致性策略以及從局部擾亂和通信故障恢復的能力。
“分布式事務”是影響分布式數(shù)據(jù)庫DBMS的多個DBMS中的記錄和/或文件的事務。
分布式數(shù)據(jù)庫-數(shù)據(jù)分片分布式數(shù)據(jù)庫的另一方面是數(shù)據(jù)分片。數(shù)據(jù)分片存在三種策略將一些元組存儲在一些服務器中,并且將其它元組存儲在其它服務器中(水平分片);將一些屬性存儲在一些服務器中,并且將其它屬性存儲在其它服務器中(垂直分片);以及將一些元組的一些屬性存儲在一個服務器中,將相同元組的其它屬性存儲在另一個服務器中,將其它元組的一些屬性存儲在與前面服務器均不同的另一個服務器中,并且將所述其它元組的其它屬性存儲在與前面服務器均不同的另一個服務器中(混合型分片)。片斷在定義所有片斷的所有屬性的分片模式和將片斷映射到場地的分配模式中進行映射。
分布式數(shù)據(jù)庫-分布式數(shù)據(jù)庫中的并發(fā)控制和恢復可以預料到,不管節(jié)點之間的復制度,單個平臺上的多個數(shù)據(jù)庫和具有多個服務器的分布式數(shù)據(jù)庫具有復雜的并發(fā)問題。DBMS的并發(fā)控制系統(tǒng)必須保持多個數(shù)據(jù)庫條目之間的并發(fā)性。它必須處理各個場地故障以及通信網(wǎng)絡故障。并且,它必須處理訪問存儲在多個場地上的數(shù)據(jù)庫片斷和復制品的提交過程,其中,一些場地或通信鏈接在提交過程期間可能失敗。各種策略用來克服分布式多個數(shù)據(jù)庫系統(tǒng)中的提交失敗,包括主場地法、主副本法和投票表決法。
分布式數(shù)據(jù)庫-分布式數(shù)據(jù)庫中的保存點和恢復Coyle等人的美國專利5,630,124,“System and Method ForAssuring Atomicity Of Distributed Update Requests In A ParallelDatabase(用于在并行數(shù)據(jù)庫中保證分布式更新請求的原子性的系統(tǒng)和方法)”描述一種在并行多個數(shù)據(jù)庫管理系統(tǒng)中管理分布式請求的方法。如Coyle等人所述,在正常情況下僅對于一個DBMS可見的保存點擴展到參與事務的所有并行DBMS。這就允許應用在一個DBMS上設置一個保存點,并且在另一DBMS上回滾至同一保存點。保存點使用從協(xié)調(diào)服務器到參與服務器的消息跨越網(wǎng)絡連接來標識。該消息在參與者上創(chuàng)建本地保存點。參與者將表示底層事務執(zhí)行的成功或失敗以及本地服務器失敗情況下的本地服務器和其它服務器上的事務回滾的消息回送到協(xié)調(diào)服務器。
Coyle等人描述如何響應事務的發(fā)起初始化協(xié)調(diào)進程的請求計數(shù)器。每當協(xié)調(diào)進程接收到分布式請求時,請求計數(shù)器增1。為每個請求生成包括保存點數(shù)據(jù)的請求實例,并且分布到不同數(shù)據(jù)庫分區(qū)節(jié)點上的所選從屬進程。當接收到所選從屬進程上的請求實例時,為每個所選從屬進程存儲帶請求保存點數(shù)據(jù)的本地保存點以及局部生成的保存點數(shù)據(jù)。當試圖執(zhí)行請求實例時,將執(zhí)行試圖的成功或失敗返回給協(xié)調(diào)進程。這是針對各請求實例完成的。當表示任何請求實例的執(zhí)行失敗時,對本地保存點表示執(zhí)行請求的請求實例的各從屬進程執(zhí)行回滾。
由于多個服務器場地、通信網(wǎng)絡、分片和復制導致復雜度增大,因此需要提供比“提交-回滾”方法粒度更細的控制級別。需要一種可用于通過電信網(wǎng)絡連在一起的多個服務器上的分片和復制數(shù)據(jù)庫的保存點方法。
發(fā)明內(nèi)容
在分布式數(shù)據(jù)庫系統(tǒng)中實現(xiàn)保存點的問題通過在此所述的方法、系統(tǒng)和程序產(chǎn)品來排除,它提供跨越分布在多個服務器上且通過一個或多個通信網(wǎng)絡連接在一起的分片和復制數(shù)據(jù)庫元素的保存點功能。
本發(fā)明的方法、系統(tǒng)和程序產(chǎn)品為標識分布式保存點在參與事務的服務器與協(xié)調(diào)服務器之間提供包含保存點數(shù)據(jù)(保存點名稱、創(chuàng)建保存點的服務器的名稱以及服務器的保存點順序號)的消息。一條消息從協(xié)調(diào)服務器傳到參與服務器來標識自從最后一次聯(lián)系服務器以來所回滾的保存點標識符,與各回滾一起標識的游標處置(打開或關(guān)閉);自從最后一次聯(lián)系服務器以來仍生效的任何新保存點的保存點標識符,以及自從最后一次聯(lián)系該特定服務器以來所釋放的任何保存點的保存點標識符。
各參與DBMS發(fā)送一條消息到協(xié)調(diào)DBMS來標識自從最后一條消息以來所回滾的任何保存點標識符(隨同游標處置一起)、自從最后一條消息以來所建立且仍生效的任何保存點的保存點標識符、以及自從最后一條消息以來所釋放的任何保存點的保存點標識符。
另外,每次將SQL結(jié)果集返回給請求者時,服務器將與游標相關(guān)聯(lián)的順序號發(fā)送到請求者。這樣,可以在任務、事務或其它工作單元的保存點內(nèi)正確定位結(jié)果集。
并發(fā)性、一致性、準確性和及時性通過在此所述的方法、系統(tǒng)和程序產(chǎn)品獲得。本發(fā)明的一個實施例是管理駐留于分離參與服務器和協(xié)調(diào)服務器的多個DBMS上的事務的方法,其中,單個事務包括跨越多個DBMS中的若干參與者的多個步驟。
根據(jù)本發(fā)明的方法,跨越DBMS網(wǎng)絡將保存點分配給參與者,其中,在多步驟事務即具有多個子事務的事務內(nèi)設置至少一個保存點。如果當事務進行時接收到回滾至保存點的請求,則本發(fā)明方法跨越DBMS參與者調(diào)用回滾自從保存點以來所執(zhí)行的操作。當事務被應用接受(甚至不顧拒絕事務的原因)時,跨越多個DBMS參與者接受事務。
建立和管理保存點通過如下步驟來完成將保存點標識符分配給保存點;將標識保存點并且提供保存點信息的消息從協(xié)調(diào)服務器發(fā)送到參與事務的多個數(shù)據(jù)庫管理系統(tǒng)參與者;將關(guān)于處理SQL請求時候的保存點并且提供保存點信息的消息從事務的多個數(shù)據(jù)庫管理系統(tǒng)參與者發(fā)送到協(xié)調(diào)服務器;以及將事務結(jié)果集返回給請求者。
將標識保存點并且提供保存點信息的消息從協(xié)調(diào)服務器發(fā)送到多個數(shù)據(jù)庫管理系統(tǒng)參與者包括將標識自從最后一次通知數(shù)據(jù)庫服務器以來所回滾的保存點、仍生效的保存點以及所釋放的保存點的消息從協(xié)調(diào)服務器發(fā)送到實際參與事務的多個數(shù)據(jù)庫服務器參與者。將關(guān)于保存點并且提供保存點信息的消息從多個數(shù)據(jù)庫管理系統(tǒng)參與者發(fā)送到協(xié)調(diào)服務器,包括將標識自從建立保存點以來的保存點信息即在該請求期間所回滾的保存點、仍生效的保存點以及所釋放的保存點的消息從多個數(shù)據(jù)庫服務器參與者發(fā)送到協(xié)調(diào)服務器。
在此所用的順序號建立并顯示結(jié)果集生成和保存點活動的時間,從而關(guān)聯(lián)結(jié)果集和保存點。將SQL結(jié)果集返回給請求者包括將與結(jié)果集的游標相關(guān)聯(lián)的順序號傳輸?shù)秸埱笳?,從而使結(jié)果集可以與保存點相關(guān)聯(lián),并且在保存點內(nèi)正確定位。
本發(fā)明的另一個實施例是一種分布式DBMS,包括作為事務參與者的駐留在分離服務器上的多個單獨DBMS,并且包括協(xié)調(diào)服務器。分布式DBMS被配置并控制為跨越多個DBMS中的若干參與者處理包括多個步驟即子事務的事務。這通過包括如下步驟的方法來完成在多步驟事務內(nèi)跨越DBMS參與者分配至少一個保存點;以及響應應用請求以通過撤消自從跨越DBMS參與者的保存點以來的事務所執(zhí)行操作來回滾至保存點。
分布式數(shù)據(jù)庫管理系統(tǒng)還被配置并控制為通過包括如下步驟的方法來建立和管理保存點將保存點標識符分配給保存點;將標識保存點并且提供保存點信息的消息從協(xié)調(diào)服務器發(fā)送到多個數(shù)據(jù)庫管理系統(tǒng)參與者;將關(guān)于保存點并且提供保存點信息的消息從多個數(shù)據(jù)庫管理系統(tǒng)參與者發(fā)送到協(xié)調(diào)服務器;以及將事務結(jié)果集返回給請求者。
本發(fā)明的另一個實施例是一種程序產(chǎn)品。該程序產(chǎn)品可以是安裝磁帶、盤、軟盤、安裝服務器上的盤、或者作為盤驅(qū)動器、磁帶驅(qū)動器、存儲器陣列或其組合的各個服務器上的存儲介質(zhì),它的形式為其上有計算機可讀程序代碼的存儲介質(zhì)。寫入在介質(zhì)上或者裝載在RAM中或者兩者的該代碼控制分布式數(shù)據(jù)庫管理系統(tǒng)的操作,該系統(tǒng)包含駐留在分離服務器上的多個單獨DBMS即參與者,并且包括協(xié)調(diào)服務器。程序代碼配置并控制數(shù)據(jù)庫管理系統(tǒng)以跨越所述多個DBMS中的若干參與者處理包括多個步驟即子事務的事務。這通過包括如下步驟的方法來完成在具有多個子事務(步驟)的事務內(nèi)跨越DBMS參與者分配至少一個保存點。如果發(fā)現(xiàn)拒絕原因,則跨越DBMS參與者回滾事務至保存點。
程序產(chǎn)品的程序代碼通過包括如下步驟的方法配置并控制各個DBMS建立和管理保存點將保存點標識符分配給保存點;將標識保存點并且提供保存點信息的消息從協(xié)調(diào)服務器發(fā)送到多個數(shù)據(jù)庫管理系統(tǒng)參與者;將關(guān)于保存點并且提供保存點信息的消息從多個數(shù)據(jù)庫管理系統(tǒng)參與者發(fā)送到協(xié)調(diào)服務器;以及將事務結(jié)果集返回給請求者。
本發(fā)明的方法可用于任何使用SQL的DBMS,尤其是關(guān)系數(shù)據(jù)庫管理系統(tǒng)(RDBMS),但是它也可以用于例如集成數(shù)據(jù)庫管理系統(tǒng)(“CODASYL”)、各種網(wǎng)絡數(shù)據(jù)庫范例等。
從另一方面來看,本發(fā)明提供一種在駐留于分離服務器上并且包括協(xié)調(diào)服務器的多個關(guān)系數(shù)據(jù)庫管理系統(tǒng)上管理事務的方法,其中,單個事務包括跨越所述多個關(guān)系數(shù)據(jù)庫管理系統(tǒng)中的若干參與者的多個子事務,所述方法包括在具有多個步驟的事務內(nèi)跨越關(guān)系數(shù)據(jù)庫管理系統(tǒng)參與者分配至少一個保存點;跨越關(guān)系數(shù)據(jù)庫管理系統(tǒng)參與者測試子事務,以進行接受或拒絕步驟的應用決策;以及如果發(fā)現(xiàn)拒絕步驟的應用決策,則跨越關(guān)系數(shù)據(jù)庫管理系統(tǒng)參與者回滾步驟至保存點。
最好,該方法提供提交事務將釋放所有保存點。
從另一方面來看,該方法還提供,通過如下方法建立和管理保存點將保存點標識符分配給保存點;將標識保存點并且提供保存點信息的消息從協(xié)調(diào)服務器發(fā)送到步驟的多個關(guān)系數(shù)據(jù)庫管理系統(tǒng)參與者;關(guān)系數(shù)據(jù)庫管理系統(tǒng)參與者將關(guān)于執(zhí)行保存點或完成步驟并且提供保存點信息的消息發(fā)送到協(xié)調(diào)服務器;以及將步驟結(jié)果集返回給請求者。
最好,該方法提供,將標識保存點并且提供保存點信息的消息從協(xié)調(diào)服務器發(fā)送到事務的多個關(guān)系數(shù)據(jù)庫管理系統(tǒng)參與者的步驟包括在事務的開始將標識自從最后一次通知數(shù)據(jù)庫服務器以來所回滾的保存點、仍生效的保存點以及所釋放的保存點的消息從協(xié)調(diào)服務器發(fā)送到多個數(shù)據(jù)庫系統(tǒng)參與者。
最好,該方法還提供,將關(guān)于保存點并且提供保存點信息的消息從回復多個關(guān)系數(shù)據(jù)庫管理系統(tǒng)參與者發(fā)送到協(xié)調(diào)服務器的步驟包括在回滾事務至保存點、釋放保存點、完成請求或回復請求的時候?qū)⒁粭l消息從多個數(shù)據(jù)庫服務器參與者發(fā)送到協(xié)調(diào)服務器,所述方法包括標識該請求期間所回滾的保存點、仍生效的保存點以及所釋放的保存點。
最好,該方法提供,將SQL結(jié)果集返回給請求者的步驟還包括將與結(jié)果集的游標相關(guān)聯(lián)的順序號傳輸?shù)秸埱笳?,從而可以在保存點內(nèi)正確定位結(jié)果集。
現(xiàn)在參照附圖僅作為示例對本發(fā)明進行描述,其中圖1示出多數(shù)據(jù)庫、多服務器DBMS;圖2示出例子1,它示出協(xié)調(diào)者發(fā)出所有保存點命令并且參與者僅通過網(wǎng)絡接收保存點請求的方式;圖3示出例子2,它示出協(xié)調(diào)者和參與者都發(fā)出保存點命令的方式;圖4示出例子3,它示出三個DBMS服務器之間的更復雜交互。
具體實施例方式
本發(fā)明是一種在跨越多個DBMS的分布式事務內(nèi)設置、回滾和釋放跨越多個數(shù)據(jù)庫管理系統(tǒng)(DBMS)的保存點的方法、系統(tǒng)和程序產(chǎn)品。典型地,本發(fā)明的方法、系統(tǒng)和程序產(chǎn)品結(jié)合關(guān)系數(shù)據(jù)庫管理系統(tǒng)(RDBMS)使用,但是本發(fā)明的方法、系統(tǒng)和程序產(chǎn)品也可以與任何使用SQL(Structured Query Language,結(jié)構(gòu)查詢語言)的DBMS一起使用。使用SAVEPOINT SQL語句,可以區(qū)分事務內(nèi)的里程標(milestone)。然后,可以根據(jù)應用邏輯需要撤消自從保存點以來所作的數(shù)據(jù)和模式修改,而不影響事務的總體結(jié)果?;貪L至保存點還可以用來可選地關(guān)閉自從建立保存點以來所打開的SQL游標。
本發(fā)明提供一種方法來在分布式事務內(nèi)唯一建立和標識全局保存點。本發(fā)明還提供一種方法來讓事務協(xié)調(diào)者(DBMS A)向分布式事務的所有參與者(DBMS B)標識自從最后一次請求以來在事務內(nèi)所設置或回滾的保存點列表。最后,提供一種方法來讓參與者在將請求返回給協(xié)調(diào)者時向協(xié)調(diào)者標識所設置、釋放或回滾的所有保存點。
本發(fā)明是在網(wǎng)絡環(huán)境中實施的。圖1示出具有多個服務器531、533、535和537以及協(xié)調(diào)服務器521的網(wǎng)絡。服務器通過網(wǎng)絡530連接。協(xié)調(diào)服務器521向客戶應用511提供連接性??蛻魬猛ㄟ^試圖做搜索數(shù)據(jù)庫、插入數(shù)據(jù)、更新數(shù)據(jù)或刪除數(shù)據(jù)之一來發(fā)起數(shù)據(jù)庫訪問。事務涉及協(xié)調(diào)者521和服務器531、533、535和537中的若干服務器上的數(shù)據(jù)和數(shù)據(jù)庫管理系統(tǒng)。
本發(fā)明使用下面四項來管理跨越參與分布式事務的多個DBMS服務器的保存點。
第一,當使用網(wǎng)絡連接時,創(chuàng)建、標識并管理DBMS服務器的保存點。這是采用包含保存點名稱、創(chuàng)建保存點的服務器的名稱以及用來唯一標識保存點的服務器保存點創(chuàng)建順序號的SQL請求通過來自協(xié)調(diào)者的消息來完成的。在此所用的術(shù)語“保存點標識符”描述這三個值。
第二,典型地使用包括游標和鎖定的SQL請求或查詢將隨后的消息從協(xié)調(diào)服務器傳輸?shù)絽⑴cDBMS服務器,從而標識1.自從最后一次聯(lián)系該服務器以來所回滾的保存點標識符(若有的話)。該消息還包括與回滾相關(guān)聯(lián)的游標處置(打開或關(guān)閉)。
2.自從最后一次聯(lián)系該服務器以來仍生效的任何新保存點的保存點標識符(若有的話)。
3.自從最后一次聯(lián)系該服務器以來所釋放的任何保存點的保存點標識符(若有的話)。
第三,將典型是來自應用程序的請求回復的消息從參與DBMS服務器回傳到協(xié)調(diào)DBMS服務器,其中,典型是對SQL請求的回復,從而標識1.在該請求期間所回滾的保存點標識符(若有的話)以及在各回滾請求上指定的游標處置。
2.在該請求期間所建立的仍生效的任何新保存點的保存點標識符(若有的話)。
3.在該請求期間所釋放的任何保存點的保存點標識符(若有的話)。
第四,每次將SQL結(jié)果集返回給請求者時,服務器將與游標相關(guān)聯(lián)的順序號傳輸?shù)秸埱笳撸瑥亩梢栽谠摴ぷ鲉卧谋4纥c內(nèi)正確定位結(jié)果集。
使用上述幾項,涉及分布式事務的DBMS服務器可以采用最小附加網(wǎng)絡消息來跨越涉及分布式事務的服務器對任何保存點活動進行通信,并且獲得各SQL游標的正確游標狀態(tài)。
SQL3標準已提出單個DBMS內(nèi)的保存點的標準。若干商業(yè)DBMS產(chǎn)品(例如,Oracle和Sybase)目前支持這些非分布式保存點。然而,沒有商業(yè)DBMS銷售商將保存點操作擴展到涉及多個DBMS系統(tǒng)和/或服務器的分布式事務。
本發(fā)明將SQL3保存點概念擴展到跨越多個DBMS和服務器進行分布,從而在最小附加網(wǎng)絡開銷的情況下允許分布式事務的數(shù)據(jù)庫互操作性。分布式保存點表示跨越涉及分布式事務的所有DBMS的事務在某特定時間點的數(shù)據(jù)和模式狀態(tài)。保存點具有唯一名稱,并且以下說作設置(名稱為<savepoint_name>的)保存點。然后,可以通過恢復(回滾)至保存點來將數(shù)據(jù)和模式返回到它們在設置保存點的時候所存在的狀態(tài)。
分布式保存點在設置之后可見于涉及事務的所有數(shù)據(jù)庫管理系統(tǒng)。保存點的范圍可以與事務內(nèi)SQL語句的執(zhí)行成線性關(guān)系。當保存點范圍是線性的時,較新保存點可以替代相同名稱的較舊保存點。例如,如果在DBMS A執(zhí)行的事務設置保存點S然后調(diào)用回滾保存點S的DBMS B的存儲過程,則必須將自從設置保存點S以來DBMS A和DBMS B上的所有返回數(shù)據(jù)和模式回滾至保存點S之前的狀態(tài)。
當分布式事務中的一個服務器OPEN(打開)一個新游標時,該服務器產(chǎn)生新順序號M來標識游標如何在分布式事務中的保存點序列內(nèi)適配。M值通過下面公式來計算M=1+MAX其中,MAX是前一保存點號和前一打開順序號的最大值,并且N是前一打開順序號。M值必須傳輸?shù)桨l(fā)出打開請求或接收存儲過程結(jié)果集的任何SQL請求者。M值用來確定回滾至保存點請求應關(guān)閉哪些游標。例如,一個存儲過程可能發(fā)出如下SQL語句序列OPEN C1(順序號M=5)OPEN C2(順序號M=6)SAVEPOINT XYZ(順序號M=7)OPEN C3(順序號M=8)在該SQL語句序列的情況下,ROLLBACK TO XYZ(順序號7)將影響游標C3的狀態(tài)(順序號8),但不影響其它兩個游標(因為它們的順序號在7之前)。
當分布式事務中的一個服務器創(chuàng)建一個新保存點時,它必須將新保存點標識符加到活動保存點列表。保存點順序號是其值為M+1的整數(shù),其中,M等于MAX(前一保存點號、前一打開順序號)。
在創(chuàng)建仍生效的新保存點之后,服務器在第一次訪問時將新保存點標識符傳輸?shù)絼?chuàng)建保存點之后所訪問的任何協(xié)調(diào)或參與服務器。
當分布式事務中的一個服務器回滾至保存點時,它將包含保存點標識符和游標處置的消息傳送到自從創(chuàng)建保存點以來所訪問的各協(xié)調(diào)或參與服務器。該消息可以緊接在回滾至保存點之后傳送或者延遲到將下一SQL消息傳輸?shù)椒掌?。立即發(fā)送消息還是延遲它可以由DBMS、操作系統(tǒng)或兩者進行決策,并且典型地基于數(shù)據(jù)庫并發(fā)性與網(wǎng)絡性能之間的平衡。
服務器還關(guān)閉其順序號大于保存點順序號的各SQL游標(如果游標處置是關(guān)閉)。
當分布式事務中的一個服務器接收到表示已建立新保存點的消息時,服務器必須將新保存點標識符加到活動保存點列表。從在保存點標識符中提供的值獲得保存點順序號。然后,除將保存點標識符傳送到該特定服務器的協(xié)調(diào)服務器之外,服務器將保存點標識符傳輸?shù)絼?chuàng)建保存點之后所訪問的所有協(xié)調(diào)和參與服務器。該消息提供創(chuàng)建新游標和鎖定及相關(guān)保存點所影響的所有保存點枚舉。當回復時,將保存點標識符列表返回給協(xié)調(diào)者。
當分布式事務中的一個服務器接收到表示已發(fā)出回滾至保存點的消息時,服務器首先檢查活動保存點列表,以驗證該保存點存在。如果保存點有效,則服務器回滾至指定保存點。如果游標處置是關(guān)閉,則服務器關(guān)閉其順序號大于保存點順序號的各SQL游標和鎖定。
除了將保存點標識符發(fā)送到該服務器的服務器之外,該服務器還必須將保存點標識符和游標處置傳輸?shù)絼?chuàng)建保存點之后所訪問的各協(xié)調(diào)或參與服務器。這些消息可以立即發(fā)送,或者延遲到將下一消息傳送到服務器。這是平衡網(wǎng)絡負載和數(shù)據(jù)庫并發(fā)性的問題。
當分布式事務中的一個服務器釋放一個保存點時,該服務器首先驗證該保存點列為活動保存點。如果該保存點存在,則服務器將包含保存點標識符的消息傳送到自從創(chuàng)建保存點以來所訪問的各參與或協(xié)調(diào)服務器。最后,服務器從活動保存點列表中刪除該保存點。這些消息可以立即發(fā)送,或者延遲到將下一消息傳送到服務器。
當分布式事務中的一個服務器接收到表示已釋放保存點的消息時,服務器首先驗證該保存點存在于活動保存點列表中。如果該保存點存在,則除了將保存點標識符發(fā)送到該服務器的服務器之外,該服務器將包含保存點標識符的消息傳送到自從創(chuàng)建保存點以來所訪問的各參與或協(xié)調(diào)服務器。這些消息可以立即發(fā)送,或者延遲到將下一消息傳送到服務器。最后,該服務器從活動保存點列表中刪除該保存點。
雖然本發(fā)明是關(guān)于關(guān)系數(shù)據(jù)庫管理系統(tǒng)(RDBMS)來描述的,但是本發(fā)明的方法、系統(tǒng)和程序產(chǎn)品也適用于其它DBMS范例。
例子圖2、3和4所示的例子1至3示出本發(fā)明的保存點方法、系統(tǒng)和程序產(chǎn)品的實際應用。
下面例子演示分布式保存點方法、系統(tǒng)和程序產(chǎn)品如何用來協(xié)調(diào)跨越DBMS服務器分布式網(wǎng)絡的保存點操作。在這些例子中,存在三個DBMS服務器。
1.DBMS_A是分布式事務的“根”。它擔當分布式事務的協(xié)調(diào)者。
2.DBMS_B從屬于DBMS_A。DBMS_B是分布式事務的參與者,并且又調(diào)用一個參與DBMS服務器(DBMS_C)。DBMS_B是該參與服務器的協(xié)調(diào)者。
3.DBMS_C從屬于DBMS_B。DBMS_C僅擔當參與者,因為DBMS_C之下沒有任何參與服務器。
在圖2所示的例子1中,協(xié)調(diào)者發(fā)出所有保存點命令,并且參與者僅通過網(wǎng)絡接收保存點請求。參與者響應協(xié)調(diào)者請求,但是不發(fā)出其自己的任何保存點請求。
在本例中,包含保存點ABC標識符的消息發(fā)出INSERT請求。DBMS_A將一行插入到本地表1。一條INSERT發(fā)向遠端服務器DBMS_B2。該遠端服務器執(zhí)行INSERT并且響應3。DBMS_A設置SAVEPOINT ABC 4,并且將ABC加到活動保存點列表,但是不發(fā)送消息到DBMS_B(以避免網(wǎng)絡開銷)。當檢測到DBMS_B的INSERT時,DBMS_A使用這一機會將帶有保存點標識符的保存點請求傳輸?shù)竭h端服務器。在該點,DBMS_B執(zhí)行保存點操作,并且還執(zhí)行INSERT操作6。返回表示操作成功的回復。
DBMS_A設置另一保存點DEF 7。將該信息加到活動保存點列表,但是不傳輸任何消息(以節(jié)省網(wǎng)絡流量)。DBMS_A回滾至保存點ABC 8。這將取消保存點DEF。在本例中,在回滾時不發(fā)送網(wǎng)絡消息,但是如果考慮鎖定競爭,則一種實現(xiàn)可以在每次回滾時傳輸消息。
在下一次引用DBMS_B9時,隨同INSERT語句一起傳輸回滾保存點的名稱和創(chuàng)建者。注意,保存點DEF不傳輸?shù)紻BMS_B,因為回滾至ABC將從“新活動保存點”列表中刪除DEF。DBMS_B執(zhí)行所請求的回滾10(這將取消步驟5/6的INSERT操作),并且執(zhí)行下一請求INSERT。返回表示成功完成的回復消息。
圖3示出例子2。在該第二例子中,協(xié)調(diào)者和參與者都發(fā)出保存點命令。在本例中,DBMS_A將一行插入到本地表1。下一步,一條INSERT發(fā)向遠端服務器DBMS_B2。該遠端服務器執(zhí)行INSERT并且響應3。DBMS_A設置SAVEPOINT ABC,并且將ABC加到活動保存點列表4,但是不發(fā)送消息到DBMS_B(以避免網(wǎng)絡開銷)。
當檢測到調(diào)用DBMS_B的過程時,DBMS_A使用這一機會將保存點標識符傳輸?shù)竭h端服務器5。DBMS_B執(zhí)行保存點操作,并且還調(diào)用存儲過程。存儲過程插入一行,并且創(chuàng)建新保存點EEE。返回一條回復來表示操作成功,并且將保存點的創(chuàng)建報告給DBMS_A6。DBMS_A設置由DBMS B標識的保存點。DBMS_A回滾至保存點ABC。這將取消保存點EEE,但是尚不發(fā)送網(wǎng)絡消息8。DBMS_A設置新保存點RRR9。這記錄在活動保存點列表中以作以后使用。INSERT to DBMS_B使回滾和新保存點傳輸?shù)紻BMS_B10。DBMS_B執(zhí)行所請求的保存點和插入操作11。
圖4示出例子3。在該最后例子中,示出三個DBMS服務器之間的更復雜交互。在本例中,DBMS_A請求插入1。下一步,DBMS_A請求DBMS_B插入2,DBMS_B執(zhí)行插入并且通知DBMS_A。下一步,DBMS_A發(fā)出SAVEPOINT ABC 4,以包含ABC保存點標識符和CALL請求的消息來調(diào)用DBMS_B 5。DBMS_B接收帶ABC標識符的保存點標識符以及調(diào)用請求,并且將包含ABC保存點標識符、新保存點標識符XYZ和INSERT的消息發(fā)送到DBMS_C 7。DBMS_C設置保存點ABC和XYZ,執(zhí)行INSERT,并且廣播消息至DBMS_A 8。DBMS_A設置保存點XYZ8,并且回滾保存點ABC 9。然后,DBMS_A插入一個文件10,創(chuàng)建保存點QRS,并且以包含ABC回滾標識符、QRS保存點標識符和調(diào)用請求的消息調(diào)用DBMS_C?;貪L保存點ABC、設置保存點QRS、調(diào)用并且在DBMS_C中插入的消息經(jīng)過DBMS_B,并且將帶有DBMS_A ABC回滾、DBMS_A QRS保存點和INSERT請求的新消息發(fā)送到DBMS_C。DBMS_C回滾ABC,設置保存點QRS,并且插入DBMS_C 14,并且發(fā)送消息到DBMS_A和DBMS_B。
雖然本發(fā)明是關(guān)于特定優(yōu)選實施例和示例來描述的,但是本發(fā)明不限于此,而只由所附權(quán)利要求限定。
權(quán)利要求
1.一種在駐留于分離服務器上并且包括協(xié)調(diào)服務器的多個數(shù)據(jù)庫管理系統(tǒng)上管理事務的方法,其中,單個事務包括跨越所述多個數(shù)據(jù)庫管理系統(tǒng)中的若干參與者的多個步驟,所述方法包括a)在多步驟事務內(nèi)跨越數(shù)據(jù)庫管理系統(tǒng)參與者分配至少一個保存點;b)如果發(fā)現(xiàn)拒絕事務步驟的應用決策,則跨越數(shù)據(jù)庫管理系統(tǒng)參與者回滾事務至保存點;以及c)當沒有發(fā)現(xiàn)拒絕事務的應用決策時,跨越多個數(shù)據(jù)庫管理系統(tǒng)參與者提交事務。
2.如權(quán)利要求1所述的方法,其中,提交事務將釋放所有保存點。
3.如權(quán)利要求1所述的方法,還包括通過如下方法建立和管理保存點a)將保存點標識符分配給保存點;b)將標識保存點并且提供保存點信息的消息從協(xié)調(diào)服務器發(fā)送到事務的多個數(shù)據(jù)庫管理系統(tǒng)參與者;c)數(shù)據(jù)庫管理系統(tǒng)參與者將關(guān)于執(zhí)行保存點并且提供保存點信息的消息發(fā)送到協(xié)調(diào)服務器;以及d)將結(jié)果集返回給請求者。
4.如權(quán)利要求3所述的方法,其中,將標識保存點并且提供保存點信息的消息從協(xié)調(diào)服務器發(fā)送到事務的多個數(shù)據(jù)庫管理系統(tǒng)參與者的步驟包括在事務的開始將標識下列內(nèi)容的消息從協(xié)調(diào)服務器發(fā)送到多個數(shù)據(jù)庫系統(tǒng)參與者1)自從最后一次通知數(shù)據(jù)庫服務器以來所回滾的保存點;2)仍生效的保存點;以及3)所釋放的保存點。
5.如權(quán)利要求3所述的方法,其中,將關(guān)于保存點并且提供保存點信息的消息從回復多個數(shù)據(jù)庫管理系統(tǒng)參與者發(fā)送到協(xié)調(diào)服務器的步驟包括在步驟回滾事務至保存點、釋放保存點、完成請求或回復請求的時候?qū)⒁粭l消息從多個數(shù)據(jù)庫服務器參與者發(fā)送到協(xié)調(diào)服務器,所述方法包括標識1)該請求期間所回滾的保存點;2)仍生效的保存點;以及3)所釋放的保存點。
6.如權(quán)利要求3所述的方法,其中,將SQL結(jié)果集返回給請求者的步驟還包括將與結(jié)果集的游標相關(guān)聯(lián)的順序號傳輸?shù)秸埱笳撸瑥亩梢栽诒4纥c內(nèi)正確定位結(jié)果集。
7.一種分布式數(shù)據(jù)庫管理系統(tǒng),包括駐留在分離服務器上的多個分離數(shù)據(jù)庫管理系統(tǒng),并且包括協(xié)調(diào)服務器,所述分布式數(shù)據(jù)庫管理系統(tǒng)被配置并控制為通過包括如下步驟的方法跨越所述多個數(shù)據(jù)庫管理系統(tǒng)中的若干參與者來處理包括多個步驟的事務a)在多步驟事務內(nèi)跨越數(shù)據(jù)庫管理系統(tǒng)參與者分配至少一個保存點;以及b)如果發(fā)現(xiàn)拒絕多步驟事務的步驟的應用決策,則跨越數(shù)據(jù)庫管理系統(tǒng)參與者回滾事務至保存點。
8.如權(quán)利要求7所述的分布式數(shù)據(jù)庫管理系統(tǒng),還被配置并控制為通過包括如下方法來建立和管理保存點a)將保存點標識符分配給保存點;b)將標識保存點并且提供保存點信息的消息從協(xié)調(diào)服務器發(fā)送到事務的多個數(shù)據(jù)庫管理系統(tǒng)參與者;c)將關(guān)于執(zhí)行保存點或完成事務步驟并且提供保存點信息的消息從多個數(shù)據(jù)庫管理系統(tǒng)參與者發(fā)送到協(xié)調(diào)服務器;以及d)將事務結(jié)果集返回給請求者。
9.如權(quán)利要求8所述的分布式數(shù)據(jù)庫管理系統(tǒng),還被配置并控制為將標識保存點并且提供保存點信息的消息從協(xié)調(diào)服務器發(fā)送到多個數(shù)據(jù)庫管理系統(tǒng)參與者的步驟、包括將標識下列內(nèi)容的消息從協(xié)調(diào)服務器發(fā)送到多個數(shù)據(jù)庫服務器參與者1)自從最后一次通知數(shù)據(jù)庫服務器以來所回滾的保存點;2)仍生效的保存點;以及3)所釋放的保存點。
10.如權(quán)利要求7所述的分布式數(shù)據(jù)庫管理系統(tǒng),其中,系統(tǒng)被配置并控制為通過在步驟回滾多步驟事務至保存點、釋放保存點、或回復請求的時候?qū)俗R下列內(nèi)容的消息從多個數(shù)據(jù)庫服務器參與者發(fā)送到協(xié)調(diào)服務器來執(zhí)行將關(guān)于保存點并且提供保存點信息的消息從多個數(shù)據(jù)庫管理系統(tǒng)參與者發(fā)送到協(xié)調(diào)服務器的步驟1)該請求期間所回滾的保存點;2)仍生效的保存點;以及3)所釋放的保存點。
11.如權(quán)利要求7所述的分布式數(shù)據(jù)庫管理系統(tǒng),其中,系統(tǒng)被配置并控制為通過將與結(jié)果集的游標相關(guān)聯(lián)的順序號傳輸?shù)秸埱笳邅韴?zhí)行將SQL結(jié)果集返回給請求者的步驟,從而使結(jié)果集可以與保存點相關(guān)聯(lián),并且在保存點內(nèi)正確定位。
12.一種程序產(chǎn)品,包括其上有計算機可讀程序代碼的存儲介質(zhì),所述程序代碼用于控制分布式數(shù)據(jù)庫管理系統(tǒng)的操作以執(zhí)行如權(quán)利要求1至6所述的方法的步驟,其中,分布式數(shù)據(jù)庫管理系統(tǒng)包括駐留在分離服務器上的多個單獨數(shù)據(jù)庫管理系統(tǒng),并且包括協(xié)調(diào)服務器。
全文摘要
在駐留于分離的參與服務器和協(xié)調(diào)服務器的多個數(shù)據(jù)庫管理系統(tǒng)上管理事務的系統(tǒng)、方法和程序產(chǎn)品。單個事務跨越多個數(shù)據(jù)庫管理系統(tǒng)中的若干參與者通過多個步驟進行。跨越數(shù)據(jù)庫管理系統(tǒng)將保存點分配給參與者,其中,多步驟事務內(nèi)至少有一個保存點。DBMS通過跨越數(shù)據(jù)庫管理系統(tǒng)參與者回滾事務至保存點來響應回滾至保存點的應用請求。另外,還公開一種包含代碼的程序產(chǎn)品,寫入在介質(zhì)上或者裝載在RAM中或者兩者中的所述代碼控制分布式數(shù)據(jù)庫管理系統(tǒng)的操作。
文檔編號G06F11/14GK1507597SQ02809763
公開日2004年6月23日 申請日期2002年5月9日 優(yōu)先權(quán)日2001年5月15日
發(fā)明者柯蒂斯·庫特納, 柯蒂斯 庫特納, 皮克爾, 詹姆斯·皮克爾, 瓦茨, 朱利恩·瓦茨 申請人:國際商業(yè)機器公司