第四章鎖的概念_第1頁
第四章鎖的概念_第2頁
第四章鎖的概念_第3頁
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡介

1、概述鎖是實現(xiàn)數(shù)據(jù)庫并發(fā)控制的一個非常重要的技術(shù)。當事務(wù)在對某個數(shù)據(jù) 對象進行操作前,先向系統(tǒng)發(fā)出請求,對其加鎖。加鎖后事務(wù)就對該數(shù)據(jù)對 象有了一定的控制,在該事務(wù)釋放鎖之前,其他的事務(wù)不能對此數(shù)據(jù)對象進 行更新操作。在數(shù)據(jù)庫中有兩種基木的鎖類型:排它鎖(exclusive locks,即x鎖)和 共享鎖(share locks,即s鎖)。當數(shù)據(jù)對象被加上排它鎖吋,其他的事務(wù)不 能對它修改。加了共享鎖的數(shù)據(jù)對象可以被其他事務(wù)讀取,也不能修改。根據(jù)保護的對象不同,oracle數(shù)據(jù)庫鎖可以分為以下幾大類:dml鎖(data locks,數(shù)據(jù)鎖),用于保護數(shù)據(jù)的完整性ddl鎖(dictionary l

2、ocks,字典鎖),用于保護數(shù)據(jù)庫對象的結(jié)構(gòu),如表、索引等的結(jié)構(gòu)定義z內(nèi)部鎖和円(internal locks and latches),保護數(shù)掘席的內(nèi)部結(jié)構(gòu)oracle使用系統(tǒng)變化號(scn)實現(xiàn)事務(wù)級的讀寫一致性dml鎖dml鎖的0的在于保證并發(fā)情況下的數(shù)據(jù)完整性,在oracle數(shù)據(jù)庫中,dml鎖主要包括tm鎖和tx鎖,其屮tm鎖稱為表級鎖,tx鎖稱為事務(wù)鎖 或行級鎖。1. 行級鎖當事務(wù)執(zhí)行數(shù)據(jù)庫插入、更新、刪除操作時,該事務(wù)自動獲得操作表中 操作行的排它鎖,行級沒有共享鎖;:select * from emp where deptno=20 for update 卜-不允許其他用戶對雇員

3、表的所有數(shù)據(jù)進行修改;:select * from emp for update:-如果己經(jīng)被鎖定,就不用等待:select * from emp for update nowait夂-如果己經(jīng)被鎖定,更新的時候等待5秒:;select * from emp for update wait 5;-查看鎖可以通過dba身份用戶訪問v$locked_object;select * from v$locked_object;2. 表-禱:_ -當事務(wù)獲得行鎖后,此事務(wù)也將自動獲得該行的表鎖(行排他鎖),以防止 其它事務(wù)進行ddl語句影響記錄行的更新行共享鎖(rs鎖2)允許其他用戶進行任何操作,禁止其

4、他用戶添加 排他鎖當前用戶執(zhí)行dml操作時,rs鎖會轉(zhuǎn)為rx鎖,如果其他用戶同時 操作該行,將無法執(zhí)行,如果操作不同行,正常執(zhí)行。:lock table emp in row share mode_夢_止_其他用p礎(chǔ)力i排他鱗和兩亨行排他鴿lock table emp in row exclusive modez共享鎖(r鎖4)其他用戶只能看,不能修改,不能加任何冇關(guān)排他的 鎖。如果當前用戶執(zhí)行dml,共享鎖轉(zhuǎn)化為共享行排他鎖srx 通常用在創(chuàng)建索引上實用。如create index:lock table emp in share mode痕他鍤(x< 6)/限制最強的表鎖?僅允許其他用

5、盧查詢該表的衧, 禁止其他修改和加鎖,通常用在修改表結(jié)構(gòu)如:alter table、drop table、drop index:lock table emp in exclusive mode的行,禁止修改,只可以加rs鎖:lock table emp in share row exclusive mode其屮share, exclusive用于表封鎖,其他用于行封鎖。1.鎖兼容性sxrsrxsrxn/asynynnyxnnnnnyrsynyyyyrxnnyynysrxnnynnyn/yyyyyyy表8-1 oracle的tm錟類型錢換式錢描迷sol掠作0none1null空select2ss

6、(row-s)行鈸共莩鎖is他對象只能查詢這駐數(shù)據(jù)行select for update. lock for update. lockrow share3sx(rjow-x)行級擇他錟,在提交前不允許做insert、update. delete. lock row share4s(shaw)共享談create index、lock share5srx(s/row-x)共莩行級排他鎖lock share row exclusive6x(exclusive)祥他談alter table. drop table, drop index、truncate table s lock exclusive2.

7、死鎖當兩個事務(wù)需要一組有沖突的鎖,而不能將事務(wù)繼續(xù)i去的話,就出現(xiàn) 死鎖。1)用戶a修改a表,事務(wù)不提交2)用戶b修改b表,事務(wù)不提交3)用戶a修改b表,阻塞4)用戶b修改a表,阻塞如果出現(xiàn)了死鎖,需要犧牲一方讓另外一方執(zhí)行,通常我們可以查詢出 當前出現(xiàn)的session鎖,并結(jié)束。select 'alter system kill session ”| |sid| |,| |serial#| from v$sessionwhere sid in (select sid from v$lock where block = 1);-將生成解鎖語句 例如:alter system khi s

8、ession '15,26:將產(chǎn)生的語句執(zhí)行,京尤可角軍鎖3. 悲觀鎖和樂觀鎖數(shù)據(jù)的鎖定分為兩種方法,第一種叫做悲觀鎖,第二種叫做樂觀鎖 z悲觀鎖:就是對數(shù)據(jù)的沖突采取一種悲觀的態(tài)度,也就是說假設(shè)數(shù)據(jù)肯定會沖突,所以在數(shù)據(jù)幵始讀取的時候就把數(shù)據(jù)鎖定住。z樂觀鎖:就是認為數(shù)據(jù)一般情況下不會造成沖突,所以在數(shù)據(jù)進行提交更新的時候,才會正式對數(shù)據(jù)的沖突與否進行檢測,如果發(fā)現(xiàn) 沖突了,則讓用戶返冋錯誤的信息,讓用戶決定如何去做。三、ddl鎖1. 排它ddl鎖創(chuàng)建、修改、刪除一個數(shù)據(jù)庫對象的ddl語句獲得操作對象的排它鎖。2. 共享ddl鎖需在數(shù)據(jù)庫對象之間建立相互依賴關(guān)系的ddl語句通常需共享獲得ddl 鎖3. 分析鎖分析鎖是一種獨特的ddl鎖類型,oracle使用它追蹤共享池對象及它 所引用數(shù)據(jù)庫對象之間的依賴關(guān)系四、內(nèi)部鎖和閂這是oracle屮的一種特殊鎖,用于順序訪問內(nèi)部系統(tǒng)結(jié)構(gòu)。當事務(wù)需 向緩沖區(qū)寫入信息時,為了使用此塊內(nèi)存區(qū)域,oracle首先必須取得這塊 內(nèi)存區(qū)域的閂鎖,才能向此塊內(nèi)存寫入信息??偨Y(jié):1系統(tǒng)性能上考慮,應(yīng)該盡可能減少資源競爭,增大吞吐量,因此用戶在給并 發(fā)操作加鎖時,應(yīng)注意以下幾點:1、對于update和delete操作,應(yīng)只封鎖要做改動的行,在完成修改后 立即提交?!拘屑壟潘i】2、當多個事務(wù)正利用共享更新

溫馨提示

  • 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)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論