主頁 > 知識庫 > Oracle 數(shù)據(jù)庫針對表主鍵列并發(fā)導(dǎo)致行級鎖簡單演示

Oracle 數(shù)據(jù)庫針對表主鍵列并發(fā)導(dǎo)致行級鎖簡單演示

熱門標(biāo)簽:阿爾巴尼亞地圖標(biāo)注app 人工智能地圖標(biāo)注自己能做嗎 外呼線路外顯本地號碼 開封智能外呼系統(tǒng)廠家 word地圖標(biāo)注方向 征服者火車站地圖標(biāo)注 美圖秀秀地圖標(biāo)注 征服眼公司地圖標(biāo)注 百度地圖標(biāo)注素材

本文內(nèi)容
•軟件環(huán)境
•簡單演示 Oracle 數(shù)據(jù)庫并發(fā)導(dǎo)致行級鎖
本文簡單演示針對表主鍵并發(fā)導(dǎo)致的行級鎖。并發(fā)是兩個以上的用戶對同樣的數(shù)據(jù)進(jìn)行修改(包括插入、刪除和修改)。鎖的產(chǎn)生是因為并發(fā)。沒有并發(fā),就沒有鎖。并發(fā)的產(chǎn)生是因為系統(tǒng)需要,系統(tǒng)需要是因為用戶需要。

軟件環(huán)境
--------------------------------------------------------------------------------
•Windows 2003 Server
•Oracle 11g Release 1 (11.1)
簡單演示 Oracle 數(shù)據(jù)庫并發(fā)導(dǎo)致行級鎖
首先,打開一個會話 session 1,執(zhí)行如下操作:

復(fù)制代碼 代碼如下:

SQL> select distinct sid from V$mystat;

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

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

接下來,打開另一個會話 session 2:
復(fù)制代碼 代碼如下:

SQL> select distinct sid from V$mystat;

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

此時,該會話被“卡”在這里不動。只是光標(biāo)一直在閃……因為,session 2 被 session 1 阻塞。
現(xiàn)在,查看鎖定視圖 V$LOCK。
復(fù)制代碼 代碼如下:

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

 
已選擇6行。
SQL>
說明:“TYPE”列表示鎖的類型;“LMODE”列表示鎖的模式;“ID1”和“ID2”列是鎖的相關(guān)信息?!癛EQUEST”列是正在什么鎖。

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

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

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

MACHINE
----------------------------------------------------------------
NUODE\LN
NUODE\LN
SQL>

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

您可能感興趣的文章:
  • 解決Android Studio 格式化快捷鍵和QQ 鎖鍵盤快捷鍵沖突問題
  • 詳解Java中synchronized關(guān)鍵字的死鎖和內(nèi)存占用問題
  • 深入淺出解析mssql在高頻,高并發(fā)訪問時鍵查找死鎖問題
  • Oracle外鍵不加索引引起死鎖示例
  • 使用鉤子如何鎖定鍵盤的方法分享
  • Linux中使用VS Code編譯調(diào)試C++項目詳解
  • 實戰(zhàn)開發(fā)為單片機(jī)的按鍵加一個鎖防止多次觸發(fā)的細(xì)節(jié)

標(biāo)簽:六安 葫蘆島 酒泉 淮南 孝感 海北 泰安 宜春

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Oracle 數(shù)據(jù)庫針對表主鍵列并發(fā)導(dǎo)致行級鎖簡單演示》,本文關(guān)鍵詞  Oracle,數(shù)據(jù)庫,針對,表主,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Oracle 數(shù)據(jù)庫針對表主鍵列并發(fā)導(dǎo)致行級鎖簡單演示》相關(guān)的同類信息!
  • 本頁收集關(guān)于Oracle 數(shù)據(jù)庫針對表主鍵列并發(fā)導(dǎo)致行級鎖簡單演示的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章