劉建軍
(吉林省教育學院 基礎(chǔ)教育網(wǎng)絡(luò)信息中心,長春 130022)
數(shù)據(jù)庫事務(wù)(Database Transaction),是指為實現(xiàn)業(yè)務(wù)而作為單個邏輯工作單元執(zhí)行的一系列操作。事務(wù)具有acid特性,即原子性、一致性、隔離性、持久性。而自治事務(wù)則是為了實現(xiàn)某些特殊業(yè)務(wù)應(yīng)用而違反事務(wù)一致性的特殊事務(wù)實現(xiàn)方式。
AT是由主事務(wù)(MT)即外部事務(wù)調(diào)用但是獨立于它的事務(wù)。在AT被調(diào)用執(zhí)行時,MT被掛起,在AT內(nèi)部,一系列的DML操作可以被執(zhí)行并且可以進行提交或回滾.由于AT的獨立性,它的提交和回滾并不影響MT的執(zhí)行效果。在AT執(zhí)行結(jié)束后,MT獲得控制權(quán),又可以繼續(xù)執(zhí)行。這樣就解決了在嵌套事務(wù)中,由于事務(wù)的原子性和一致性,子事務(wù)的提交或者回滾將決定于主事務(wù)的提交或回滾,而不能單獨提交獨立于主事務(wù)的該事務(wù).即主要應(yīng)用于嵌套事務(wù)中外部事務(wù)提交內(nèi)部事務(wù)回滾或外部事務(wù)回滾而內(nèi)部事務(wù)提交的應(yīng)用。
(1)創(chuàng)建表seq_xh,用來生成類似序列的值,該值記錄在xh字段,bj字段是生成序列值為0,當該生成的序列被業(yè)務(wù)表使用,則更改為1。
Create table seq_xh(xh numeric(18,0),bj char(1));
seq_xh表新增有序數(shù)據(jù),表示序列正常生成,不因為主事務(wù)的回滾而回滾。
UseSeq表數(shù)據(jù)不變。同oracle一致。
(1)存儲過程ProGetXh(等價于oracle的AT)是獨立的,在它執(zhí)行時,主事務(wù)被暫停了.主事務(wù)的roll-back不影響該存儲過程的COMMIT。
(2)如果內(nèi)部自治事務(wù)rollback,外部事務(wù)commit,測試時候,則內(nèi)部自治事務(wù)成功回滾,不影響外部事務(wù)的數(shù)據(jù)提交。
服務(wù)器選項“remote proc transaction promotion”是在SQLServer2008上的一個新的選項。利用該選項可通過分布式事務(wù)處理協(xié)調(diào)器保護事務(wù)在服務(wù)器到服務(wù)器的操作過程。
如果該選項啟用時,則調(diào)用遠程存儲過程啟動分布式事務(wù),并登記該事務(wù)。調(diào)用遠程存儲過程的一方為事務(wù)發(fā)起者,來負責控制事務(wù)的完成。當為連接發(fā)出后續(xù)提交或回滾語句時,主控方請求MS DTC在所涉及的計算機間管理控制分布式事務(wù)的完成。
如果該選項停用時,則調(diào)用鏈接服務(wù)器調(diào)的遠程存儲過程時將不會把本地事務(wù)提升為分布式事務(wù)。
Sqlserver2005支持嵌套事務(wù),但不支持自治事務(wù),可以理解其為假嵌套。而Sqlserver2008通過分布式事務(wù)處理協(xié)調(diào)器(MS DTC)事務(wù)保護服務(wù)器到服務(wù)器的操作過程,可以實現(xiàn)自治事務(wù)的處理。
[1]楊志國,等.SQL Server2005數(shù)據(jù)庫管理精講[M].北京:電子工業(yè)出版社,2007.
[2]Itzik Ben-Gan、張昱Microsoft SQL Server 2008技術(shù)內(nèi)幕:T-SQL語言基礎(chǔ)[M].北京:電子工業(yè)出版社,2009.
[3]Kalen Delaney:Microsoft SQl Server 2005技術(shù)內(nèi)幕:存儲引擎[M].北京:電子工業(yè)出版社,2007.
[4]Itzik Ben-gan.Microsoft?SQL Server?2008 T-SQL Fundamentals[M].Washington:Microsoft press,2009.
[5]Itzik Ben-Gan),Lubor Kollar,Dejan Sarka.Microsoft SQL Server 2008技術(shù)內(nèi)幕:T-SQL查詢、等[M].北京:電子工業(yè)出版社,2010.