Oracle之事務與并發(fā)控制.ppt_第1頁
Oracle之事務與并發(fā)控制.ppt_第2頁
Oracle之事務與并發(fā)控制.ppt_第3頁
Oracle之事務與并發(fā)控制.ppt_第4頁
Oracle之事務與并發(fā)控制.ppt_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第十一章事務與并發(fā)控制,當用戶建立與數(shù)據(jù)庫的會話后,用戶就可以對數(shù)據(jù)庫的進行操作,而用戶對數(shù)據(jù)庫的操作是通過一個個事務來進行的。事務確保用戶對數(shù)據(jù)庫邏輯操作的完整性和一致性,這里的邏輯操作是指用戶根據(jù)業(yè)務邏輯而進行的一系列操作。,本章學習目標:,事務的概念,主要了解事務的ACID特性、處理過程。在Oracle中設置事務的隔性層事務處理語句事務的并發(fā)控制最基本鎖的作用和使用死鎖的發(fā)生鎖定的多粒度性Oracle中的多粒度意向鎖,11.1了解事務,在介紹Oracle10g的事務處理之前,首先需要理解什么是數(shù)據(jù)庫中的事務。事務其實是一個很簡單的概念,用戶每天都會遇到許多現(xiàn)實生活中類似事務的示例。例如,商業(yè)活動的中的交易,對于任何一筆交易來說,都涉及兩個基本動作:一手交錢和一手交貨。這兩個動作構(gòu)成了一個完整的商業(yè)交易,缺一不可。也就是說,這兩個動作都成功發(fā)生,說明交易完成;如果只發(fā)生一個動作,則交易失敗。所以,為了保證交易能夠正常完成,需要某種方法來保證這些操作的整體性,即這些操作要么都成功,要么都失敗。,11.2事務的ACID特性,一組SQL語句操作要成為事務,數(shù)據(jù)庫管理系統(tǒng)必須保證這組操作的原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)和持久性(Durability),這就是事務的ACID特性。,11.2.1原子性(Atomicity),事務的原子性是指事務中包含的所有操作,要么全做,要么全不做;是一個最小和不可分割(原子)的操作,以確保數(shù)據(jù)庫的一致性。例如:用戶SCOTT在同一個銀行有A,B兩個帳號,分別存有2000元和1000元,這時候SCOTT使用A帳號轉(zhuǎn)賬500元到B帳號,轉(zhuǎn)賬的時候先從A帳號扣掉500,A的帳號現(xiàn)在只有1500,B帳號在同一時刻只有1000元,這時候必須在B帳號增加500元,帳號數(shù)據(jù)才是正確的,如果在B帳號增加500元的操作的不成功,那么必須在A帳號上的操作必須回滾,以確保帳號的數(shù)據(jù)的完整性。所以我們把這兩個對數(shù)據(jù)庫的操作(insert,delete,update)做為一個操作單元,它們是不能分割的,即事務的原子性。(注意:存儲過程與觸發(fā)器都是經(jīng)過了原子處理。),11.2.2一致性(Consistency),所謂一致性是指數(shù)據(jù)庫中事務操作前和事務處理后,其中的數(shù)據(jù)必須都滿足業(yè)務規(guī)則約束。如上述的例子,轉(zhuǎn)賬前后的總金額必須相同。雖然在事務的過程會出現(xiàn)短暫的不一致,這也是暫時的,當事務提交時,數(shù)據(jù)庫必須恢復到一致狀態(tài)。,11.2.3隔離性(Isolation),隔離性是數(shù)據(jù)庫允許多個并發(fā)事務同時對其中的數(shù)據(jù)進行讀寫和修改能力,隔離性可以防止多個事務在并發(fā)執(zhí)行時,由于它們的操作命令交叉執(zhí)行而導致數(shù)據(jù)的不一致狀態(tài)。,11.2.4持久性(Durability),事務的持久性表示為:當事務處理結(jié)束后,該事務對數(shù)據(jù)的修改是永久的,即使是系統(tǒng)遇到故障的情況下也不會丟失的。,11.3事務控制語句,在Oracle中沒有提供開始事務處理語句,所有的事務都是隱式開始的。也就是說,在Oracle中用戶不可以顯式使用命令來開始一個事務。Oracle認為第一條修改數(shù)據(jù)庫的語句,或者一些要求事務處理的場合都是事務隱式的開始。但是,當用戶想要終止一個事務處理時,必須顯式使用COMMIT和ROLLBACK語句結(jié)束。針對事務的ACID特點,Oracle提供了如下語句對事務進行控制:SETTRANSACTION設置事務的屬性SETCONSTRAINS在當前事務中設置約束模式SAVEPOINT在事務中建立一個存儲點RELEASESAVEPOINTROLLBACKCOMMIT,11.3.1設置事務屬性,SETTRANSACTION該語句可用來設置事務各種屬性,而且是在事務處理中使用的第一個語句。它可以讓用戶對事務以下的屬性進行設置:指定事務的隔離層規(guī)定事務回滾時所使用的存儲空間命名事務(注意:SETTRANSACTION只對當前要處理的事務進行設置,當事務結(jié)束時,對事務的屬性的設置也將失效),事務隔離層定義了一個事務與其他事務的隔離程度。在并發(fā)事務中會發(fā)生如下異常:錯讀錯讀就是事務A對數(shù)據(jù)進行修改,而另外事務B讀取了修改后的數(shù)據(jù),由于某種原因A取消了對數(shù)據(jù)的修改,使數(shù)據(jù)返回到原來的狀態(tài),而B原來讀取的數(shù)據(jù)與數(shù)據(jù)庫的數(shù)據(jù)不符。非重復讀是指事務A讀取了數(shù)據(jù),而事務B隨后更改了該數(shù)據(jù),而A再次讀取該數(shù)據(jù)時,就會發(fā)現(xiàn)數(shù)據(jù)已經(jīng)變化,同一個事務前后兩次讀取的數(shù)據(jù)不相同。假讀事務A基于某個條件查找數(shù)據(jù)后,事務B更新了同一個表中的數(shù)據(jù),當A再次根據(jù)相同的搜索條件返回了不同的行。,上述三種異常的發(fā)生,都與事務的隔離層的設置有關(guān)。選擇隔離層:READCOMMITTED這是Oracle默認的隔離層SERIALIZABLE序列化,事務與事務完全隔開READONLY和READWRITE當使用READONLY選項時,事務不能有任何修改數(shù)據(jù)庫中數(shù)據(jù)的語句。它是SERIALIZABLE的子集。READWRITE是默認設置。,建立SETTRANSACTION語句SETTRANSACTIONREADONLYSETTRANSACTIONREADWRITESETTRANSACTIONISOLATIONLEVELCOMMITTEDSETTRANSACTIONISOLATIONLEVELSERIALIZABLE對于大部分應用來說,READCOMMITTED是最合適的隔離層。雖然也存在非重復讀和假讀現(xiàn)象,但是它能提供較高的并發(fā)性。,11.3.2結(jié)束事務,雖然Oracle采用隱式開始一個事務,在結(jié)束時必須使用相關(guān)的事務控制語句顯式結(jié)束,下列情況Oracle會認為一個事務結(jié)束:COMMITROLLBACK如有事務中使用了存儲點,則只取消存儲點后的事務處理,而且事務并不會終止DDL執(zhí)行時(意味著前面的DML操作已經(jīng)COMMIT)用戶斷開連接時(disconn)用戶進程意外,這時用戶當前的事務被回滾,11.3.3存儲點,在事務過程中,如果發(fā)生了錯誤并用rollback進行了回滾,則在整個事務處理中對數(shù)據(jù)所做的所有修改都將被撤銷。這對一個較小的事務時并沒有什么問題。但是事務非常龐大時,這將浪費大量的資源,解決這個問題的方法就是使用存儲點。,11.4并發(fā)控制,對于多用戶數(shù)據(jù)庫系統(tǒng)而言,當多個用戶并發(fā)地操作時,會產(chǎn)生多個事務同時操作同一數(shù)據(jù)的情況。若對并發(fā)操作不加控制就可能會發(fā)生讀取和寫入不正確的數(shù)據(jù),破壞數(shù)據(jù)庫的一致性。所以數(shù)據(jù)庫管理系統(tǒng)必須提供并發(fā)控制機制。因此,一個數(shù)據(jù)庫管理系統(tǒng)性能的優(yōu)劣,很大一部分取決于并發(fā)控制。所謂并發(fā)控制是指要用正確的方式實現(xiàn)事務的并發(fā)操作,避免造成數(shù)據(jù)的不一致性。為了維護事務的一致性,Oracle使用了鎖機制防止其他用戶修改另外一個未完成事務中的數(shù)據(jù)。,11.4.1鎖,鎖是一種控制共享資源并發(fā)訪問的一種機制。比如事務T1要訪問某個數(shù)據(jù)表,在它訪問前需要對該數(shù)據(jù)表加鎖。此時事務T2要訪問該數(shù)據(jù)表時必須等到T1對該數(shù)據(jù)表解鎖后才能訪問。鎖是Oracle自動管理的,也可由用戶使用LOCKTABLE顯式對要訪問的資源加鎖,事務的開始和結(jié)束決定了鎖的持有和釋放。Oracle中的鎖可分成三類:DML鎖DDL鎖內(nèi)部鎖,11.4.2鎖模式,事務對數(shù)據(jù)庫的操作可以概括為讀和寫,當兩個事務對同一個數(shù)據(jù)項進行操作時,可能的情況包括:讀-讀、寫-讀、讀-寫、寫-寫。除了讀-讀,其它都可能導致數(shù)據(jù)的不一致,因此要通過不同模式的鎖來避免數(shù)據(jù)不一致的發(fā)生。,共享鎖:locktableempinsharemode;排他鎖:locktabledeptinexclusivemode;行級共享鎖:locktablesalgradeinrowsharemode;行級排他鎖:locktableempinrowexclusivemode;共享行級排他鎖:locktableempinsharerowexclusivemode;,11.5鎖粒度,鎖粒度是指被鎖定的數(shù)據(jù)對象的大小稱為鎖粒度。鎖粒度與數(shù)據(jù)庫系統(tǒng)的并發(fā)度和并發(fā)控制的開銷密切相關(guān)。鎖粒度越大,數(shù)據(jù)庫中所能夠使用的資源也就越少,并發(fā)度也就越小,系統(tǒng)開銷也就越?。环粗?,鎖的粒度越小,并發(fā)度也就越大,但系統(tǒng)的開銷也就越大。一般來講,數(shù)據(jù)庫中鎖的粒度可以分為4個級別:數(shù)據(jù)庫級、表級、行級和列級,11.5.1TX鎖(行級鎖、事務鎖),TX鎖定本義是Transaction鎖(行級鎖、事務鎖),當一個事務執(zhí)行更新數(shù)據(jù)操作時,它即獲得一個TX鎖,直至該事務結(jié)束時才釋放該鎖。一個TX鎖可以鎖定該事務涉及的多行數(shù)據(jù)。TX鎖是Oracle支持鎖定的最低級別。在更新過程中,行級別鎖會阻止這一行上的任何其他DML操作發(fā)生。,11.5.2TM鎖(表級鎖),Oracle的行級鎖雖然只有一種(TX),但是TM(表級鎖)類型共有5種鎖模式:S鎖X鎖RS鎖RX鎖SRX鎖由于表是由行組成的,所以向某個表加鎖時,Oracle一方面需要檢查鎖與表上原有的表級鎖是否相容,另一方面還要檢查鎖是否與表中的每一行的鎖是否相容。,11.5.3數(shù)據(jù)庫級鎖,數(shù)據(jù)庫級別的鎖將鎖定整個數(shù)據(jù)庫,以禁止任何新會話和新事務??梢允褂靡幌抡Z句更改數(shù)據(jù)庫的限制性(數(shù)據(jù)庫級鎖)模式中:altersyst

溫馨提示

  • 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

提交評論