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
- 【部落格1】c++測試this指標的傳入及型別C++指標型別
- Sqlserver的merge into或delete語句堵塞select語句,鎖型別是LCK_M_ISSQLServerdelete型別
- 軟體測試開發:常見測試型別概念型別
- Python單元測試框架pytest常用測試報告型別Python框架測試報告型別
- 軟體驗收測試 常見測試報告的型別測試報告型別
- Android Testing學習01 介紹 測試測什麼 測試的型別Android型別
- 測試Java中的long,int基本型別Java型別
- 資料型別和運算子測試題資料型別
- 測試boot庫下I/O模型型別boot模型型別
- mysql中varchar型別最大長度測試MySql型別
- QZ面試被問select......for update會鎖表還是鎖行lor面試
- [基礎] JavaScript 型別轉換及面試題JavaScript型別面試題
- 網路安全滲透測試的型別!滲透測試入門教程型別
- service型別及功能簡介+pod型別型別
- Java資料型別及型別轉換Java資料型別
- LiteOS:SpinLock自旋鎖及LockDep死鎖檢測
- MySQL中InnoDB鎖機制介紹及一些測試MySql
- 分散式鎖--Redis小試牛刀分散式Redis
- InnoDB儲存引擎鎖機制(二、 鎖的型別)儲存引擎型別
- C++ const void * 型別轉換簡單測試C++型別
- 金融行業的軟體測試型別細分行業型別
- 軟體測試報告模板的型別有哪些?測試報告型別
- 測試平臺系列(70) 豐富斷言型別型別
- js 型別檢測JS型別
- mysql insert into ... select的鎖問題MySql
- IO模式 select、poll、epoll模式
- 測試物件和測試級別物件
- 簡單型別與複雜型別及原型鏈型別原型
- 解鎖 AB 測試的力量
- 測試MySQL鎖的問題MySql
- 《包你懂系列》類鎖和物件鎖到底有什麼區別,面試重點題型物件面試
- 軟體測試模式模式
- 專業人士必知,滲透測試工具的型別!型別
- select * 和 select 所有欄位的區別
- 第三方軟體測試機構可提供哪些測試服務型別?型別
- Android UXSS階段性小結及自動化測試AndroidUX
- MySQL自增列鎖模式 innodb_autoinc_lock_mode不同引數下效能測試MySql模式