select for update_v$lock_dml小測試(鎖型別及模式)
SQL> select kaddr,sid,type,id1,id2,decode(lmode,0,'none',1,'null',2,'row-share',3,'row-exclusive',4,'share',5,'share row exclusive',6,'exclusive') lmode,
decode(request,0,'none',1,'null',2,'row-share',3,'row-exclusive',4,'share',5,'share row exclusive',6,'exclusive') request,block
from v$lock where sid in(149,145) order by 2;
KADDR SID TY ID1 ID2 LMODE REQUEST
---------------- ---------- -- ---------- ---------- ------------------- ---------- --id1及id2含義取決於鎖的型別,lmode為持鎖型別或叫模式,共有6種型別,請求鎖模式同理,type為鎖型別:分為使用者鎖和系統鎖,此外
我們是使用者鎖,具體請查閱官方手冊
00000000703B8758 149 TM 51356 0 row-exclusive 0
00000000704A7788 149 TX 65581 299 none 6
000000006F4A76E0 159 TX 65581 299 exclusive 0
00000000703B8658 159 TM 51356 0 row-exclusive 0
--搞清所有鎖型別及鎖模式的含義及作用
--id1及id2的含義
SQL> select * from test where deptno in(10,20,30) for update; --持鎖會話
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
SQL> select distinct sid from v$mystat;
SID
----------
159
SQL>
SQL> update test set dname='x' where deptno=30; ---請求鎖會話
SQL> update test set deptno=88;--145 會話,持鎖會話
6 rows updated.
SQL> create index idx_test on test(deptno);--149會話,請求鎖會話(select for update同理),注:select * from test nowait,nowait用於dml語句請求鎖資源是否馬上向客戶端返回提示錯誤資訊(如:資源正忙之類)
create index idx_test on test(deptno)
*
ERROR at line 1:
ORA-00054: resource busy and acquire with NOWAIT specified
SQL> /
KADDR SID TY ID1 ID2 LMODE REQUEST BLOCK
---------------- ---------- -- ---------- ---------- ------------------- ------------------- ----------
000000006F466990 145 TX 327701 310 exclusive none 0 --block=1表示持鎖會話,block=0為非持鎖會話
小結:
select for update會形成排它鎖及行級排它鎖(tx及tm鎖),且會阻塞其它dml及create|drop index相關動作
select for date及dml不會阻塞dbms_stats收集統計資訊動作
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9240380/viewspace-671013/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 漏洞型別及檢測型別
- oracle鎖級別相關測試Oracle
- SQL Server中的鎖型別及用法SQLServer型別
- js型別測試學習JS型別
- 測試NUMBER型別的效能型別
- 【部落格1】c++測試this指標的傳入及型別C++指標型別
- 軟體測試開發:常見測試型別概念型別
- c#多型性測試小例C#多型
- MYSQL METADATA LOCK(MDL LOCK)學習(1) 理論知識和加鎖型別測試MySql型別
- 軟體驗收測試 常見測試報告的型別測試報告型別
- c#之資料型別小測記C#資料型別
- 資料型別和運算子測試題資料型別
- 測試boot庫下I/O模型型別boot模型型別
- 測試Java中的long,int基本型別Java型別
- mysql中varchar型別最大長度測試MySql型別
- expdp測試包含有lob型別的物件型別物件
- Python單元測試框架pytest常用測試報告型別Python框架測試報告型別
- oracle封鎖測試Oracle
- Oracle中的鎖型別Oracle型別
- 確定enqueue鎖型別ENQ型別
- Android Testing學習01 介紹 測試測什麼 測試的型別Android型別
- 網路安全滲透測試的型別!滲透測試入門教程型別
- 敏捷開發中的7種測試型別敏捷型別
- 測試使用字串型別要注意的地方字串型別
- 路由器測試的型別和方法[轉]路由器型別
- MySQL 5.5 InnoDB表鎖行鎖測試MySql
- oracle dml產生undo的區別小測試Oracle
- Sqlserver的merge into或delete語句堵塞select語句,鎖型別是LCK_M_ISSQLServerdelete型別
- 分散式鎖--Redis小試牛刀分散式Redis
- MySQL行級鎖測試MySql
- MySQL中InnoDB鎖機制介紹及一些測試MySql
- oracle taf type型別為session和select的區別Oracle型別Session
- Innodb:RR隔離級別下insert...select 對select表加鎖模型和死鎖案列模型
- 利率型別_小記型別
- 軟體測試報告模板的型別有哪些?測試報告型別
- 金融行業的軟體測試型別細分行業型別
- 測試平臺系列(70) 豐富斷言型別型別
- 測試TOM=用PLSQL載入LOB型別資料SQL型別