Oracle LOCK內部機制及最佳實踐系列(三)構想一個使用手工鎖定解決一種業務需求的場景
自己構想一個使用手工鎖定解決一種業務需求的場景,並給出SQL演示。
場景:手工鎖定一個表,例如 我們在做一個秘密交易的時候,談好的價格就不能變了,必須一手交錢一手交貨完成交易,為了保證價格安全,我們先把價格表鎖定,這期間不允許篡改,保證完成交易
> lock table t1 in share mode; 手工鎖定一個表,設定鎖的級別為4
Table(s) Locked.
> select sid,type,id1,id2,lmode,request,block from v$lock where type in ('TM','TX') order by 1,2;
SID TYPE ID1 ID2 LMODE REQUEST BLOCK
---------- ---------- ---------- ---------- ---------- ---------- ----------
138 TM 73449 0 4 0 0 已經在T1表上加上了4號鎖,除了當前會話外阻塞其他會話進行修改
> insert into leo1.t1 values(5); 我們在會話leo2上插入一條記錄,此時hang住了不動了
> select sid,type,id1,id2,lmode,request,block from v$lock where type in ('TM','TX') order by 1,2;
SID TYPE ID1 ID2 LMODE REQUEST BLOCK
---------- ---------- ---------- ---------- ---------- ---------- ----------
138 TM 73449 0 4 0 1
156 TM 73449 0 0 3 0
這就是由於我們加了4號鎖除了當前會話外阻塞156會話進行修改,156會話預設可以獲得一個3號鎖,由於3號和4號互斥不能共存,所以沒有獲得鎖,正在等待申請3號鎖
> commit; 鎖跟著事務的結束而釋放,commit rollback都行
> select sid,type,id1,id2,lmode,request,block from v$lock where type in ('TM','TX') order by 1,2; 此時沒有鎖資訊了
no rows selected
2012.11.28
天津&winter
分享技術~成就夢想
Blog:
場景:手工鎖定一個表,例如 我們在做一個秘密交易的時候,談好的價格就不能變了,必須一手交錢一手交貨完成交易,為了保證價格安全,我們先把價格表鎖定,這期間不允許篡改,保證完成交易
> lock table t1 in share mode; 手工鎖定一個表,設定鎖的級別為4
Table(s) Locked.
> select sid,type,id1,id2,lmode,request,block from v$lock where type in ('TM','TX') order by 1,2;
SID TYPE ID1 ID2 LMODE REQUEST BLOCK
---------- ---------- ---------- ---------- ---------- ---------- ----------
138 TM 73449 0 4 0 0 已經在T1表上加上了4號鎖,除了當前會話外阻塞其他會話進行修改
> insert into leo1.t1 values(5); 我們在會話leo2上插入一條記錄,此時hang住了不動了
> select sid,type,id1,id2,lmode,request,block from v$lock where type in ('TM','TX') order by 1,2;
SID TYPE ID1 ID2 LMODE REQUEST BLOCK
---------- ---------- ---------- ---------- ---------- ---------- ----------
138 TM 73449 0 4 0 1
156 TM 73449 0 0 3 0
這就是由於我們加了4號鎖除了當前會話外阻塞156會話進行修改,156會話預設可以獲得一個3號鎖,由於3號和4號互斥不能共存,所以沒有獲得鎖,正在等待申請3號鎖
> commit; 鎖跟著事務的結束而釋放,commit rollback都行
> select sid,type,id1,id2,lmode,request,block from v$lock where type in ('TM','TX') order by 1,2; 此時沒有鎖資訊了
no rows selected
2012.11.28
天津&winter
分享技術~成就夢想
Blog:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26686207/viewspace-750181/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 構想一個使用手工鎖定解決一種業務需求的場景
- Oracle LOCK內部機制及最佳實踐系列(二)模擬RI鎖定導致阻塞的場景,並分析v$lockOracle
- Oracle LOCK內部機制及最佳實踐系列(五)給出一個導致死鎖的SQL示例OracleSQL
- Oracle LOCK內部機制及最佳實踐系列(一)分別模擬insert|update|delete造成阻塞及說明Oracledelete
- Oracle LOCK內部機制及最佳實踐系列(四)深入分析mode 2-6 的TM鎖相互間的互斥關係Oracle
- ORACLE 鎖機制及解決方法Oracle
- oracle lock轉換及oracle deadlock死鎖系列一Oracle
- SAP Fiori裡兩種鎖機制(lock)的實現
- 一文弄懂分散式場景中各種鎖的原理及使用分散式
- WPF原始碼分析系列一:剖析WPF模板機制的內部實現(一)原始碼
- RocketMQ 重試機制詳解及最佳實踐MQ
- WPF原始碼分析系列一:剖析WPF模板機制的內部實現(五)原始碼
- oracle lock系列一Oracle
- HBase 在統一內容平臺業務的最佳化實踐
- ORACLE DML鎖定機制Oracle
- Oracle Library cache內部機制詳解Oracle
- 四大業務場景解析資料化運營的最佳實踐
- Redis五種資料結構及使用場景Redis資料結構
- buffer cache 內部機制深入探索【一】
- RocketMQ 客戶端負載均衡機制詳解及最佳實踐MQ客戶端負載
- HashMap的內部實現機制HashMap
- 解鎖「SOAR」在不同場景下的應用與實踐
- 每天一個 PHP 語法六陣列使用及內部結構PHP陣列
- 一些資料賦能業務的場景及案例
- 無鎖的資料結構(Lock-Free)及CAS(Compare-and-Swap)機制資料結構
- 每天一個 PHP 語法-變數使用及內部實現PHP變數
- 使用oracle 10704 event分析獲取鎖lock及死鎖deadlock系列九Oracle
- Oracle中的死鎖Dead Lock(一)Oracle
- Redis 5種資料結構 及使用場景分析Redis資料結構
- 揭秘政企安全加速解決方案的架構與應用場景實踐架構
- 一朵雲、一張網、一體化 ——GRTN 打造最佳流媒體場景實踐
- 六種機率資料結構的詳細解釋及應用場景資料結構
- 一文詳解MySQL的鎖機制MySql
- [譯] JavaScript 工作原理:Web Worker 的內部構造以及 5 種你應當使用它的場景JavaScriptWeb
- 每天一個 PHP 語法二字串使用及內部結構PHP字串
- 一個 Pipeline 的使用場景
- IoT裝置與手機App之間如何實現實時訊息通訊——業務場景最佳實踐APP
- ORACLE分散式事務鎖各種場景下的處理詳解Oracle分散式