中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

oracle數據庫事務transaction鎖lock模式思考之一

發布時間:2020-08-06 17:00:05 來源:ITPUB博客 閱讀:398 作者:wisdomone1 欄目:關系型數據庫

前言

        數據庫事務是oracle非常基礎又極為重要的概念。之前已經介紹過相關的一些概念,相關文章見下:  
  

oracle產生事務transaction幾種方式或方法  
oracle事務隔離級別transaction isolation level初識

      產生數據庫事務時,必然會在數據庫事務運行期間產生各種各樣的鎖。與鎖相關的動態性能視圖為v$lock,里面有個列lmode,即持鎖模式或叫鎖模式,其具體含義及取值

oracle數據庫事務transaction鎖lock模式思考之一

鎖模式lmode可以有7種不同的取值,每個值到底是什么意思,具體含義見下

oracle數據庫事務transaction鎖lock模式思考之一

鎖模式測試實踐

創建測試表并插入記錄

SQL> create table t_lockmode(a int,b int);
Table created.
SQL> insert into t_lockmode select 1,1 from dual;
1 row created.
SQL> commit;
Commit complete.
  • row share

這種鎖模式 允許 多個會話并發訪問被鎖定的表,但是不允許 其它會話以 exclusive排它模式鎖定整個表
這種鎖模式也是鎖模式 share update的同義詞
這種鎖模式仍然存在是為了兼容 oracle舊版本
--未加鎖前的測試會話的持鎖信息
(可見數據庫一直會持有各種鎖,下述的鎖是系統鎖,而非用戶鎖)
SQL> select addr,sid,type,lmode,request,block from v$lock where sid=73;
ADDR			SID TY	    LMODE    REQUEST	  BLOCK
---------------- ---------- -- ---------- ---------- ----------
000000008D2498B8	 73 AE		4	   0	      0
000000008D249AE8	 73 TO		3	   0	      0
--測試會話加 row share鎖模式
SQL> lock table t_lockmode in row share mode;
Table(s) Locked.
--加鎖模式 row share后的持鎖信息
SQL> /
ADDR			SID TY	    LMODE    REQUEST	  BLOCK
---------------- ---------- -- ---------- ---------- ----------
000000008D2498B8	 73 AE		4	   0	      0
000000008D249AE8	 73 TO		3	   0	      0
00007FE54C209CD8	 73 TM		2	   0	      0  --lmode=2
---其它會話可以row share鎖模式并發訪問表
SQL> select sid from v$mystat where rownum=1;
       SID
----------
	28
SQL> lock table t_lockmode in row share mode;
Table(s) Locked.
SQL> rollback;
Rollback complete.
--其它會話可以 row exclusive鎖模式 并發訪問表
SQL> lock table t_lockmode in row exclusive mode;
Table(s) Locked.
SQL> rollback;
Rollback complete.
---其它會話可以share鎖模式并發訪問表
SQL> lock table t_lockmode in share mode;
Table(s) Locked.
SQL> rollback;
Rollback complete.
----其它會話可以 share row exclusive鎖模式并發訪問表
SQL> lock table t_lockmode in share row exclusive mode;
Table(s) Locked.
SQL> rollback;
Rollback complete.
----其它會話不能以 exclusive鎖模式并發訪問表
--卡住
SQL> lock table t_lockmode in exclusive mode;
SQL> /
ADDR			SID TY	    LMODE    REQUEST	  BLOCK
---------------- ---------- -- ---------- ---------- ----------
000000008D2498B8	 73 AE		4	   0	      0
000000008D249AE8	 73 TO		3	   0	      0
00007FE54C2042E0	 73 TM		2	   0	      1
  • row exclusive

這種鎖模式 同于row share,但是不允許其它會話以 share鎖模式訪問
這種鎖模式 在執行DML操作(update,insert,delete)會自動獲取這種鎖模式
測試會話以row exclusive鎖模式持有表
SQL> lock table t_lockmode in row exclusive mode;
Table(s) Locked.
SQL> select addr,sid,type,lmode,request,block from v$lock where sid=73;
ADDR			SID TY	    LMODE    REQUEST	  BLOCK
---------------- ---------- -- ---------- ---------- ----------
000000008D2498B8	 73 AE		4	   0	      0
000000008D249AE8	 73 TO		3	   0	      0
00007FE54C2042E0	 73 TM		3	   0	      0  --lmode=3
--其它會話可以row share鎖模式 并發訪問表
SQL> lock table t_lockmode in row share mode;
Table(s) Locked.
SQL> rollback;
Rollback complete.
--其它會話可以 row exclusive鎖模式 并發訪問表
SQL> lock table t_lockmode in row exclusive mode;
Table(s) Locked.
SQL> rollback;
Rollback complete.
--其它會話 不能以share鎖模式 并發訪問表
--卡住
SQL> lock table t_lockmode in share mode;
^Clock table t_lockmode in share mode
           *
ERROR at line 1:
ORA-01013: user requested cancel of current operation
--其它會話 不能以share row exclusive鎖模式 并發訪問表
SQL> lock table t_lockmode in share row exclusive mode;
^Clock table t_lockmode in share row exclusive mode
*
ERROR at line 1:
ORA-01013: user requested cancel of current operation
--其它會話 不能以exclusive鎖模式 并發訪問表
SQL> lock table t_lockmode in exclusive mode;
^Clock table t_lockmode in exclusive mode
           *
ERROR at line 1:
ORA-01013: user requested cancel of current operation
  • share

這種鎖模式 允許 多個會話并發查詢,但是不允許 對于鎖定表的update操作
測試會話以share鎖模式持有表
SQL> lock table t_lockmode in share mode;
Table(s) Locked.
SQL> select addr,sid,type,lmode,request,block from v$lock where sid=73;
ADDR			SID TY	    LMODE    REQUEST	  BLOCK
---------------- ---------- -- ---------- ---------- ----------
000000008D2498B8	 73 AE		4	   0	      0
000000008D249AE8	 73 TO		3	   0	      0
00007FE54C209CD8	 73 TM		4	   0	      0  --lmode=4
--其它會話可以row share鎖模式 并發訪問表
SQL>  lock table t_lockmode in row share mode;
Table(s) Locked.
SQL> rollback;
Rollback complete.
--其它會話不能以 row exclusive鎖模式 并發訪問表
SQL> lock table t_lockmode in row exclusive mode;
^Clock table t_lockmode in row exclusive mode
*
ERROR at line 1:
ORA-01013: user requested cancel of current operation
--其它會話可以 share鎖模式 并發訪問表
SQL> lock table t_lockmode in share mode;
Table(s) Locked.
SQL> rollback;
Rollback complete.
---其它會話 不允許以 share row exclusive鎖模式 并發訪問表
SQL> lock table t_lockmode in share row exclusive mode;
^Clock table t_lockmode in share row exclusive mode
*
ERROR at line 1:
ORA-01013: user requested cancel of current operation
---其它會話 不允許以 exclusive鎖模式 并發訪問表
SQL>  lock table t_lockmode in  exclusive mode;
^C lock table t_lockmode in  exclusive mode
*
ERROR at line 1:
ORA-01013: user requested cancel of current operation
  • share row exclusive

這種鎖模式 用于查看整個表,允許 其它會話查看表的數據,但是不允許其它會話 以share鎖模式獲取表 ,也不允許 其它會話update被鎖定表
這種鎖模式 允許 對于鎖定表的查詢,但不允許 對于鎖定表的其它任何操作
測試會話以 share row exclusive鎖模式持有表
SQL> lock table t_lockmode in share row exclusive mode;
Table(s) Locked.
SQL> /
ADDR			SID TY	    LMODE    REQUEST	  BLOCK
---------------- ---------- -- ---------- ---------- ----------
000000008D2498B8	 73 AE		4	   0	      0
000000008D249AE8	 73 TO		3	   0	      0
00007FE54C209CD8	 73 TM		5	   0	      0
--其它會話 允許 以row share鎖模式 并發訪問表
SQL> lock table t_lockmode in row share mode;
Table(s) Locked.
SQL> rollback;
Rollback complete.
--其它會話 不允許 以row exclusive鎖模式 并發訪問表
SQL> lock table t_lockmode in row exclusive mode;
^Clock table t_lockmode in row exclusive mode
*
ERROR at line 1:
ORA-01013: user requested cancel of current operation
---其它會話 不允許 以share鎖模式 并發訪問表
SQL> lock table t_lockmode in  share mode;
^Clock table t_lockmode in  share mode
*
ERROR at line 1:
ORA-01013: user requested cancel of current operation
---其它會話 不允許 以share row exclusive鎖模式 并發訪問表
SQL> lock table t_lockmode in share row exclusive mode;
^Clock table t_lockmode in share row exclusive mode
*
ERROR at line 1:
ORA-01013: user requested cancel of current operation
---其它會話 不允許以 exclusive鎖模式 并發訪問表
SQL> lock table t_lockmode in exclusive mode;
^Clock table t_lockmode in exclusive mode
*
ERROR at line 1:
ORA-01013: user requested cancel of current operation
  • exclusive

這種鎖模式 允許 對于鎖定表的查詢,但不允許 對于鎖定表的其它任何操作
--測試會話以  exclusive鎖模式持有表
SQL> lock table t_lockmode in exclusive mode;
Table(s) Locked.
SQL> /
ADDR			SID TY	    LMODE    REQUEST	  BLOCK
---------------- ---------- -- ---------- ---------- ----------
000000008D2498B8	 73 AE		4	   0	      0
000000008D249AE8	 73 TO		3	   0	      0
00007FE54C2042E0	 73 TM		6	   0	      0  --lmode=6
--其它會話 不允許以 row share鎖模式 并發訪問表
SQL> lock table t_lockmode in row share mode;
^Clock table t_lockmode in row share mode
*
ERROR at line 1:
ORA-01013: user requested cancel of current operation
---其它會話不允許 以row exclusive鎖模式 并發訪問表
SQL> lock table t_lockmode in row exclusive mode;
^Clock table t_lockmode in row exclusive mode
*
ERROR at line 1:
ORA-01013: user requested cancel of current operation
---其它會話不允許以 share鎖模式 并發訪問表
SQL> lock table t_lockmode in share mode;
^Clock table t_lockmode in share mode
*
ERROR at line 1:
ORA-01013: user requested cancel of current operation
---其它會話不允許 以share row exclusive鎖模式 并發訪問表
SQL> lock table t_lockmode in share row exclusive mode;
^Clock table t_lockmode in share row exclusive mode
*
ERROR at line 1:
ORA-01013: user requested cancel of current operation
--其它會話不允許 以exclusive鎖模式 并發訪問表
SQL> lock table t_lockmode in exclusive mode;
^Clock table t_lockmode in exclusive mode
*
ERROR at line 1:
ORA-01013: user requested cancel of current operation

鎖模式之間的的兼容性圖

oracle數據庫事務transaction鎖lock模式思考之一

小結

  • exclusive鎖模式最牛逼,它是唯我獨尊,獨對排它訪問,它一占用表鎖資源,其它會話只能等待

  • row share(share update)鎖模式相對而言最溫和,它基本和所有的鎖模式可以并存,只是不允許exclusive鎖模式

  • share row exclusive鎖模式雖然沒有exclusive鎖模式這么牛逼,它可以排第二種嚴厲鎖模式,它只能兼容row share(share update)鎖模式

  • row exclusive及share鎖模式排位在share row exclusive之后,它可以兼容3種鎖模式,不兼容余下2種鎖模式

培訓課件

(收費20元)

oracle數據庫事務transaction鎖lock模式思考之一

oracle數據庫事務transaction鎖lock模式思考之一

聯系方式

oracle數據庫事務transaction鎖lock模式思考之一

oracle數據庫事務transaction鎖lock模式思考之一

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

罗源县| 菏泽市| 安新县| 丹东市| 乐平市| 昌平区| 武强县| 铜川市| 阆中市| 准格尔旗| 华池县| 新密市| 科技| 瓦房店市| 柳江县| 涞源县| 峨山| 博客| 德江县| 广河县| 朔州市| 象山县| 凌源市| 舒兰市| 山西省| 宝坻区| 宣汉县| 十堰市| 达拉特旗| 乳源| 四川省| 花垣县| 海门市| 汽车| 富顺县| 福建省| 太保市| 堆龙德庆县| 定安县| 新丰县| 竹北市|