




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第12章事務(wù)和鎖在數(shù)據(jù)庫的數(shù)據(jù)處理過程中,經(jīng)常會有這樣的情況,連續(xù)執(zhí)行一組操作,要求如果執(zhí)行完成,則全部執(zhí)行完成,如果出現(xiàn)錯誤則全部回退到未執(zhí)行時,即確保一系列相關(guān)的更改不會中斷,以防止只有部分更改完成。本章介紹SQLServer的事務(wù)處理機制改時如何使用事務(wù)及SQLServer的鎖機制,以防止用戶之間的相互影響,并使應(yīng)用程序能夠保證數(shù)據(jù)的完整性。12.1事務(wù)事務(wù)可以看作單個的處理單元。如果某一事務(wù)執(zhí)行,則在該事務(wù)中的所有操作均會執(zhí)行,記錄在數(shù)據(jù)庫中,成為持久的組成部分。如果遇到問題,則必須全部取消或回滾,所有處理均被清除。SQLServer2008數(shù)據(jù)庫包括自動提交事務(wù)、顯式事務(wù)、隱式事務(wù)和批處理級事務(wù)等四種形式。其中,自動提交事務(wù),是指每條單獨的語句都是一個事務(wù),執(zhí)行語句即提交事務(wù);顯式事務(wù)是指以BEGINTRANSACTION語句開始,以COMMIT或ROLLBACK語句結(jié)束事務(wù);隱式事務(wù)則為在前一個事務(wù)完成時,新事務(wù)隱式啟動,但每個事務(wù)仍以COMMIT或ROLLBACK語句顯式完成;批處理級事務(wù)則只能應(yīng)用于多個活動結(jié)果集。12.1.1事務(wù)的特點事務(wù)是作為單個處理單元執(zhí)行的一組操作,要求遵循以下屬性即原子性、一致性、隔離性和持久性性,滿足這樣的屬性的邏輯處理單元稱之為一個事務(wù)。原子性:一致性:隔離性:持久性:12.1.2啟動事務(wù)(BEGINTRANSACTION)BEGINTRANSACTION表示事務(wù)的起點。運行事務(wù)如果遇上錯誤,在BEGINTRANSACTION之后的所有數(shù)據(jù)改動都能進行回滾,將數(shù)據(jù)返回到已知的一致狀態(tài)。而每個事務(wù)繼續(xù)執(zhí)行直到它無誤地完成并且用COMMITTRANSACTION對數(shù)據(jù)庫作永久的改動,或者遇上錯誤并且用ROLLBACKTRANSACTION語句恢復(fù)所有改動。1.BEGINTRANSACTION語句的語法2.使用BEGINTRANSACTION的示例12.1.3保存事務(wù)(SAVETRANSACTION)用戶可以在事務(wù)內(nèi)設(shè)置保存點。保存點用來定義在按條件取消某個事務(wù)的一部分時,該事務(wù)可以返回的一個保存點位置。如果將事務(wù)回滾到保存點,則根據(jù)需要必須完成其他剩余的語句后提交事務(wù),或者將事務(wù)回滾到起始點完全取消事務(wù)。1.SAVETRANSACTION的語法2.使用SAVETRANSACTION的示例示例:以下示例使用SAVETRANSACTION在事務(wù)內(nèi)設(shè)置保存點a,b,通過并使用回滾驗證保存點的位置,具體操作可以操作以下步驟。(1)單擊“開始|所有程序|MicrosoftSQLServer2008|SQLServerManagementStudio”命令,啟動SQLServerManagementStudio工具。在SQLServerManagementStudio工具中,單擊“新建查詢”按鈕,打開一個“新建查詢”窗口。(2)在查詢編輯器中,輸入代碼,并單擊“執(zhí)行”按鈕。12.1.4提交事務(wù)(COMMITTRANSACTION)提交事務(wù)標(biāo)志著從BEGINTRANSACTION開始的事務(wù)到提交時的結(jié)束。在提交事務(wù)是,如果@@TRANCOUNT函數(shù)的值為1,COMMITTRANSACTION使得自從事務(wù)開始以來,所執(zhí)行的所有數(shù)據(jù)提交到數(shù)據(jù)庫,全部生效,同時釋放事務(wù)所占用的資源,同時將@@TRANCOUNT函數(shù)值減少到0。如果@@TRANCOUNT大于1,則COMMITTRANSACTION使@@TRANCOUNT按1遞減并且事務(wù)將保持活動狀態(tài)。12.1.5回滾事務(wù)(ROLLBACKTRANSACTION)用戶可以使用ROLLBACKTRANSACTION清除自事務(wù)的起點或到某個保存點,所做的所有數(shù)據(jù)的操作,回滾后系統(tǒng)將釋放由事務(wù)控制的資源。1.ROLLBACKTRANSACTION的語法2.使用ROLLBACKTRANSACTION的示例示例:以下示例建立數(shù)據(jù)表并向表中插入數(shù)據(jù),通過“事務(wù)”管理UPDATE語句的更新行為,遇到錯誤,進行事務(wù)回滾,具體操作可以參考以下步驟。(1)單擊“開始|所有程序|MicrosoftSQLServer2008|SQLServerManagementStudio”命令,啟動SQLServerManagementStudio工具。在SQLServerManagementStudio工具中,單擊“新建查詢”按鈕,打開一個“新建查詢”窗口。(2)在查詢編輯器中,輸入代碼,并單擊“執(zhí)行”按鈕。12.1.6自動提交事務(wù)事實上,SQLServer2008數(shù)據(jù)庫將一切數(shù)據(jù)處理都以事務(wù)的形式運行,也就是說SQLServer2008無論是否顯示的定義事務(wù),都會以事務(wù)的方式進行。如果用戶沒有顯示的為代碼定義事務(wù),SQLServer2008數(shù)據(jù)庫會自動為該處理定義事務(wù)。由SQLServer定義的事務(wù)稱作自動提交事務(wù)。示例:以下示例向數(shù)據(jù)表中插入違反約束的記錄,示例將以自動提交事務(wù)的模式進行事務(wù)管理,出現(xiàn)錯誤進行提示,具體操作請參考以下步驟。(1)單擊“開始|所有程序|MicrosoftSQLServer2008|SQLServerManagementStudio”命令,啟動SQLServerManagementStudio工具。(2)在SQLServerManagementStudio工具中,單擊“新建查詢”按鈕,打開一個“新建查詢”窗口。(3)在查詢編輯器中,使用CREATETABLE語句來創(chuàng)建數(shù)據(jù)表Trans,通過在數(shù)據(jù)表中插入數(shù)據(jù),來檢驗事務(wù)的行為。(4)向表Trans中插入三個新行,根據(jù)不同的語法示例進行事務(wù)的檢驗。在程序窗口中鍵入并執(zhí)行以下語句。(5)鍵入并執(zhí)行以下SELECT語句來檢查記錄是否已成功插入到表Trans中。(6)從上結(jié)果可以看出,第二行插入語句沒有被提交,但是第一行和第三行被成功插入。12.1.7顯式事務(wù)顯式事務(wù)就是顯式的在代碼中,定義事務(wù)的開始和結(jié)束的事務(wù)。顯示事務(wù)具體的語法要求包括,使用BEGINTRANSACTION標(biāo)記顯式連接事務(wù)的起始點、使用COMMITTRANSACTION或COMMITWORK設(shè)為事務(wù)正確運行的結(jié)束點、使用ROLLBACKTRANSACTION或ROLLBACKWORK來清除遇到錯誤的事務(wù),回滾到事務(wù)的起始點。12.1.8隱式事務(wù)隱式事務(wù)式是SQLServer2008數(shù)據(jù)庫提供的另一種事務(wù)處理模式。在使用這種模式時,SQLServer在沒有事務(wù)存在的情況下會開始一個事務(wù),但不會像在自動模式中那樣自動執(zhí)行COMMIT或ROLLBACK語句,事務(wù)必須顯式結(jié)束。即在發(fā)出COMMIT或ROLLBACK語句之前,該事務(wù)將一直保持有效。在第一個事務(wù)被提交或回滾之后,下次當(dāng)連接執(zhí)行以上任何語句時,數(shù)據(jù)庫引擎實例都將自動啟動一個新事務(wù)。該實例將不斷地生成隱性事務(wù)鏈,直到隱性事務(wù)模式關(guān)閉為止。12.1.9事務(wù)嵌套事務(wù)可以進行嵌套,但是只有在顯式模式下,事務(wù)才可以嵌套。這主要是為了支持存儲過程的業(yè)務(wù)處理的需要。1.模擬事務(wù)嵌套的示例2.使用@@TRANCOUNT函數(shù)提交嵌套事務(wù),可以使用@@TRANCOUNT函數(shù)查看嵌套的層級。每個BEGINTRANSACTION語句使@@TRANCOUNT增加1。每個COMMITTRANSACTION或COMMITWORK語句使@@TRANCOUNT減去1。沒有事務(wù)名稱的ROLLBACKWORK或ROLLBACKTRANSACTION語句將回滾所有嵌套事務(wù),并使@@TRANCOUNT減小到0。使用一組嵌套事務(wù)中最外部事務(wù)的事務(wù)名稱的ROLLBACKTRANSACTION將回滾所有嵌套事務(wù),并使@@TRANCOUNT減小到0。12.2管理并發(fā)數(shù)據(jù)訪問當(dāng)用戶同時訪問一種資源時,被視為并發(fā)訪問。并發(fā)數(shù)據(jù)訪問需要某些機制,以防止用戶試圖修改其他用戶正在使用的資源時,產(chǎn)生數(shù)據(jù)處理問題。12.2.1并發(fā)的影響并發(fā)情況下,修改數(shù)據(jù)的用戶,會影響同時讀取或修改相同數(shù)據(jù)的其他用戶,這些用戶可以并發(fā)訪問數(shù)據(jù)。如果數(shù)據(jù)存儲系統(tǒng)沒有并發(fā)訪問機制,可能會造成以下問題:(1)丟失更新。(2)出現(xiàn)未提交的依賴關(guān)系(稱為臟讀)。(3)出現(xiàn)不一致的分析(稱為不可重復(fù)讀)。(4)幻讀。12.2.2并發(fā)控制的類型當(dāng)許多人試圖同時修改數(shù)據(jù)庫中的數(shù)據(jù)時,必須實現(xiàn)一個控制系統(tǒng),使一個人所做的修改不會對他人所做的修改產(chǎn)生負面影響——這稱為并發(fā)控制。并發(fā)控制理論根據(jù)建立并發(fā)控制的方法而分為兩類:(1)悲觀并發(fā)控制,是一個鎖定系統(tǒng),可以阻止用戶以影響其他用戶的方式修改數(shù)據(jù)。如果用戶執(zhí)行的操作,導(dǎo)致應(yīng)用了某個鎖,只有這個鎖的所有者釋放該鎖,其他用戶才能執(zhí)行與該鎖沖突的操作。(2)樂觀并發(fā)控制,在樂觀并發(fā)控制中,用戶讀取數(shù)據(jù)時不鎖定數(shù)據(jù)。當(dāng)一個用戶更新數(shù)據(jù)時,系統(tǒng)將進行檢查,查看該用戶讀取數(shù)據(jù)后其他用戶是否又更改了該數(shù)據(jù)。如果其他用戶更新了數(shù)據(jù),將產(chǎn)生一個錯誤。一般情況下,收到錯誤信息的用戶將回滾事務(wù)并重新開始。12.2.3事務(wù)的隔離級別隔離屬性是事務(wù)的基本屬性之一,它能夠使事務(wù)免受其它并發(fā)事務(wù)執(zhí)行的更新的影響。每個事務(wù)的隔離級別是可以自定義的。12.3鎖定鎖定是SQLServer數(shù)據(jù)庫引擎用來同步多個用戶同時對同一個數(shù)據(jù)塊的訪問的一種機制。每個事務(wù)對所依賴的資源(如行、頁或表)可以請求不同類型的鎖。鎖可以阻止其他事務(wù)造成的負面影響。當(dāng)事務(wù)不再依賴鎖定的資源時,可以釋放鎖。12.3.1可以鎖定的資源數(shù)據(jù)庫引擎通常必須獲取多層次級別上的鎖才能完整地保護資源。這組多層次級別上的鎖稱為鎖層次結(jié)構(gòu)。例如,為了完整地保護對索引的讀取,數(shù)據(jù)庫引擎實例可能必須獲取行上的共享鎖以及頁和表上的意向共享鎖。12.3.2鎖模式SQLServer2008數(shù)據(jù)庫引擎使用不同的鎖模式鎖定資源,這些鎖模式確定了并發(fā)事務(wù)訪問資源的方式。12.3.3死鎖在兩個或多個任務(wù)中,如果每個任務(wù)鎖定了其他任務(wù)試圖鎖定的資源,此時會造成這些任務(wù)永久阻塞,從而出現(xiàn)死鎖。在開發(fā)過程中,用戶可能氏錯誤的進行了程序的編寫產(chǎn)生死鎖,數(shù)據(jù)庫管理者有時可以會面對處理死鎖的情況。1.死鎖的示例列舉一個經(jīng)常出現(xiàn)的死鎖情況:事務(wù)A獲取了行1的共享鎖,事務(wù)B獲取了行2的共享鎖。事務(wù)A請求行2的排他鎖,但在事務(wù)B完成并釋放其對行2持有的共享鎖之前被阻塞。事務(wù)B請求行1的排他鎖,但在事務(wù)A完成并釋放其對行1持有的共享鎖之前被阻塞。事務(wù)A必須在事務(wù)B完成之后才能完成,但事務(wù)B被事務(wù)A阻塞。這種情況也稱為循環(huán)依賴關(guān)系:事務(wù)A依賴于事務(wù)B,而事務(wù)B又依賴于事務(wù)A,從而形成了一個循環(huán)。2.減少死鎖的方式12.4本章小結(jié)事務(wù)是作為單個處理單元執(zhí)行的一組操作,要求遵循原子性、一致性、隔離性和持久性性等屬性。本章講解了如何啟用、保存、提交、回滾事務(wù)及自動提交事務(wù)。并發(fā)情況下,修改數(shù)據(jù)的用戶,會影響同時讀取或修改相同數(shù)據(jù)的其他用
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)墾經(jīng)營管理辦法
- 農(nóng)村養(yǎng)犬管理辦法
- 農(nóng)村水庫管理辦法
- 農(nóng)林用地管理辦法
- 農(nóng)藥廢棄管理辦法
- 農(nóng)資管理辦法
- 決算資金管理辦法
- 出境樣品管理辦法
- 分包支付管理辦法
- 分拆上市管理辦法
- 用人單位職業(yè)衛(wèi)生檔案(加油站)
- GB/T 35786-2017機動車電子標(biāo)識讀寫設(shè)備通用規(guī)范
- GB/T 19378-2003農(nóng)藥劑型名稱及代碼
- 《經(jīng)濟學(xué)基礎(chǔ)》教案
- DB37T242-2021建筑消防設(shè)施檢測技術(shù)規(guī)程
- 供應(yīng)商庫入庫資料
- 橋臺裂縫加固處理方案
- 腳手架架在樓板上驗算書
- ThinkPad X220 拆機解析深入分析
- Toolbox中文使用說明(圖例)
- 第3章沼氣發(fā)酵原理與設(shè)計
評論
0/150
提交評論