国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Oracle > 正文

Oracle 數據庫針對表主鍵列并發導致行級鎖簡單演示

2024-08-29 13:55:21
字體:
來源:轉載
供稿:網友

本文內容
•軟件環境
•簡單演示 Oracle 數據庫并發導致行級鎖
本文簡單演示針對表主鍵并發導致的行級鎖。并發是兩個以上的用戶對同樣的數據進行修改(包括插入、刪除和修改)。鎖的產生是因為并發。沒有并發,就沒有鎖。并發的產生是因為系統需要,系統需要是因為用戶需要。

軟件環境
--------------------------------------------------------------------------------
•Windows 2003 Server
•Oracle 11g Release 1 (11.1)
簡單演示 Oracle 數據庫并發導致行級鎖
首先,打開一個會話 session 1,執行如下操作:

復制代碼 代碼如下:


SQL> select distinct sid from V$mystat;

SID
----------
118
SQL> create table t (x int primary key);
表已創建。
SQL> insert into t values(1);
已創建 1 行。
SQL> update t set x=10 where x=1;
已更新 1 行。
SQL>


先查看本次會話的 SID,然后創建一個表 t,只有一個名為 x 的字段,且該字段為主鍵,插入一條數據,并更新該數據。

接下來,打開另一個會話 session 2:

復制代碼 代碼如下:


SQL> select distinct sid from V$mystat;

SID
----------
137
SQL> update t set x=10 where x=1;


此時,該會話被“卡”在這里不動。只是光標一直在閃……因為,session 2 被 session 1 阻塞。
現在,查看鎖定視圖 V$LOCK。

復制代碼 代碼如下:


SQL> select sid,type,id1,id2,lmode,request,block
2 from v$lock where sid in (118,137)
3 order by sid;


Oracle 數據庫針對表主鍵列并發導致行級鎖簡單演示


已選擇6行。
SQL>
說明:“TYPE”列表示鎖的類型;“LMODE”列表示鎖的模式;“ID1”和“ID2”列是鎖的相關信息。“REQUEST”列是正在什么鎖。

SID=118 是第一個會話,SID=137 是第二個會話。第三行,第一個會話 BLOCK=1 表示這個會話正在阻塞其他會話,LMODE=6 表示鎖的模式,即行級排他鎖。第六行,第二個會話 REQUEST=6 表示當前會話正在等待一個 LMODE=6 的鎖。注意,第三行和第六行的 ID1 和 ID2 列完全相同。因為它們指向統一資源,只不過一個是資源的擁有者(SID=118),一個是資源的等待者(SID=137)。

通過這個視圖,很容易發現所在——故障定位(trouble shooting)。會話 2 之所以被“卡”住,是因為會話 1 還沒提交,而在這張表上,又恰好有要求列值唯一性約束。
通過 SID 號,查看視圖 V$SESSION 就可以確定用戶信息。

復制代碼 代碼如下:


SQL> select machine from v$session where sid in (118,137);

MACHINE
----------------------------------------------------------------
NUODE/LN
NUODE/LN
SQL>


因為,兩個會話是同一臺機器,所以名字一樣。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 翁牛特旗| 疏勒县| 射阳县| 龙陵县| 宜都市| 忻城县| 南丹县| 望城县| 铜山县| 怀仁县| 卢氏县| 宝坻区| 舞阳县| 清流县| 南阳市| 偏关县| 乌审旗| 泊头市| 平南县| 瑞金市| 鹤岗市| 奉节县| 宝应县| 武穴市| 互助| 海丰县| 西青区| 汕头市| 太仆寺旗| 天台县| 尉氏县| 沅陵县| 香格里拉县| 和田县| 霍州市| 东源县| 理塘县| 文安县| 凯里市| 喀什市| 横山县|