Oracle數(shù)據(jù)庫中的鎖機(jī)制研究.doc_第1頁
Oracle數(shù)據(jù)庫中的鎖機(jī)制研究.doc_第2頁
Oracle數(shù)據(jù)庫中的鎖機(jī)制研究.doc_第3頁
Oracle數(shù)據(jù)庫中的鎖機(jī)制研究.doc_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡介

Oracle數(shù)據(jù)庫中的鎖機(jī)制研究本文通過對Oracle數(shù)據(jù)庫鎖機(jī)制的研究,首先介紹了Oracle數(shù)據(jù)庫鎖的種類,并描述了實(shí)際應(yīng)用中遇到的與鎖相關(guān)的異常情況,特別對經(jīng)常遇到的由于等待鎖而使事務(wù)被掛起的問題進(jìn)行了定位及解決,并對死鎖這一比較嚴(yán)重的現(xiàn)象,提出了相應(yīng)的解決方法和具體的分析過程。數(shù)據(jù)庫是一個(gè)多用戶使用的共享資源。當(dāng)多個(gè)用戶并發(fā)地存取數(shù)據(jù)時(shí),在數(shù)據(jù)庫中就會(huì)產(chǎn)生多個(gè)事務(wù)同時(shí)存取同一數(shù)據(jù)的情況。若對并發(fā)操作不加控制就可能會(huì)讀取和存儲(chǔ)不正確的數(shù)據(jù),破壞數(shù)據(jù)庫的一致性。加鎖是實(shí)現(xiàn)數(shù)據(jù)庫并發(fā)控制的一個(gè)非常重要的技術(shù)。當(dāng)事務(wù)在對某個(gè)數(shù)據(jù)對象進(jìn)行操作前,先向系統(tǒng)發(fā)出請求,對其加鎖。加鎖后事務(wù)就對該數(shù)據(jù)對象有了一定的控制,在該事務(wù)釋放鎖之前,其他的事務(wù)不能對此數(shù)據(jù)對象進(jìn)行更新操作。在數(shù)據(jù)庫中有兩種基本的鎖類型:排它鎖(Exclusive Locks,即X鎖)和共享鎖(Share Locks,即S鎖)。當(dāng)數(shù)據(jù)對象被加上排它鎖時(shí),其他的事務(wù)不能對它讀取和修改。加了共享鎖的數(shù)據(jù)對象可以被其他事務(wù)讀取,但不能修改。數(shù)據(jù)庫利用這兩種基本的鎖類型來對數(shù)據(jù)庫的事務(wù)進(jìn)行并發(fā)控制。在實(shí)際應(yīng)用中經(jīng)常會(huì)遇到的與鎖相關(guān)的異常情況,如由于等待鎖事務(wù)被掛起、死鎖等現(xiàn)象,如果不能及時(shí)地解決,將嚴(yán)重影響應(yīng)用的正常執(zhí)行,而目前對于該類問題的解決缺乏系統(tǒng)化研究和指導(dǎo),本文在總結(jié)實(shí)際經(jīng)驗(yàn)的基礎(chǔ)上,提出了相應(yīng)的解決方法和具體的分析過程。Oracle數(shù)據(jù)庫的鎖類型根據(jù)保護(hù)的對象不同,Oracle數(shù)據(jù)庫鎖可以分為以下幾大類:DML鎖(data locks,數(shù)據(jù)鎖),用于保護(hù)數(shù)據(jù)的完整性;DDL鎖(dictionary locks,字典鎖),用于保護(hù)數(shù)據(jù)庫對象的結(jié)構(gòu),如表、索引等的結(jié)構(gòu)定義;內(nèi)部鎖和閂(internal locks and latches),保護(hù)數(shù)據(jù)庫的內(nèi)部結(jié)構(gòu)。DML鎖的目的在于保證并發(fā)情況下的數(shù)據(jù)完整性,本文主要討論DML鎖。在Oracle數(shù)據(jù)庫中,DML鎖主要包括TM鎖和TX鎖,其中TM鎖稱為表級鎖,TX鎖稱為事務(wù)鎖或行級鎖。當(dāng)Oracle執(zhí)行DML語句時(shí),系統(tǒng)自動(dòng)在所要操作的表上申請TM類型的鎖。當(dāng)TM鎖獲得后,系統(tǒng)再自動(dòng)申請TX類型的鎖,并將實(shí)際鎖定的數(shù)據(jù)行的鎖標(biāo)志位進(jìn)行置位。這樣在事務(wù)加鎖前檢查TX鎖相容性時(shí)就不用再逐行檢查鎖標(biāo)志,而只需檢查TM鎖模式的相容性即可,大大提高了系統(tǒng)的效率。TM鎖包括了SS、SX、S、X等多種模式,在數(shù)據(jù)庫中用06來表示。不同的SQL操作產(chǎn)生不同類型的TM鎖。如表1所示。在數(shù)據(jù)行上只有X鎖(排他鎖)。在 Oracle數(shù)據(jù)庫中,當(dāng)一個(gè)事務(wù)首次發(fā)起一個(gè)DML語句時(shí)就獲得一個(gè)TX鎖,該鎖保持到事務(wù)被提交或回滾。當(dāng)兩個(gè)或多個(gè)會(huì)話在表的同一條記錄上執(zhí)行DML語句時(shí),第一個(gè)會(huì)話在該條記錄上加鎖,其他的會(huì)話處于等待狀態(tài)。當(dāng)?shù)谝粋€(gè)會(huì)話提交后,TX鎖被釋放,其他會(huì)話才可以加鎖。當(dāng)Oracle數(shù)據(jù)庫發(fā)生TX鎖等待時(shí),如果不及時(shí)處理常常會(huì)引起Oracle數(shù)據(jù)庫掛起,或?qū)е滤梨i的發(fā)生,產(chǎn)生ORA-60的錯(cuò)誤。這些現(xiàn)象都會(huì)對實(shí)際應(yīng)用產(chǎn)生極大的危害,如長時(shí)間未響應(yīng),大量事務(wù)失敗等。TX鎖等待的分析在介紹了有關(guān)地Oracle數(shù)據(jù)庫鎖的種類后,下面討論如何有效地監(jiān)控和解決鎖等待現(xiàn)象,及在產(chǎn)生死鎖時(shí)如何定位死鎖的原因。監(jiān)控鎖的相關(guān)視圖 數(shù)據(jù)字典是Oracle數(shù)據(jù)庫的重要組成部分,用戶可以通過查詢數(shù)據(jù)字典視圖來獲得數(shù)據(jù)庫的信息。和鎖相關(guān)的數(shù)據(jù)字典視圖如表2所示。TX鎖等待的監(jiān)控和解決在日常工作中,如果發(fā)現(xiàn)在執(zhí)行某條SQL時(shí)數(shù)據(jù)庫長時(shí)間沒有響應(yīng),很可能是產(chǎn)生了TX鎖等待的現(xiàn)象。為解決這個(gè)問題,首先應(yīng)該找出持鎖的事務(wù),然后再進(jìn)行相關(guān)的處理,如提交事務(wù)或強(qiáng)行中斷事務(wù)。死鎖的監(jiān)控和解決在數(shù)據(jù)庫中,當(dāng)兩個(gè)或多個(gè)會(huì)話請求同一個(gè)資源時(shí)會(huì)產(chǎn)生死鎖的現(xiàn)象。死鎖的常見類型是行級鎖死鎖和頁級鎖死鎖,Oracle數(shù)據(jù)庫中一般使用行級鎖。下面主要討論行級鎖的死鎖現(xiàn)象。當(dāng)Oracle檢測到死鎖產(chǎn)生時(shí),中斷并回滾死鎖相關(guān)語句的執(zhí)行,報(bào)ORA-00060的錯(cuò)誤并記錄在數(shù)據(jù)庫的日志文件alertSID.log中。同時(shí)在user_dump_dest下產(chǎn)生了一個(gè)跟蹤文件,詳細(xì)描述死鎖的相關(guān)信息。在日常工作中,如果發(fā)現(xiàn)在日志文件中記錄了ora-00060的錯(cuò)誤信息,則表明產(chǎn)生了死鎖。這時(shí)需要找到對應(yīng)的跟蹤文件,根據(jù)跟蹤文件的信息定位產(chǎn)生的原因。如果查詢結(jié)果表明,死鎖是由于bitmap索引引起的,將IND_T_PRODUCT_HIS_STATE索引改為normal索引后,即可解決死鎖的問題。表1 Oracle的TM鎖類型鎖模式鎖描述解釋SQL操作0none1NULL空Select2SS(Row-S)行級共享鎖,其他對象只能查詢這些數(shù)據(jù)行Select for update、Lock for update、Lock row share3SX(Row-X)行級排它鎖,在提交前不允許做DML操作Insert、Update、Delete、Lock row share4S(Share)共享鎖Create index、Lock share5SSX(S/Row-X)共享行級排它鎖Lock share row exclusive6X(Exclusive)排它鎖Alter table、Drop able、Drop index、Truncate table 、Lock exclusive表2 數(shù)據(jù)字典視圖說明視圖名描述主要字段說明v$session查詢會(huì)話的信息和鎖的信息。sid,serial#:表示會(huì)話信息。program:表示會(huì)話的應(yīng)用程序信息。row_wait_obj#:表示等待的對象。和dba_objects中的object_id相對應(yīng)。v$session_wait查詢等待的會(huì)話信息。sid:表示持有鎖的會(huì)話信息。Seconds_in_wait:表示等待持續(xù)的時(shí)間信息Event:表示會(huì)話等待的事件。v$lock列出系統(tǒng)中的所有的鎖。Sid:表示持有鎖的會(huì)話信息。Type:表示鎖的類型。值包括TM和TX等。ID1:表示鎖的對象標(biāo)識。lmode,request:表示會(huì)話等待的鎖模式的信息。用數(shù)字06表示,和表1相對應(yīng)。dba_locks對v$lock的格式化視圖。Session_id:和v$lock中的Sid對應(yīng)。Lock_type:和v$lock中的type對應(yīng)。Lock_ID1: 和v$lock中的ID1對應(yīng)。Mode_held,mode_requested:和v$lock中的lmode,request相對應(yīng)。v$locked_object只包含DML的鎖信息

溫馨提示

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

最新文檔

評論

0/150

提交評論