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

下載本文檔

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

文檔簡(jiǎn)介

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

溫馨提示

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

評(píng)論

0/150

提交評(píng)論