Oracle 數(shù)據(jù)庫針對(duì)表主鍵列并發(fā)導(dǎo)致行級(jí)鎖簡單演示
本文內(nèi)容
•軟件環(huán)境
•簡單演示 Oracle 數(shù)據(jù)庫并發(fā)導(dǎo)致行級(jí)鎖
本文簡單演示針對(duì)表主鍵并發(fā)導(dǎo)致的行級(jí)鎖。并發(fā)是兩個(gè)以上的用戶對(duì)同樣的數(shù)據(jù)進(jìn)行修改(包括插入、刪除和修改)。鎖的產(chǎn)生是因?yàn)椴l(fā)。沒有并發(fā),就沒有鎖。并發(fā)的產(chǎn)生是因?yàn)橄到y(tǒng)需要,系統(tǒng)需要是因?yàn)橛脩粜枰?
軟件環(huán)境
--------------------------------------------------------------------------------
•Windows 2003 Server
•Oracle 11g Release 1 (11.1)
簡單演示 Oracle 數(shù)據(jù)庫并發(fā)導(dǎo)致行級(jí)鎖
首先,打開一個(gè)會(huì)話 session 1,執(zhí)行如下操作:
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>
先查看本次會(huì)話的 SID,然后創(chuàng)建一個(gè)表 t,只有一個(gè)名為 x 的字段,且該字段為主鍵,插入一條數(shù)據(jù),并更新該數(shù)據(jù)。
接下來,打開另一個(gè)會(huì)話 session 2:
SQL> select distinct sid from V$mystat;
SID
----------
137
SQL> update t set x=10 where x=1;
此時(shí),該會(huì)話被“卡”在這里不動(dòng)。只是光標(biāo)一直在閃……因?yàn)椋瑂ession 2 被 session 1 阻塞。
現(xiàn)在,查看鎖定視圖 V$LOCK。
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 是第一個(gè)會(huì)話,SID=137 是第二個(gè)會(huì)話。第三行,第一個(gè)會(huì)話 BLOCK=1 表示這個(gè)會(huì)話正在阻塞其他會(huì)話,LMODE=6 表示鎖的模式,即行級(jí)排他鎖。第六行,第二個(gè)會(huì)話 REQUEST=6 表示當(dāng)前會(huì)話正在等待一個(gè) LMODE=6 的鎖。注意,第三行和第六行的 ID1 和 ID2 列完全相同。因?yàn)樗鼈冎赶蚪y(tǒng)一資源,只不過一個(gè)是資源的擁有者(SID=118),一個(gè)是資源的等待者(SID=137)。
通過這個(gè)視圖,很容易發(fā)現(xiàn)所在——故障定位(trouble shooting)。會(huì)話 2 之所以被“卡”住,是因?yàn)闀?huì)話 1 還沒提交,而在這張表上,又恰好有要求列值唯一性約束。
通過 SID 號(hào),查看視圖 V$SESSION 就可以確定用戶信息。
SQL> select machine from v$session where sid in (118,137);
MACHINE
----------------------------------------------------------------
NUODE\LN
NUODE\LN
SQL>
因?yàn)?,兩個(gè)會(huì)話是同一臺(tái)機(jī)器,所以名字一樣。
相關(guān)文章
Oracle顯示游標(biāo)的使用及游標(biāo)for循環(huán)
本篇文章給大家介紹oracle顯示游標(biāo)的使用及游標(biāo)for循環(huán),當(dāng)查詢返回單行記錄時(shí)使用隱式游標(biāo),查詢返回多行記錄并逐行進(jìn)行處理時(shí)使用顯式游標(biāo),對(duì)本文感興趣的朋友一起學(xué)習(xí)吧2015-11-11oracle數(shù)據(jù)遷移到db2數(shù)據(jù)庫的實(shí)現(xiàn)方法(分享)
下面小編就為大家?guī)硪黄猳racle數(shù)據(jù)遷移到db2數(shù)據(jù)庫的實(shí)現(xiàn)方法(分享)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-04-04Oracle如何查看impdp正在執(zhí)行的內(nèi)容
這篇文章主要給大家介紹了關(guān)于Oracle如何查看impdp正在執(zhí)行的內(nèi)容的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Oracle具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06Oracle中PL/SQL復(fù)合數(shù)據(jù)類型
這篇文章介紹了Oracle中PL/SQL的復(fù)合數(shù)據(jù)類型,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05Oracle?存儲(chǔ)過程詳細(xì)介紹使用實(shí)踐
這篇文章主要介紹了Oracle存儲(chǔ)過程詳細(xì)介紹及如何使用,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-06-06有關(guān)Oracle數(shù)據(jù)庫的備份情況
有關(guān)Oracle數(shù)據(jù)庫的備份情況...2007-03-03oracle11g管理員密碼忘記怎么辦 sqlplus解決忘記密碼問題
oracle11g管理員密碼忘記了怎么辦?這篇文章主要介紹了oracle 11g管理員密碼忘記問題的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06