欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Oracle的鎖機制原理

本篇內(nèi)容主要講解“Oracle的鎖機制原理”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“Oracle的鎖機制原理”吧!

本篇內(nèi)容主要講解“Oracle的鎖機制原理”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“Oracle的鎖機制原理”吧!

10多年的雞西網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。網(wǎng)絡(luò)營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整雞西建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。成都創(chuàng)新互聯(lián)公司從事“雞西網(wǎng)站設(shè)計”,“雞西網(wǎng)站推廣”以來,每個客戶項目都認(rèn)真落實執(zhí)行。

一.ORACLE中有關(guān)鎖的動態(tài)性能視圖主要有:
V$LOCK
This view lists the locks currently held by the Oracle Database and outstanding requests for a lock or latch.
        TM鎖的ID1字段表示對象的ID號,可以通過DBA_OBJECTS.OBJECT_ID來查到具體的對象。
        TX鎖的ID1代表的是事務(wù)的回滾段回滾段號、事務(wù)槽號,ID2代表的是順序號。(V$TRANSACTION.XIDSQN表示事務(wù)槽號)

有關(guān)VLOCK.ID1和ID2的含義可參考文章:http://space.itpub.net/?uid-23135684-action-viewspace-itemid-715468
BLOCK字段如果等于1的話,表示此鎖阻塞了其他DML語句的執(zhí)行,正常應(yīng)該為0。
BLOCK字段的含義:
0, 'Not Blocking',  /* Not blocking any other processes */
1, 'Blocking',      /* This lock blocks other processes */
2, 'Global',        /* This lock is global, so we can't tell */

$ORACLE_HOME/rdbms/admin/catblock.sql特別注意:
0表示沒有阻塞,而不是表示沒有鎖。
如果要查詢是否有會話阻塞了其他會話:

SELECT * FROM V$LOCK WHERE BLOCK=1;

通過查詢V$SESSION.BLOCKING_SESSION_STATUS,v$SESSION.BLOCKING_SESSION兩個字段也可以查看到阻塞其他的會話。

如果LMODE為0,REQUEST大于1,表示在獲取鎖的時候失敗,發(fā)生了相應(yīng)鎖的阻塞。例如,在執(zhí)行DML語句時,如果TYPE=TM,LMODE=0,REQUEST=3,就表示此DML語句在獲取表的TM鎖的行排它鎖時被阻塞,處于等待狀態(tài)。
查找阻塞事務(wù)的事務(wù)會話信息:

select * from v$lock where (id1,id2)=(select id1,id2 from v$lock where sid= 被鎖的會話的SID)
V$LOCKED_OBJECT

This view lists all locks acquired by every transaction on the system.

V$LOCK_TYPE

二.其中我們主要查看的是:

LOCK TYPE(按對象劃分)

V$LOCK_TYPE保存了所有的LOCK TYPE的相關(guān)信息。
主要的有:

TM - DML enqueue

TX - Transaction enqueue

UL - User supplied
MR -Media Recovery

MR鎖用于保護數(shù)據(jù)文件,使得文件在數(shù)據(jù)庫打開、表空間Online時不能執(zhí)行恢復(fù)。當(dāng)進程對數(shù)據(jù)文件進行恢復(fù)時,需要排他的獲得MR鎖。當(dāng)數(shù)據(jù)庫打開時,每個文件上都分配一個MR鎖。ID1代表文件號,也包含了201臨時文件。

從Oracle 11g開始,每個登錄的會話都會有一個默認(rèn)的AE鎖。

LOCK MODE(按類型劃分)

0 - none

1 - null (NULL)

2 - row-S (SS)    //行共享

3 - row-X (SX)    //行排它

4 - share (S)     //共享

5 - S/Row-X (SSX) //共享行排它

6 - exclusive (X) //排它從以上LOCK MODE也能看出按類型分鎖只有2種,共享(S),排它(X),把他們不同的組合就成了不同的LOCK MODE了。

如果添加的是X鎖,那么其他任何鎖也不能再添加到此行或表上了。TM就是DML鎖,是表級上的鎖。TX是事務(wù)鎖,是行級鎖。在執(zhí)行DML操作時,先對表加TM鎖,如果加鎖成功,然后再加TX鎖。一般情況下,一個會話中,只會出現(xiàn)一個TX鎖,可能有多個TM鎖,這些TM所共享一個TX鎖。

不同的語句加TM鎖的類型不同,類型就是下面說的LOCK MODE。在表級上加了TM鎖也是為了防止其他會話再在表上加上排它鎖(例如對表執(zhí)行DDL語句)。一個表上可以加上多個TM鎖、TX鎖的。例如,A會話更新了TEST表上ID號為1的一條記錄,首先會先在這個表上加上一個TM鎖,加鎖成功,會在ID為1的行上加上一個TX鎖。如果有另外一個會話來同樣來更新ID為1的記錄就會發(fā)生阻塞,因為加TM鎖能成功,但是加TX鎖失敗。如果更新的記錄是ID=2那么就是成功的。這是表上就存在多個TM、TX鎖。如果在表上加上TM鎖成功,那么除了在V$LOCK會有相應(yīng)的記錄外,V$LOCKED_OBJECT也有相應(yīng)對象的記錄。

行級鎖只有排他鎖沒有共享鎖。

另外,select語句不會添加任何鎖,所以一般的TX,TM鎖都不會阻塞select語句的執(zhí)行。唯一能阻塞select語句執(zhí)行的是latch鎖,一旦發(fā)生latch鎖阻塞select語句的執(zhí)行,對系統(tǒng)的正常運行非常的大,甚至?xí)?dǎo)致系統(tǒng)的崩潰。

三.示例
示例1:

SQL> update test set segment_name='test' where wner='SYS';

已更新4044行。

SQL> select sid,type,lmode from v$lock where sid=128;
       SID TY      LMODE
---------- -- ----------
       128  TM          3

       128  TX          6

SQL> select session_id,locked_mode from v$locked_object;
SESSION_ID LOCKED_MODE
---------- -----------

       128           3
示例2:

SQL> select * from test for update;

SQL> select sid,type,lmode from v$lock where sid=36;
       SID TY      LMODE
---------- -- ----------
        36 TM          3

        36 TX          6

SQL> select session_id,locked_mode from v$locked_object;
SESSION_ID LOCKED_MODE
---------- -----------

        36           3

有時候查詢v$LOCK會發(fā)現(xiàn)只有TM鎖,沒有TX鎖,那是因為在執(zhí)行DML語句或select ...for update語句時操作的記錄是0條,所以只加上了TM鎖,沒有行需要加TX鎖。

四.手動添加鎖:
級別從低到高,SS可以添加除了X其他的所有類型的鎖。而X鎖不能添加其他任何的鎖。

創(chuàng)建索引時添加的是TM的S鎖,MODE值為4,這個時候是不允許執(zhí)行任何的DML語句的,因為無法在表上添加任何其他排它類型的TM鎖。當(dāng)然我們在創(chuàng)建索引時可以指定ONLINE關(guān)鍵字,可以避免阻塞DML語句情況的出現(xiàn)。
//行共享 SS
LOCK TABLE TABLE_NAME IN ROW SHARE MODE;
//行排它 SX
LOCK TABLE TABLE_NAME IN ROW EXCLUSIVE MODE;
//共享鎖 S
LOCK TABLE TABLE_NAME IN SHARE MODE;
//共享行排它 SSX
LOCK TABLE TABLE_NAME IN SHARE ROW EXCLUSIVE MODE;
//排它鎖 X

LOCK TABLE TABLE_NAME IN EXCLUSIVE MODE;

通過ROLLBACK或COMMIT來釋放鎖。

五.相關(guān)參數(shù):

dml_locks=0(dml_locks相關(guān)含義請看另一篇文章:http://space.itpub.net/23135684/viewspace-626728)

SQL> update test set segment_name='test' where wner='SYS';

已更新4044行。

SQL> select sid,type,lmode from v$lock where sid=128;
       SID TYPE      LMODE
---------- ---- ----------

       128  TX            6

SQL> select session_id,locked_mode from v$locked_object;

未選定行
SQL> drop table test;
drop table test
           *
第 1 行出現(xiàn)錯誤:

ORA-00062: 無法獲得 DML 全表鎖定; DML_LOCKS 為 0

由此證明:如果dml_locks=0,那么執(zhí)行dml語句,表級的TM鎖已經(jīng)不存在了,但是行級別的TX事務(wù)鎖還是存在的。由于不能在表級上添加任何鎖,所以更無法執(zhí)行DDL語句對表進行操作。

網(wǎng)頁標(biāo)題:Oracle的鎖機制原理
分享網(wǎng)址:http://www.chinadenli.net/article32/eohosc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)網(wǎng)站建設(shè)全網(wǎng)營銷推廣標(biāo)簽優(yōu)化自適應(yīng)網(wǎng)站網(wǎng)頁設(shè)計公司

廣告

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

綿陽服務(wù)器托管