SQLServer數(shù)據(jù)庫事務處理詳解TRANSACTION_第1頁
SQLServer數(shù)據(jù)庫事務處理詳解TRANSACTION_第2頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、 SQLServer數(shù)據(jù)庫事務處理詳解TRANSACTION務定義:事務是單個的作單元。如果某事務成功,則在該事務中進的所有數(shù)據(jù)更改均會提交,成為數(shù)據(jù)庫中的永久組成部分。如果事務遇到錯誤且必須取消或回滾,則所有數(shù)據(jù)更改均被清除。事務三種運模式:動提交事務每條單獨的語句都是個事務。顯式事務每個事務均以 BEGIN TRANSACTION 語句顯式開始,以 COMMIT 或ROLLBACK 語句顯式結(jié)束。隱性事務在前個事務完成時新事務隱式啟動,但每個事務仍以 COMMIT 或 ROLLBACK 語句顯式完成。事務操作的語法:BEGIN TRANSACTIONBEGIN DISTRIBUTED TR

2、ANSACTIONCOMMIT TRANSACTIONCOMMIT WORKROLLBACK WORKSAVE TRANSACTIONBEGIN TRANSACTIONBEGIN TRANSACTION標記個顯式本地事務的起始點。BEGIN TRANSACTION將 TRANCOUNT 加 1。BEGIN TRANSACTION 代表點,由連接引的數(shù)據(jù)在該點是邏輯和物理上都致的。如果遇上錯誤,在 BEGIN TRANSACTION 之后的所有數(shù)據(jù)改動都能進回滾,以將數(shù)據(jù)返回到已知的致狀態(tài) 。每個事務繼續(xù)執(zhí)直到它誤地完成并且 COMMIT TRANSACTION對數(shù)據(jù)庫作永久的改動,或者遇上錯誤

3、并且 ROLLBACK TRANSACTION 語句擦除所有改動語法BEGIN TRAN SACTION transaction_name | tran_name_variable WITH MARK description 例:BEGIN TRAN T1UPDATE table1 .-nest transaction M2BEGIN TRAN M2 WITH MARKUPDATE table2 .SELECT * from table1COMMIT TRAN M2UPDATE table3 .COMMIT TRAN T1BEGIN DISTRIBUTED TRANSACTION指定個由 Mi

4、crosoft 分布式事務處理協(xié)調(diào)器 (MS DTC) 管理的 Transact-SQL 分布式事務的起始。語法BEGIN DISTRIBUTED TRAN SACTION transaction_name | tran_name_variable 參數(shù)transaction_name是戶定義的事務名,于跟蹤 MS DTC 實具中的分布式事務。 transaction_name 必須符合標識符規(guī)則,但是僅使頭 32 個字符tran_name_variable是戶定義的個變量名,它含有個事務名,該事務名于跟蹤 MS DTC 實具中的分布式事務。必須 char、varchar、nchar 或nva

5、rchar 數(shù)據(jù)類型聲明該變量。 注釋執(zhí)BEGIN DISTRIBUTED TRANSACTION 語句的服務器是事務創(chuàng)建,并且控制事務的完成當連接發(fā)出后續(xù) COMMIT TRANSACTION 或 ROLLBACK TRANSACTION 語句時,主控服務器請求 MS DTC 在所涉及的服務器間管理分布式事務的完成。有兩個法可將遠程 SQL 服務器登記在個分布式事務中:分布式事務中已登記的連接執(zhí)個遠程存儲過程調(diào),該調(diào)引個遠程服務器。分布式事務中已登記的連接執(zhí)個分布式查詢,該查詢引個遠程服務器。例本例在本地和遠程數(shù)據(jù)庫上更新作者的姓。本地和遠程數(shù)據(jù)庫將同時提交或同時回滾本事務。說明當前的SQL

6、 Server 上必須安裝 MS DTC.USE pubsGOBEGIN DISTRIBUTED TRANSACTIONUPDATE authorsSET au_lname = McDonald WHERE au_id = 409-56-7008EXECUTE link_Server_T.pubs.dbo.changeauth_lname 409-56-7008,McDonaldCOMMIT TRANGONote:如果需要連接遠程DB,如果是linkServer 式連接的話,定要修該linkServer的 RPC 選項置為 True。SET XACT_ABORT指定當 Transact-SQL

7、 語句產(chǎn)運時錯誤時,Microsoft? SQL Server? 是否動回滾當前事務。( 可以較簡單的理解,如果中間有任何句SQL 出錯,所有SQL全部回滾.特別適于 Procedure 中間調(diào)Procedure ,如果第個Procedure Ok,被調(diào)的Procedure 中間有錯誤,如果SET XACT_ABORT=false,則出錯的部分回滾,其他部分提交,當然外部Procedure 也提交。).-在分布式Trans中定要注意設置下參數(shù)(XACT_ABORT)語法SET XACT_ABORT ON | OFF 注釋 當 SET XACT_ABORT 為 ON 時,如果 Transact-

8、SQL 語句產(chǎn)運時錯誤,整個事務將終并回滾。為 OFF 時,只回滾產(chǎn)錯誤的Transact-SQL 語句,事務將繼續(xù)進處理。編譯錯誤(如語法錯誤)不受 SET XACT_ABORT 的影響。對于多數(shù) OLE DB 提供程序(包括 SQL Server),隱性或顯式事務中的數(shù)據(jù)修改語句必須將 XACT_ABORT 設置為 ON。SET XACT_ABORT 的設置是在執(zhí)或運時設置,不是在分析時設置。例 下例導致在含有其它 Transact-SQL 語句的事務中發(fā)違反外鍵錯誤。在第個語句集中產(chǎn)錯誤,但其它語句均成功執(zhí)且事務成功提交。在第個語句集中,SET XACT_ABORT 設置為 ON。這導致

9、語句錯誤使批處理終,并使事務回滾。 CREATE TABLE t1 (a int PRIMARY KEY)CREATE TABLE t2 (a int REFERENCES t1(a)GOINSERT INTO t1 VALUES (1)INSERT INTO t1 VALUES (3)INSERT INTO t1 VALUES (4)INSERT INTO t1 VALUES (6)GOSET XACT_ABORT OFFGOBEGIN TRANINSERT INTO t2 VALUES (1)INSERT INTO t2 VALUES (2) /* Foreign key error */

10、INSERT INTO t2 VALUES (3)COMMIT TRANGOSET XACT_ABORT ONGOBEGIN TRANINSERT INTO t2 VALUES (4)INSERT INTO t2 VALUES (5) /* Foreign key error */INSERT INTO t2 VALUES (6)COMMIT TRANGOSAVE TRANSACTION在事務內(nèi)設置保存點。語法 SAVE TRAN SACTION savepoint_name | savepoint_variable 參數(shù) savepoint_name是指派給保存點的名稱。保存點名稱必須符合標

11、識符規(guī)則,但只使前 32 個字符。savepoint_variable是戶定義的、含有有效保存點名稱的變量的名稱。必須 char、varchar、nchar 或 nvarchar 數(shù)據(jù)類型聲明該變量。 注釋戶可以在事務內(nèi)設置保存點或標記。保存點定義如果有條件地取消事務的部分,事 務可以返回的位置。如果將事務回滾到保存點,則必須(如果需要,使更多的 Transact-SQL 語句和 COMMIT TRANSACTION 語句)繼續(xù)完成事務,或者必須(通過將事務回滾到其起始點)完全取消事務。若要取消整個事務,請使 ROLLBACK TRANSACTION transaction_name 格式。這

12、將撤消事務的所 有語句和過程。Note:1: 在由 BEGIN DISTRIBUTED TRANSACTION 顯式啟動或從本地事務升級來的分布式事務中,不持 SAVETRANSACTION。2:當事務開始時,將直控制事務中所使的資源直到事務完成(也就是鎖定)。當將事務的部分回滾到保存點時,將繼續(xù)控制資源直到事務完成(或者回滾全部事務)。例:begin transactionsave transaction Ainsert into demo values(BB,B term)rollback TRANSACTION Acreate table demo2(name varchar(10),a

13、ge int)insert into demo2(name,age) values(lis,1)commit transactionROLLBACK TRANSACTION 將顯式事務或隱性事務回滾到事務的起點或事務內(nèi)的某個保存點。語法ROLLBACK TRAN SACTION transaction_name | tran_name_variable | savepoint_name | savepoint_variable 參數(shù)transaction_name是給 BEGIN TRANSACTION 上的事務指派的名稱。transaction_name 必須符合標識符規(guī)則,但只使事務名稱的

14、前 32 個字符。嵌套事務時,transaction_name 必須是來最遠的 BEGIN TRANSACTION 語句的名稱。tran_name_variable是戶定義的、含有有效事務名稱的變量的名稱。必須 char、varchar、nchar 或 nvarchar 數(shù)據(jù)類型聲明該變量。savepoint_name是來 SAVE TRANSACTION 語句的 savepoint_name。savepoint_name 必須符合標識符規(guī)則。當條件回滾只影響事務的部分時使 savepoint_name。savepoint_variable是戶定義的、含有有效保存點名稱的變量的名稱。必須 ch

15、ar、varchar、nchar 或 nvarchar 數(shù)據(jù)類型聲明該變量。注釋 ROLLBACK TRANSACTION 清除事務的起點或到某個保存點所做的所有數(shù)據(jù)修改。ROLLBACK 還釋放由事務控制的資源。不帶 savepoint_name 和 transaction_name 的 ROLLBACK TRANSACTION 回滾到事務的起點。嵌套事務時,該語句將所有內(nèi)層事務回滾到 最遠的 BEGIN TRANSACTION 語句。在這兩種情況下,ROLLBACK TRANSACTION 均將 TRANCOUNT 系統(tǒng)函數(shù)減為0。ROLLBACKTRANSACTION savepoint

16、_name 不減少 TRANCOUNT。Note:ROLLBACK TRANSACTION 語句若指定 savepoint_name 則不釋放任何鎖。在由 BEGIN DISTRIBUTED TRANSACTION 顯式啟動或從本地事務升級來的分布式事務中,ROLLBACK TRANSACTION 不能引savepoint_name。在執(zhí) COMMIT TRANSACTION 語句后不能回滾事務。在事務內(nèi)允許有重復的保存點名稱,但 ROLLBACK TRANSACTION 若使重復的保存點名稱,則只回滾到最近的使該保存點名稱的SAVE TRANSACTION。在存儲過程中,不帶 savepoi

17、nt_name 和 transaction_name 的 ROLLBACK TRANSACTION 語句將所有語句回滾到最遠的BEGINTRANSACTION。在存儲過程中,ROLLBACK TRANSACTION 語句使 TRANCOUNT 在觸發(fā)器完成時的值不同于調(diào)該存儲過程時的TRANCOUNT 值,并且成個信息。該信息不影響后的處理。如果在觸發(fā)器中發(fā)出 ROLLBACK TRANSACTION:將回滾對當前事務中的那點所做的所有數(shù)據(jù)修改,包括觸發(fā)器所做的修改。觸發(fā)器繼續(xù)執(zhí) ROLLBACK 語句之后的所有其余語句。如果這些語句中的任意語句修改數(shù)據(jù),則不回滾這些修改。執(zhí)其余的語句不會激發(fā)

18、嵌套觸發(fā)器。在批處理中,不執(zhí)所有位于激發(fā)觸發(fā)器的語句之后的語句。每次進觸發(fā)器,TRANCOUNT 就增加 1,即使在動提交模式下也是如此。(系統(tǒng)將觸發(fā)器視作隱性嵌套事務。)在存儲過程中,ROLLBACK TRANSACTION 語句不影響調(diào)該過程的批處理中的后續(xù)語句;將執(zhí)批處理中的后續(xù)語句。在觸發(fā)器中,ROLLBACK TRANSACTION 語句終含有激發(fā)觸發(fā)器的語句的批處理;不執(zhí)批處理中的后續(xù)語句。ROLLBACK TRANSACTION 語句不成顯給戶的信息。如果在存儲過程或觸發(fā)器中需要警告,請使 RAISERROR 或 PRINT 語句。RAISERROR 是于指出錯誤的選語句。ROL

19、LBACK 對游標的影響由下三個規(guī)則定義:當 CURSOR_CLOSE_ON_COMMIT 設置為 ON 時,ROLLBACK 關閉但不釋放所有打開的游標。當 CURSOR_CLOSE_ON_COMMIT 設置為 OFF 時,ROLLBACK 不影響任何打開的同步 STATIC 或 INSENSITIVE 游標不影響已完全填充的異步 STATIC 游標。將關閉但不釋放任何其它類型的打開的游標。對于導致終批處理并成內(nèi)部回滾的錯誤,將釋放在含有該錯誤語句的批處理內(nèi)聲明的所有游標。不論游標的類型或 CURSOR_CLOSE_ON_COMMIT 的設置,所有游標均將被釋放,其中包括在該錯誤批處理所調(diào)的

20、存儲過程內(nèi)聲明的游標。在該錯誤批處理之前的批處理內(nèi)聲明的游標以規(guī)則 1 和 2 為準。死鎖錯誤就屬于這類錯誤。在觸發(fā)器中發(fā)出的 ROLLBACK 語句也動成這類錯誤。 權(quán)限ROLLBACK TRANSACTION 權(quán)限默認授予任何有效戶。例:begin transactionsave transaction Ainsert into demo values(BB,B term)rollback TRANSACTION A- select * into demo2 from demo1create table demo2(name varchar(10),age int)insert into

21、demo2(name,age) values(lis,1)rollback transactionCOMMIT TRANSACTION標志個成功的隱性事務或戶定義事務的結(jié)束。如果 TRANCOUNT 為 1,COMMITTRANSACTION 使得從事務開始以來所執(zhí)的 所有數(shù)據(jù)修改成為數(shù)據(jù)庫的永久部分,釋放連接占的資源,并將 TRANCOUNT 減少到 0。如果TRANCOUNT 于 1,則COMMITTRANSACTION 使 TRANCOUNT 按 1 遞減。只有當事務所引的所有數(shù)據(jù)的邏輯都正確時,發(fā)出 COMMIT TRANSACTION 命令。COMMIT WORK標志事務的結(jié)束。語法

22、COMMIT WORK 注釋此語句的功能與 COMMIT TRANSACTION 相同,但 COMMIT TRANSACTION 接受戶定義的事務名稱。這個指定或沒有指定可選關鍵字WORK 的 COMMIT 語法與 SQL-92 兼容例:begin transaction ainsert into demo values(BB,B term)commit TRANSACTION A隱性事務當連接以隱性事務模式進操作時,SQL Server將在提交或回滾當前事務后動啟動新事務。須描述事務的開始,只需提交或回滾每個事務。隱性事務模式成連續(xù)的事務鏈。在為連接將隱性事務模式設置為打開之后,當 SQL

23、Server 次執(zhí)下列任何語句時,都會動啟動個事務:INSERTOPENREVOKESELECTFETCHTRUNCATE TABLEUPDATEGRANT在發(fā)出 COMMIT 或 ROLLBACK 語句之前,該事務將直保持有效。在第個事務被提交或回滾之后,下次當連接執(zhí)這些語句中的任何語句時,SQL Server 都將動啟動個新事務。SQL Server 將不斷地成個隱性事務鏈, 直到隱性事務模式關閉為例:begin transactionsave transaction Ainsert into demo values(BB,B term)rollback TRANSACTION Acrea

24、te table demo2(name varchar(10),age int)insert into demo2(name,age) values(lis,1)rollback transaction- 在 Create table demo2 時 SQL Server 已經(jīng)隱式創(chuàng)建個Trans,知道提交或回滾嵌套事務處理:1: Trans 嵌套,將內(nèi)部的trans 合并到外部并形成個Trans.begin tran t1-In the first trans .Insert into demo2(name,age) values(lis,1)-Second Trans begin tran

25、saction t2insert into demo values(BB,B term)commit transaction t2-In the first trans .Insert into demo2(name,age) values(lis,2)rollback transaction t1Note:在系列嵌套的事務中個事務名給多個事務命名對該事務沒有什么影響。系統(tǒng)僅登記第個(最外部的)事務名。回滾到其它任何名字(有效的保存點名除外)都會產(chǎn)錯誤。事實上,任何在回滾之前執(zhí)的語句都沒有在錯誤發(fā)時回滾。這語句僅當外層的事務回滾時才會進回滾。例:內(nèi)部事務回滾SQL server 報錯。begi

26、n tran t1Insert into demo2(name,age) values(lis,1)-Second Trans-Server: Msg 6401, Level 16, State 1, Line 6-Cannot roll back t2. No transaction or savepoint of that name was found.begin transaction t2insert into demo values(BB,B term)rollback transaction t2-In the first trans .Insert into demo2(name,age) values(lis,2)commit transaction t1例: 內(nèi)部事務提交SQL server 不會報錯。 begin tran t1Insert into demo2(name,age) values(lis,1

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論