TM鎖(" />

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

理解鎖和閂(3)TX鎖和TM鎖

系統(tǒng) 2239 0

oracle沒(méi)有鎖管理器和鎖列表,這樣可以避免行級(jí)鎖維護(hù)的開(kāi)銷(xiāo)和行級(jí)鎖數(shù)量不足導(dǎo)致的爭(zhēng)用問(wèn)題。在Oracle的每行數(shù)據(jù)上,都有一個(gè)標(biāo)志位來(lái)表示該行數(shù)據(jù)是否被鎖定,要查看某一行是否被鎖定,必須直接找到這一行,而不要指望能從哪個(gè)列表得到答案,事務(wù)只是找到數(shù)據(jù)。其locking過(guò)程如下:
㈠ 找到想鎖定的那一行的地址
㈡ 到達(dá)那一行
㈢ 鎖定這一行
在這行的位置,而非某個(gè)鎖列表。如果這一行已經(jīng)鎖定,則等待鎖定它的事務(wù)結(jié)束,除非使用nowait選項(xiàng)。

保護(hù)元數(shù)據(jù)---->TM鎖(表級(jí)鎖)
保護(hù)數(shù)據(jù) ---->TX鎖(事務(wù)鎖)
v$lock列:ID1、ID2
對(duì)TM鎖,ID1表示被locking對(duì)象的object_id,ID2始終為0
對(duì)TX鎖,ID1表示該事務(wù)的xidusn、xidslot,ID2表示xidsqn
對(duì)ID1的拆解:

    14:14:56 hr@ORCL (^ω^) select id1,id2,type from v$lock where type='TX';

       ID1        ID2 TYPE
---------- ---------- ----
    524320       1748 TX
14:16:56 hr@ORCL (^ω^) select 524320/65536 xidusn,mod(524320,65536) xidslot from dual;

    XIDUSN    XIDSLOT
---------- ----------
8.00048828         32
  


事務(wù)鎖不是行級(jí)鎖。行級(jí)鎖觸發(fā)事務(wù)鎖。一個(gè)事務(wù)只有一個(gè)事務(wù)鎖,但可以有多個(gè)行級(jí)鎖。TX鎖用作一種排隊(duì)機(jī)制:請(qǐng)求鎖的事務(wù)會(huì)排隊(duì),等待目前持有鎖的事務(wù)執(zhí)行,然后得到數(shù)據(jù)。
事務(wù)中DML或select ...for update都會(huì)得到一個(gè)TX鎖。

session 1:scott
SQL> update dept set dname=initcap(dname);

已更新4行。
SQL> select username,l.sid,trunc(id1/power(2,16)) xidusn,bitand(id1,to_number('ffff','xxxx'))+0 slot,
2 id2 sqn,lmode,request
3 from v$lock l,v$session s
4 where l.type='TX' and
5 l.sid=s.sid and
6 s.username=USER
7 /

USERNAME SID XIDUSN SLOT SQN LMODE REQUEST
---------- ---------- ---------- ---------- ---------- ---------- ----------
SCOTT 154 10 40 1395 6 0
SQL> select xidusn,xidslot,xidsqn from v$transaction;

XIDUSN XIDSLOT XIDSQN
---------- ---------- ----------
10 40 1395
注釋?zhuān)?
① v$lock表中l(wèi)mode=6為X鎖(排他表級(jí)鎖)。request=0則意味著你擁有這個(gè)鎖
② oracle不會(huì)在任何地方存儲(chǔ)行級(jí)鎖列表。所以v$lock表只有一行,而不是四行

session 2:也是scott
SQL> update emp set ename=upper(ename);

已更新14行。

SQL> update dept set deptno=deptno-10;

現(xiàn)在會(huì)話(huà)被阻塞。
SQL> select username,l.sid,trunc(id1/power(2,16)) xidusn,bitand(id1,to_number('ffff','xxxx'))+0 slot,
2 id2 sqn,lmode,request
3 from v$lock l,v$session s
4 where l.type='TX' and
5 l.sid=s.sid and
6 s.username=USER
7 /

USERNAME SID XIDUSN SLOT SQN LMODE REQUEST
---------- ---------- ---------- ---------- ---------- ---------- ----------
SCOTT 135 10 40 1395 0 6
SCOTT 135 2 1 1777 6 0
SCOTT 154 10 40 1395 6 0
SQL> select xidusn,xidslot,xidsqn from v$transaction;

XIDUSN XIDSLOT XIDSQN
---------- ---------- ----------
2 1 1777
10 40 1395
這里可以看到一個(gè)新的事務(wù),xid為(2,1,1777)。request=6表明對(duì)一個(gè)X鎖的請(qǐng)求。請(qǐng)求行的xid正是持有
者的事務(wù)ID。
SQL> select (select username from v$session where sid=a.sid) blocker,a.sid,
2 'is blocking',
3 (select username from v$session where sid=b.sid) blockee,b.sid
4 from v$lock a,v$lock b
5 where a.block=1 and
6 b.request>0 and
7 a.id1=b.id1 and
8 a.id2=b.id2
9 /

BLOCKER SID 'ISBLOCKING' BLOCKEE SID
---------- ---------- ---------------------- -------- ----------
SCOTT 154 is blocking SCOTT 135

表級(jí)鎖(table-level lock)的作用是對(duì)并發(fā)的 DDL 操作進(jìn)行訪問(wèn)控制,例如防止在 DML 語(yǔ)句執(zhí)行期間相關(guān)的表被移除。當(dāng)用戶(hù)對(duì)表執(zhí)行 DDL 或 DML 操作時(shí),將獲取一個(gè)此表的表級(jí)鎖。表級(jí)鎖不會(huì)影響其他并發(fā)的 DML操作。對(duì)于分區(qū)表來(lái)說(shuō),表級(jí)鎖既可以針對(duì)整個(gè)表,也可以只針對(duì)某個(gè)分區(qū)。

當(dāng)用戶(hù)執(zhí)行以下 DML 語(yǔ)句對(duì)表進(jìn)行修改:INSERT,UPDATE,DELETE,及 SELECT ... FOR UPDATE,或執(zhí)行 LOCK TABLE 語(yǔ)句時(shí),事務(wù)將獲取一個(gè)表級(jí)鎖。當(dāng)一個(gè)未提交的事務(wù)擁有某個(gè)表上的鎖時(shí),此表就無(wú)法被修改定義或被移除。


大家都知道TM鎖共有6種模式,最常見(jiàn)的是3(插入,更新,刪除);4(創(chuàng)建索引時(shí));5(部分DDL操作如:刪除列)等等

理解鎖和閂(3)TX鎖和TM鎖

RS
行共享表級(jí)鎖(row share table lock)(也稱(chēng)為 subshare table lock,SS)表明擁有此鎖的事務(wù)已經(jīng)鎖定了表內(nèi)的 某些數(shù)據(jù)行,并有意對(duì)數(shù)據(jù)行進(jìn)行更新操作。當(dāng)執(zhí)行以下 SQL 語(yǔ)句時(shí)將獲得表上的行共享表級(jí)鎖:


SELECT ... FROM table ... FOR UPDATE OF ... ;
OR
LOCK TABLE table IN ROW SHARE MODE;


RS限制程度最低,因而能夠保證表的最大的并發(fā)訪問(wèn)能力
允許的操作:某個(gè)事務(wù)擁有了某個(gè)表的行共享表級(jí)鎖后,其他事務(wù)依然可以并發(fā)地對(duì)相同數(shù)據(jù)表執(zhí)行查詢(xún),插入,更新,刪除操作,或?qū)Ρ韮?nèi)數(shù)據(jù)行加鎖的操作.
禁止的操作:LOCK TABLE table IN EXCLUSIVE MODE

RX
行排他表級(jí)鎖(row exclusive table lock)(也被稱(chēng)為 subexclusive table lock, SX)通常表明擁有此鎖的事務(wù)已經(jīng)對(duì)表內(nèi)的某些數(shù)據(jù)行進(jìn)行了更新操作。當(dāng)事務(wù)使用以下語(yǔ)句修改數(shù)據(jù)表時(shí)將自動(dòng)地獲得行排他表級(jí)鎖:
INSERT INTO table ... ;
or
UPDATE table ... ;
or
DELETE FROM table ... ;
or
LOCK TABLE table IN ROW EXCLUSIVE MODE;
RX比RS限制程度略高。
允許的操作:某個(gè)事務(wù)擁有了某個(gè)表的行排他表級(jí)鎖后,其他事務(wù)依然可以并發(fā)地對(duì)相同數(shù)據(jù)表執(zhí)行查詢(xún),插入,更新,刪除操作,或?qū)Ρ韮?nèi)數(shù)據(jù)行加鎖的操作。
禁止的操作:
LOCK TABLE table IN SHARE MODE;
or
LOCK TABLE table IN SHARE EXCLUSIVE MODE;
or
LOCK TABLE table IN EXCLUSIVE MODE;

S
以下語(yǔ)句能夠獲得表上的共享表級(jí)鎖(share table lock):
LOCK TABLE table IN SHARE MODE;


注意,在創(chuàng)建索引時(shí),會(huì)缺省地加上S鎖。7*24業(yè)務(wù)這條語(yǔ)句(等價(jià)于建索引)會(huì)使得所有DML都被阻塞!!
允許的操作:某個(gè)事務(wù)擁有了某個(gè)表的S鎖后,其他事務(wù)可以查詢(xún)表,可以使用 SELECT ... FOR UPDATE語(yǔ)句鎖定選中的數(shù)據(jù)行,也能夠成功執(zhí)行 LOCK TABLE ... IN SHARE MODE 語(yǔ)句。多個(gè)事務(wù)可以并發(fā)地獲得同一個(gè)表上的S鎖,在此種情況下任何事務(wù)都不能對(duì)表進(jìn)行更新。擁有S鎖的事務(wù)只有在此表上沒(méi)有其他事務(wù)的S鎖時(shí),才能對(duì)表進(jìn)行更新操作。
禁止的操作:
LOCK TABLE table IN ROW EXCLUSIVE MODE;
OR
LOCK TABLE table IN SHARE ROW EXCLUSIVE MODE;
OR
LOCK TABLE table IN EXCLUSIVE MODE;

SRX
共享行排他表級(jí)鎖(share row exclusive table lock)(也稱(chēng)為 share-subexclusive table lock,SSX)與S鎖相比限制更為嚴(yán)格。用戶(hù)可以使用以下語(yǔ)句獲得SRX:
LOCK TABLE table IN SHARE ROW EXCLUSIVE MODE;
允許的操作:同一時(shí)間只有一個(gè)事物能夠獲得表的共享行排他表級(jí)鎖。某個(gè)事務(wù)擁有了某個(gè)表的共享行排他表級(jí)鎖后,其他事務(wù)可以查詢(xún)表,可以使用SELECT ... FOR UPDATE 語(yǔ)句鎖定選中的數(shù)據(jù)行,但不能對(duì)表進(jìn)行更新操作。
禁止的操作:
LOCK TABLE table IN ROW EXCLUSIVE MODE;
or
LOCK TABLE table IN SHARE MODE;
or
LOCK TABLE table IN SHARE ROW EXCLUSIVE MODE;
or
LOCK TABLE table IN EXCLUSIVE MODE;

X
排他表級(jí)鎖(exclusive table lock)是限制程度最高的表級(jí)鎖,她能使獲得此鎖的事務(wù)排他地對(duì)表進(jìn)行寫(xiě)操作。排他表級(jí)鎖可以使用以下語(yǔ)句獲得:
LOCK TABLE table IN EXCLUSIVE MODE;
允許的操作:同一時(shí)間只有一個(gè)事務(wù)能獲得表上的X鎖。一個(gè)事務(wù)獲得X后,其他事務(wù)只能對(duì)表進(jìn)行查詢(xún)操作。
禁止的操作:一個(gè)事務(wù)獲得X鎖后,將禁止其他事務(wù)對(duì)表執(zhí)行任何 DML 操作,其他事務(wù)也無(wú)法獲取表上任何類(lèi)型的鎖。

限制程度表

lmode type
2 RS
3 RX
4 S
5 SRX
6 X

當(dāng)TM鎖獲得后,系統(tǒng)會(huì)自動(dòng)申請(qǐng)TX鎖,并將實(shí)際locking的行級(jí)鎖的鎖標(biāo)志位置位(指向該TX鎖)。

理解鎖和閂(3)TX鎖和TM鎖


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 色视频国产 | 国产欧美亚洲另类第一页 | 日日噜噜夜夜躁躁狠狠 | 五月婷激情| 福利一区在线观看 | 天海翼精品久久中文字幕 | www.中文字幕.com | 手机看片在线精品观看 | 日本免费一区视频 | 色吧综合网 | 日本一区二区三区免费在线观看 | 乱人伦中文视频在线 | 高清欧美一区二区免费影视 | 高清国产美女在线观看 | 一级aa免费视频毛片 | 国产欧美久久久另类精品 | 久久久高清日本道免费观看 | 亚洲精品久久久久中文 | 四虎精品永久免费 | 午夜社区 | 亚洲一区二区三区久久久久 | 国内自拍一二三四2021 | 欧洲免费无线码二区5 | 狠狠色噜狠狠狠狠色综合久 | 国产欧美在线播放 | 中文字幕伦理聚合第一页 | 一区精品在线 | 久久艹在线观看 | 日日摸夜夜添夜夜添影院视频 | 九九毛片| 日韩中文字幕精品视频在线 | 亚洲国产精品久久久天堂麻豆 | 99热这里只有精品5 99热这里只有精品66 | 亚洲精品欧美在线 | 99久久亚洲 | 欧美成在线视频 | 四虎影院在线免费播放 | 久久99亚洲精品久久久久网站 | 日韩免费毛片视频 | 国产一级大片免费看 | 亚洲综合五月 |