當前位置:成語大全網 - 新華字典 - Oracle鎖的運行機制原理的描述

Oracle鎖的運行機制原理的描述

 以下的文章抓喲是對Oracle鎖的運行機制原理的描述 我們大家都知道在現代的多用戶與多任務系統中 出現多個用戶同時訪問***享的某個對象的幾率特別大 這個對象可能是表 行 或者內存結構

 為了解決多個用戶並發性訪問帶來的數據的 安全性 完整性及壹致性問題 必須要有壹種機制

 來使對這些***享資源的並發性訪問串行化 Oracle鎖就可以提供這樣的功能 當事務在對某個對象進行操作前 先向系統發出請求 對其加相應的鎖 加鎖後該事務就對該數據對象有了壹定的控制權限 在該事務釋放鎖之前 其他的事務不能對此數據對象進行更新操作(可以做select動作 但select 利用的是undo中的前鏡像數據了)

 Oracle鎖的分類

 Oracle鎖基本上可以分為二類

 a ***享鎖(share locks) 也稱讀鎖 s鎖

 b 排它鎖 (exclusive locks) 也稱寫鎖 x鎖

 在數據庫中 有兩種基本的鎖類型 排它鎖(Exclusive Locks 即X鎖)和***享鎖(Share Locks 即S鎖) 當數據對象被加上排它鎖時 其他的事務不能對它讀取和修改 加了***享鎖的數據對象可以被其他事務讀取 但不能修改 數據庫利用這兩 種基本的鎖類型來對數據庫的事務進行並發控制

 按鎖保護的內容分類

 Oracle提供多粒度封鎖機制 按保護對象來分 據此又可以分為

 a dml鎖 data locks 數據鎖 用來保護數據的完整性和壹致性

 b ddl鎖 dictionary locks 字典鎖 用來保護數據對象的結構 如table index的定義

 c 內部鎖和閂 internal locks and latchs 用來保護數據庫內部結構 如sga內存結構

 dml鎖

 DML鎖主要包括TM鎖和TX鎖 其中TM鎖稱為表級鎖 TM鎖的種類有S X SR SX SRX五種 TX鎖稱為事務鎖或行級 鎖 當Oracle執行delete update insert select for update DML語句時 Oracle首先自動在所要操作的表上申請TM類型的鎖

 當TM鎖獲得後 再自動申請TX類型的鎖 並將實際鎖定的數據行的鎖標誌位(lb 即lock bytes)進行置位 在記錄被某壹會話鎖定後 其他需要訪問被鎖定對象的會話會按先進先出的方式等待鎖的釋放 對於select操作而言 並不需要任何 Oracle鎖 所以即使記錄被鎖定 select語句依然可以執行 實際上 在此情況下 Oracle是用到undo的內容進行壹致性讀來實現的

 在 Oracle數據庫中 當壹個事務首次發起壹個DML語句時就獲得壹個TX鎖 該鎖保持到事務被提交或回滾 在數據行上只有X鎖(排他鎖) 就是說TX鎖 只能是排他鎖 在記錄行上設置***享鎖沒有意義 當兩個或多個會話在表的同壹條記錄上執行DML語句時 第壹個會話在該條記錄上加鎖 其他的會話處於等待狀 態 當第壹個會話提交後 TX鎖被釋放 其他會話才可以加鎖

 在數據表上 Oracle默認是***享鎖 在執行dml語句的時候 Oracle會先申請對象上的***享鎖 防止其他會話在這個對象上做ddl語句 成功申請表上的***享鎖後 再在受影響的記錄上加排它所 防止其他會話對這些做修改動作

 這樣在事務加鎖前檢查TX鎖相容性時就不用再逐行檢查Oracle鎖標誌 而只需檢查TM鎖模式的相容性即可 大大提高了系統的效率 TM鎖包括了SS SX S X等多種模式 在數據庫中用 - 來表示 不同的SQL操作產生不同類型的TM鎖 如表 所示

 和鎖相關的性能視圖介紹

 v$lock

 SID 會話的sid 可以和v$session 關聯

 TYPE 區分該鎖保護對象的類型 如tm tx rt mr等

 ID 鎖表示 詳細見下說明

 ID 鎖表示 詳細見下說明

 LMODE 鎖模式 見下面說明

 REQUEST 申請的Oracle鎖模式 同lmode

 CTIME 已持有或者等待鎖的時間

 BLOCK 是否阻塞其他會話鎖申請 :阻塞 :不阻塞

 LMODE取值 數字越大鎖級別越高 影響的操作越多

  級鎖

 Select 有時會在v$locked_object出現

  級鎖即RS鎖

 相應的sql有 Select for update Lock xxx in Row Share mode select for update

lishixinzhi/Article/program/Oracle/201311/16509