TM鎖(" />

欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

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

系統 2319 0

oracle沒有鎖管理器和鎖列表,這樣可以避免行級鎖維護的開銷和行級鎖數量不足導致的爭用問題。在Oracle的每行數據上,都有一個標志位來表示該行數據是否被鎖定,要查看某一行是否被鎖定,必須直接找到這一行,而不要指望能從哪個列表得到答案,事務只是找到數據。其locking過程如下:
㈠ 找到想鎖定的那一行的地址
㈡ 到達那一行
㈢ 鎖定這一行
在這行的位置,而非某個鎖列表。如果這一行已經鎖定,則等待鎖定它的事務結束,除非使用nowait選項。

保護元數據---->TM鎖(表級鎖)
保護數據 ---->TX鎖(事務鎖)
v$lock列:ID1、ID2
對TM鎖,ID1表示被locking對象的object_id,ID2始終為0
對TX鎖,ID1表示該事務的xidusn、xidslot,ID2表示xidsqn
對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
  


事務鎖不是行級鎖。行級鎖觸發事務鎖。一個事務只有一個事務鎖,但可以有多個行級鎖。TX鎖用作一種排隊機制:請求鎖的事務會排隊,等待目前持有鎖的事務執行,然后得到數據。
事務中DML或select ...for update都會得到一個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
注釋:
① v$lock表中lmode=6為X鎖(排他表級鎖)。request=0則意味著你擁有這個鎖
② oracle不會在任何地方存儲行級鎖列表。所以v$lock表只有一行,而不是四行

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

已更新14行。

SQL> update dept set deptno=deptno-10;

現在會話被阻塞。
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
這里可以看到一個新的事務,xid為(2,1,1777)。request=6表明對一個X鎖的請求。請求行的xid正是持有
者的事務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

表級鎖(table-level lock)的作用是對并發的 DDL 操作進行訪問控制,例如防止在 DML 語句執行期間相關的表被移除。當用戶對表執行 DDL 或 DML 操作時,將獲取一個此表的表級鎖。表級鎖不會影響其他并發的 DML操作。對于分區表來說,表級鎖既可以針對整個表,也可以只針對某個分區。

當用戶執行以下 DML 語句對表進行修改:INSERT,UPDATE,DELETE,及 SELECT ... FOR UPDATE,或執行 LOCK TABLE 語句時,事務將獲取一個表級鎖。當一個未提交的事務擁有某個表上的鎖時,此表就無法被修改定義或被移除。


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

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

RS
行共享表級鎖(row share table lock)(也稱為 subshare table lock,SS)表明擁有此鎖的事務已經鎖定了表內的 某些數據行,并有意對數據行進行更新操作。當執行以下 SQL 語句時將獲得表上的行共享表級鎖:


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


RS限制程度最低,因而能夠保證表的最大的并發訪問能力
允許的操作:某個事務擁有了某個表的行共享表級鎖后,其他事務依然可以并發地對相同數據表執行查詢,插入,更新,刪除操作,或對表內數據行加鎖的操作.
禁止的操作:LOCK TABLE table IN EXCLUSIVE MODE

RX
行排他表級鎖(row exclusive table lock)(也被稱為 subexclusive table lock, SX)通常表明擁有此鎖的事務已經對表內的某些數據行進行了更新操作。當事務使用以下語句修改數據表時將自動地獲得行排他表級鎖:
INSERT INTO table ... ;
or
UPDATE table ... ;
or
DELETE FROM table ... ;
or
LOCK TABLE table IN ROW EXCLUSIVE MODE;
RX比RS限制程度略高。
允許的操作:某個事務擁有了某個表的行排他表級鎖后,其他事務依然可以并發地對相同數據表執行查詢,插入,更新,刪除操作,或對表內數據行加鎖的操作。
禁止的操作:
LOCK TABLE table IN SHARE MODE;
or
LOCK TABLE table IN SHARE EXCLUSIVE MODE;
or
LOCK TABLE table IN EXCLUSIVE MODE;

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


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

SRX
共享行排他表級鎖(share row exclusive table lock)(也稱為 share-subexclusive table lock,SSX)與S鎖相比限制更為嚴格。用戶可以使用以下語句獲得SRX:
LOCK TABLE table IN SHARE ROW EXCLUSIVE MODE;
允許的操作:同一時間只有一個事物能夠獲得表的共享行排他表級鎖。某個事務擁有了某個表的共享行排他表級鎖后,其他事務可以查詢表,可以使用SELECT ... FOR UPDATE 語句鎖定選中的數據行,但不能對表進行更新操作。
禁止的操作:
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
排他表級鎖(exclusive table lock)是限制程度最高的表級鎖,她能使獲得此鎖的事務排他地對表進行寫操作。排他表級鎖可以使用以下語句獲得:
LOCK TABLE table IN EXCLUSIVE MODE;
允許的操作:同一時間只有一個事務能獲得表上的X鎖。一個事務獲得X后,其他事務只能對表進行查詢操作。
禁止的操作:一個事務獲得X鎖后,將禁止其他事務對表執行任何 DML 操作,其他事務也無法獲取表上任何類型的鎖。

限制程度表

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

當TM鎖獲得后,系統會自動申請TX鎖,并將實際locking的行級鎖的鎖標志位置位(指向該TX鎖)。

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


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产欧美日韩精品一区 | 成人在线观看免费视频 | 好吊在线视频 | 在线观看日本污污ww网站 | 欧美国产中文 | 色艹| 国产亚洲精彩视频 | www.色综合 | 午夜视频日本 | 狠狠操电影 | 色黄视频在线观看 | 国产亚洲欧美日韩v在线 | 色偷偷网 | 四虎免费在线视频 | 国产 福利 在线 | 成人福利在线观看 | 91精品一区二区三区久久久久久 | caoporn地址 | 九九精品视频一区在线 | 亚洲第一黄色网址 | 国产a久久精品一区二区三区 | 97国产 | 草樱av| 日韩视频在线免费观看 | 欧美极品在线观看 | 高清国产一区二区三区 | 国产午夜精品一区二区三区嫩草 | jiucao在线观看精品 | 亚洲视频在线看 | 四虎影院最新网址 | 天天摸天天爽天天澡视频 | 青娱乐免费视频 | 成人一级大片 | 婷婷激情久久 | 成人精品久久 | 黄色视屏免费看 | 精品一区二区三区免费 | 精品毛片| 爱爱视频网站 | 亚洲免费一级视频 | 久久综合九色综合欧美狠狠 |