Oracle鎖

1、定義:

站在用戶的角度思考問題,與客戶深入溝通,找到阿克陶網(wǎng)站設(shè)計(jì)與阿克陶網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都做網(wǎng)站、成都網(wǎng)站建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名與空間、虛擬空間、企業(yè)郵箱。業(yè)務(wù)覆蓋阿克陶地區(qū)。

鎖(lock)機(jī)制用于管理對(duì)共享資源的并發(fā)訪問(使對(duì)這些共享資源的并發(fā)性訪問串行化),同時(shí)還能提供數(shù)據(jù)完整性和一致性。

2、Oracle鎖特征:

在Oracle中鎖不是稀有資源;

Oracle不會(huì)自動(dòng)升級(jí)鎖,永遠(yuǎn)不會(huì);

在 Oracle 中,行級(jí)鎖沒有相關(guān)的開銷

3、Oracle鎖分類

DML鎖

DDL鎖

內(nèi)部鎖或LATCH

4、鎖一覽圖

鎖代碼

鎖模式名稱

鎖模式簡(jiǎn)寫

鎖模式級(jí)別

備注說明

隱式產(chǎn)生鎖

顯式產(chǎn)生鎖

0

None

None


無鎖模式,select操作便是這樣的情況



1

Null

Null

表級(jí)鎖

Oracle在內(nèi)存中自動(dòng)加的鎖,主要起通知作用



2

Row-S

SS

表級(jí)鎖


10g版本前:FOR UPDATE

LOCK TABLE 表名IN ROW SHARE MODE;

3

Row-SX

SX

表級(jí)鎖

行級(jí)排它鎖,主要由DML語句引起

10g版本后:FOR UPDATE、DML語句

LOCK TABLE 表名IN ROW EXCLUSIVE MODE;

4

Share

S

表級(jí)鎖

共享鎖、只讀鎖


LOCK TABLE 表名IN SHARE MODE;

5

S/Row-X

SSX

表級(jí)鎖

共享行排它鎖


LOCK TABLE 表名 IN SHARE ROW EXCLUSIVE MODE;

6

Exclusive

X

表級(jí)鎖/行級(jí)鎖

排它鎖



R:Row  S:Share X:Exclusive

5、TM鎖兼容性


N

SS

SX

S

SSX

X

N

YES

YES

YES

YES

YES

YES

SS

YES

YES

YES

YES

YES

NO

SX

YES

YES

YES

NO

NO

NO

S

YES

YES

NO

YES

NO

NO

SSX

YES

YES

NO

NO

NO

NO

X

YES

NO

NO

NO

NO

NO

6、鎖常用sql

--測(cè)試子表:成績(jī)表

SELECT *FROM score;

--測(cè)試父表:學(xué)生信息表

SELECT *FROM student;

--查詢當(dāng)前會(huì)話值

SELECT *FROM v$mystatWHEREROWNUM='1';

--動(dòng)態(tài)性能視圖 v$locked_object 各字段的含義

SELECT l.XIDUSN         AS回滾段號(hào),

      l.XIDSLOT        AS回滾槽號(hào),

      l.XIDSQN         AS回滾序列號(hào),

      l.OBJECT_ID      AS被鎖對(duì)象ID,

      l.SESSION_ID     AS持有鎖對(duì)象會(huì)話ID,

      l.ORACLE_USERNAMEAS持有鎖的oracle用戶名,

      l.OS_USER_NAME   AS持有鎖操作系統(tǒng)用戶名,

      l.PROCESS        AS操作系統(tǒng)進(jìn)程號(hào),

      l.LOCKED_MODE    AS鎖模式

 FROM v$locked_object l;

--當(dāng)前用戶創(chuàng)建的所有對(duì)象,列出部分常用字段含義

SELECT uo.object_nameAS對(duì)象名稱,

      uo.object_id  AS對(duì)象ID,

       uo.object_typeAS對(duì)象類型

 FROM user_objects uo;

--通過v$locked_object與user_objects兩表關(guān)聯(lián)可以得出被鎖的是哪個(gè)表以及是被哪個(gè)用戶鎖的

SELECT uo.object_name   AS對(duì)象名稱,

      uo.object_type   AS對(duì)象類型,

      l.ORACLE_USERNAMEAS持有鎖的oracle用戶名,

      l.LOCKED_MODE    AS鎖模式

 FROM v$locked_object l,user_objects uo

 WHERE l.OBJECT_ID =uo.object_id;

/* AND l.SESSION_ID=&session_id;*/

--查詢所有正在等待獲得鎖的會(huì)話ID及鎖類型

SELECT w.waiting_sessionAS等待鎖的會(huì)話ID,

      w.holding_sessionAS持有鎖的會(huì)話ID,

      w.lock_type      AS鎖類型,

      w.mode_held      AS鎖機(jī)制

 FROM dba_waiters w;

--動(dòng)態(tài)性能視圖事務(wù)執(zhí)行列表(未提交狀態(tài)),BLOCK=1是堵塞者,BLOCK=0是被堵塞者

SELECT *FROM v$transaction_enqueue;

--查詢阻擋關(guān)系

SELECT (SELECT s.USERNAMEFROM v$session sWHERE s.SID = a.SID)AS阻擋者名,

       a.SIDAS阻擋者會(huì)話ID,

      '正在阻擋'AS行為,

       (SELECT s.USERNAMEFROM v$session sWHERE s.SID = b.SID)AS被阻擋者名,

       b.SIDAS被阻擋者會(huì)話ID

 FROM v$lock a, v$lock b

 WHERE a.ID1 = b.ID1

  AND a.ID2 = b.ID2

  AND a.BLOCK =1

  AND b.REQUEST >0;

--根據(jù)會(huì)話ID查詢前一步sql操作語句,這個(gè)語句不適合應(yīng)用程序

SELECT sq.sql_text

 FROM v$sql sq

 WHERE sq.SQL_ID =

       (SELECT s.SQL_IDFROM v$session sWHERE s.SID =&session_id);

分享名稱:Oracle鎖
文章網(wǎng)址:http://muchs.cn/article22/jpigjc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、手機(jī)網(wǎng)站建設(shè)、品牌網(wǎng)站建設(shè)、企業(yè)網(wǎng)站制作網(wǎng)站營(yíng)銷、電子商務(wù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司