



版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、oracle的TM鎖、T X鎖知識完全普及鎖概念基礎數據庫是一個多用戶使用的共享資源。當多個用戶并發地存取數據時,在數據庫中就會產生多個事務同時存取同一數據的情況。若對并發操作不加控制就可能會讀取和存儲不正確的數據,破壞數據庫的一致性。加鎖是實現數據庫并發控制的一個非常重要的技術。當事務在對某個數據對象進行操作前,先向系統發出請求,對其加鎖。加鎖后事務就對該數據對象有了一定的控制,在該事務釋放鎖之前,其他的事務不能對此數據對象進行更新操作。在數據庫中有兩種基本的鎖類型:排它鎖(Exclusive Locks,即 X 鎖)和共享鎖( Share Locks ,即 S 鎖)。當數據對象被加上排它鎖
2、時,其他的事務不能對它讀取和修改。加了共享鎖的數據對象可以被其他事務讀取,但不能修改。數據庫利用這兩種基本的鎖類型來對數據庫的事務進行并發控制。Oracle 數據庫的鎖類型根據保護的對象不同, Oracle 數據庫鎖可以分為以下幾大類:DML鎖( datalocks ,數據鎖),用于保護數據的完整性;DDL鎖( dictionary locks,字典鎖),用于保護數據庫對象的結構,如表、索引等的結構定義;內部鎖和閂( internal locks and latches),保護數據庫的內部結構。DML鎖的目的在于保證并發情況下的數據完整性,。在 Oracle 數據庫中,DML鎖主要包括 TM鎖
3、和 TX 鎖,其中 TM鎖稱為表級鎖, TX 鎖稱為事務鎖或行級鎖。當 Oracle執行 DML語句時,系統自動在所要操作的表上申請TM類型的鎖。當 TM鎖獲得后,系統再自動申請 TX 類型的鎖,并將實際鎖定的數據行的鎖標志位進行置位。這樣在事務加鎖前檢查 TX鎖相容性時就不用再逐行檢查鎖標志,而只需檢查 TM鎖模式的相容性即可,大大提高了系統的效率。 TM鎖包括了 SS、 SX、 S、 X 等多種模式,在數據庫中用0 6 來表示。不同的 SQL操作產生不同類型的TM鎖。在數據行上只有X 鎖(排他鎖)。在Oracle數據庫中,當一個事務首次發起一個 DML語句時就獲得一個TX 鎖,該鎖保持到事
4、務被提交或回滾。當兩個或多個會話在表的同一條記錄上執行DML語句時,第一個會話在該條記錄上加鎖,其他的會話處于等待狀態。當第一個會話提交后,TX鎖被釋放,其他會話才可以加鎖。當 Oracle 數據庫發生TX鎖等待時,如果不及時處理常常會引起Oracle數據庫掛起,或導致死鎖的發生,產生ORA-60的錯誤。這些現象都會對實際應用產生極大的危害,如長時間未響應,大量事務失敗等。悲觀封鎖和樂觀封鎖一、悲觀封鎖鎖在用戶修改之前就發揮作用:Select .for update(nowait)Select * from tab1 for update用戶發出這條命令之后,oracle將會對返回集中的數據建
5、立行級封鎖,以防止其他用戶的修改。如果此時其他用戶對上面返回結果集的數據進行dml 或 ddl 操作都會返回一個錯誤信息或發生阻塞。1:對返回結果集進行update 或 delete操作會發生阻塞。2:對該表進行ddl 操作將會報: Ora-00054:resource busy and acquirewith nowait specified.原因分析此時 Oracle 已經對返回的結果集上加了排它的行級鎖,所有其他對這些數據進行的修改或刪除操作都必須等待這個鎖的釋放,產生的外在現象就是其他的操作將發生阻塞,這個這個操作commit 或 rollback.同樣這個查詢的事務將會對該表加表級鎖
6、,不允許對該表的任何ddl 操作,否則將會報出ora-00054 錯誤: :resourcebusy and acquirewith nowaitspecified.二、樂觀封鎖樂觀的認為數據在select出來到 update 進取并提交的這段時間數據不會被更改。這里面有一種潛在的危險就是由于被選出的結果集并沒有被鎖定,是存在一種可能被其他用戶更改的可能。因此Oracle 仍然建議是用悲觀封鎖,因為這樣會更安全。阻塞定義:當一個會話保持另一個會話正在請求的資源上的鎖定時,就會發生阻塞。被阻塞的會話將一直掛起,直到持有鎖的會話放棄鎖定的資源為止。 4 個常見的 dml 語句會產生阻塞INSERT
7、UPDATEDELETESELECTFOR UPDATEINSERTInsert發生阻塞的唯一情況就是用戶擁有一個建有主鍵約束的表。當 2 個的會話同時試圖向表中插入相同的數據時,其中的一個會話將被阻塞,直到另外一個會話提交或會滾。一個會話提交時,另一個會話將收到主鍵重復的錯誤。回滾時,被阻塞的會話將繼續執行。UPDATE和 DELETE當執行 Update 和 delete操作的數據行已經被另外的會話鎖定時,將會發生阻塞,直到另一個會話提交或會滾。Selectfor update當一個用戶發出select.for update的錯作準備對返回的結果集進行修改時,如果結果集已經被另一個會話鎖定
8、,就是發生阻塞。需要等另一個會話結束之后才可繼續執行。可以通過發出select forupdate nowait的語句來避免發生阻塞,如果資源已經被另一個會話鎖定,則會返回以下錯誤: Ora-00054:resource busy and acquire with nowait specified.死鎖 -deadlock定義 : 當兩個用戶希望持有對方的資源時就會發生死鎖.即兩個用戶互相等待對方釋放資源時 ,oracle 認定為產生了死鎖 , 在這種情況下 , 將以犧牲一個用戶作為代價 , 另一個用戶繼續執行 , 犧牲的用戶的事務將回滾 .例子:1:用戶 1 對 A 表進行 Update,沒
9、有提交。2:用戶 2 對 B 表進行 Update,沒有提交。此時雙反不存在資源共享的問題。3:如果用戶 2 此時對 A 表作 update, 則會發生阻塞, 需要等到用戶一的事物結束。4:如果此時用戶1 又對 B 表作 update ,則產生死鎖。此時Oracle 會選擇其中一個用戶進行會滾,使另一個用戶繼續執行操作。起因 :Oracle 的死鎖問題實際上很少見,如果發生, 基本上都是不正確的程序設計造成的,經過調整后,基本上都會避免死鎖的發生。DML鎖分類表表 1 Oracle 的 TM鎖類型鎖模 鎖描述解釋SQL操作式0none1NULL空Select2SS(Row-S)行級共享鎖,Se
10、lect for update、Lock其他對象只能for update 、Lock row share查詢這些數據行行級排它鎖,Insert 、 Update、 Delete 、3SX(Row-X)在提交前不允Lock row share許做 DML操作4S(Share)共享鎖Create index、 Lock share5SSX(S/Row-X)共享行級排它Lock share row exclusive鎖Alter table、Drop able 、6X(Exclusive)排它鎖Drop index 、 Truncatetable 、 Lock exclusive1. 關于 V$lo
11、ck 表和相關視圖的說明ColumnDatatypeDescriptionADDRRAW(4 | 8)Address of lock state objectKADDRRAW(4 | 8)Address of lockSIDNUMBERIdentifier for session holding or acquiringthe lockTYPEVARCHAR2(2)Type of user or system lockThe locks on the user types are obtained byuser applications. Any process that isblocking
12、othersis likelyto be holdingone ofthese locks. The user type locks are:TM - DML enqueue ?TX - Transaction enqueueUL - User supplied- 我們主要關注 TX和 TM兩種類型的鎖-UL 鎖用戶自己定義的,一般很少會定義,基本不用關注- 其它均為系統鎖,會很快自動釋放,不用關注ID1NUMBERLock identifier #1 (depends on type)ID2NUMBERLock identifier #2 (depends on type)-當 lock t
13、ype為 TM時, id1為 DML-lockedobject 的 object_id-當 lock type為 TX時, id1為 usn+slot,而id2為 seq。- 當 lock type為其它時,不用關注LMODE NUMBERLock mode inwhich the session holds the lock:0- none1- null (NULL)2- row-S (SS)3- row-X (SX)4- share (S)5- S/Row-X (SSX)6- exclusive (X)- 大于 0 時表示當前會話以某種模式占有該鎖,等于 0 時表示當前會話正在等待該鎖資源
14、,即表示該會話被阻塞。- 往往在發生 TX鎖時,伴隨著 TM鎖,比如一個sid=9 會話擁有一個TM鎖,一般會擁有一個或幾個 TX鎖,但他們的id1 和 id2 是不同的,請注意REQUESTNUMBERLock mode in which the process requests thelock:0 - none1 - null (NULL)2 - row-S (SS)3 - row-X (SX)4 - share (S)5 - S/Row-X (SSX)6 - exclusive (X)- 大于 0 時,表示當前會話被阻塞, 其它會話占有改鎖的模式CTIMENUMBERTime since
15、 current mode was grantedBLOCKNUMBERThe lock is blocking another lock0, Not Blocking, /* Not blocking any otherprocesses */1, Blocking, /* This lock blocks otherprocesses */2, Global, /* This lock is global, so wecant tell */- 該鎖是否阻塞了另外一個鎖2. 其它相關視圖說明視圖名描述主要字段說明sid,serial#:表示會話信息。program :表示會話的應用程序信息
16、。查詢會話的信息row_wait_obj# :表示等待的對象, 和v$session和鎖的信息。dba_objects中的 object_id相對應。lockwait :該會話等待的鎖的地址, 與v$lock 的 kaddr 對應 .sid :表示持有鎖的會話信息。Seconds_in_wait :表示等待持續的時間信查詢等待的會話v$session_wait息信息。Event :表示會話等待的事件,鎖等于enqueueSession_id :和 v$lock 中的 Sid 對應。Lock_type :和 v$lock中的 type 對應。對 v$lock 的格dba_locksLock_ID
17、1 : 和 v$lock中的 ID1 對應。式化視圖。Mode_held,mode_requested :和 v$lock中的 lmode,request 相對應。Xidusn,xidslot,xidsqn:表示回滾段信息。和v$transaction相關聯。只包含 DML的鎖Object_id :表示被鎖對象標識。v$locked_object信息,包括回滾段和會話信息。1. 查詢數據庫中的鎖Session_id :表示持有鎖的會話信息。Locked_mode:表示會話等待的鎖模式的信息,和 v$lock 中的 lmode 一致。select * from v$lock;select * from v$lock where block=1;2. 查詢被鎖的對象select * from v$locked_object;3. 查詢阻塞查被阻塞的會話select * from v$lock where lmode=0 and type in (TM,TX);查阻塞別的會話鎖select * from v$lock where lmode0 and type in (TM,TX);4. 查詢數據庫正
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 云南特殊教育職業學院《水污染控制工程》2023-2024學年第二學期期末試卷
- 中山智慧路燈施工方案
- 橋墩涉水施工方案怎么寫
- 天津鐵道職業技術學院《景觀設計》2023-2024學年第一學期期末試卷
- 2025標準式辦公室租賃合同
- 2025至2030年中國高堿玻璃球數據監測研究報告
- 2025至2030年中國除焦清灰劑數據監測研究報告
- 別墅擴建施工方案模板
- 2025至2030年中國聚氯乙烯軟制品擠出板數據監測研究報告
- 2025至2030年中國睡伴膠囊數據監測研究報告
- 《卵石動物造型》名師課件
- 騰訊游戲引擎技術向工業數字孿生的遷移
- 腰椎結核專科知識
- 教育政策的國際比較研究-深度研究
- 生活垃圾焚燒處理廠垃圾焚燒爐設計方案
- “趣”破“蛐蛐”小妙招社交魔法課主題班會
- 快遞小哥交通安全課件
- 2025年青海能源投資集團有限責任公司招聘筆試參考題庫含答案解析
- 2025年河南建筑職業技術學院單招職業技能測試題庫審定版
- 2026年版廣西高等職業教育考試(新職教高考)新聞傳播大類《攝影攝像》模擬試卷(第1套)
- 山東省煙臺市第二中學等校2021-2022學年高二下學期期中考試歷史試題(原卷版)
評論
0/150
提交評論