人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動(dòng)態(tài)

Oracle鎖表解決方法的詳細(xì)記錄

發(fā)布日期:2022-07-15 19:32 | 文章來(lái)源:源碼中國(guó)

鎖表或鎖超時(shí)相信大家都不陌生,經(jīng)常發(fā)生在DML語(yǔ)句中,產(chǎn)生的原因就是數(shù)據(jù)庫(kù)的獨(dú)占式封鎖機(jī)制,當(dāng)執(zhí)行DML語(yǔ)句時(shí)對(duì)表或行數(shù)據(jù)進(jìn)行鎖住,直到事務(wù)提交或回滾或者強(qiáng)制結(jié)束當(dāng)前會(huì)話(huà)。

對(duì)于我們的應(yīng)用系統(tǒng)而言鎖表大概率會(huì)發(fā)生在SQL執(zhí)行慢并且沒(méi)有超時(shí)的地方(一條SQL由于某種原因(Spoon工具做數(shù)據(jù)抽取與推送)一直執(zhí)行不成功并且一直不釋放資源)因此寫(xiě)出高效率SQL也尤為重要!還有另外情況也會(huì)發(fā)生鎖表,就是高并發(fā)場(chǎng)景,高并發(fā)會(huì)帶來(lái)的問(wèn)題就是Spring事務(wù)會(huì)造成數(shù)據(jù)庫(kù)事務(wù)未提交產(chǎn)生死鎖(當(dāng)前事務(wù)等待其他事務(wù)釋放鎖資源)!從而拋出異常java.sql.SQLException: Lock wait timeout exceeded;。

那么如何解決鎖表或鎖超時(shí)呢?臨時(shí)性解決方案就是找出鎖資源競(jìng)爭(zhēng)的表或語(yǔ)句,直接結(jié)束當(dāng)前會(huì)話(huà)或sesstion,強(qiáng)制釋放鎖資源。例如

解決方法如下:

1、session1修改某條數(shù)據(jù)但是不提交事務(wù),session2查詢(xún)未提交事務(wù)的那條記錄

2、session2嘗試修改

我們可以看到修改未提交事務(wù)的記錄會(huì)處于一直等待狀態(tài),直到對(duì)方釋放鎖資源或強(qiáng)制關(guān)閉session1。這里也說(shuō)明了Oracle做到了行級(jí)鎖!

這里只是簡(jiǎn)單的模擬了出現(xiàn)鎖表情況,可以一眼看出就是session1導(dǎo)致的鎖表。實(shí)際開(kāi)發(fā)中遇到這種情況一般都是使用SQL直接查出鎖資源競(jìng)爭(zhēng)的表或語(yǔ)句然后進(jìn)行資源的強(qiáng)制釋放?。?/p>

3、session3查詢(xún)競(jìng)爭(zhēng)資源的表或語(yǔ)句,強(qiáng)制釋放資源

-- 查詢(xún)未提交事務(wù)的session信息,注意執(zhí)行以下SQL,用戶(hù)需要有DBA權(quán)限才行
SELECT
    L.SESSION_ID,
    S.SERIAL#,
    L.LOCKED_MODE AS 鎖模式,
    L.ORACLE_USERNAME AS 所有者,
    L.OS_USER_NAME AS 登錄系統(tǒng)用戶(hù)名,
    S.MACHINE AS 系統(tǒng)名,
    S.TERMINAL AS 終端用戶(hù)名,
    O.OBJECT_NAME AS 被鎖表對(duì)象名,
    S.LOGON_TIME AS 登錄數(shù)據(jù)庫(kù)時(shí)間
FROM V$LOCKED_OBJECT L
    INNER JOIN ALL_OBJECTS O ON O.OBJECT_ID = L.OBJECT_ID
    INNER JOIN V$SESSION S ON S.SID = L.SESSION_ID
WHERE 1 = 1

查詢(xún)結(jié)果如下

對(duì)我們強(qiáng)制釋放資源有用的只有前面兩個(gè)字段,例如

-- 強(qiáng)制 結(jié)束/kill 鎖表會(huì)話(huà)語(yǔ)法
ALTER SYSTEM KILL SESSION 'SESSION_ID, SERIAL#';
-- 強(qiáng)制殺死session1,讓session2可以修改id=5的那條記錄
ALTER SYSTEM KILL SESSION '34, 111';

強(qiáng)制殺死session1后,注意觀(guān)察session2的執(zhí)行情況!我們會(huì)發(fā)現(xiàn)session2的等待會(huì)立即終止并執(zhí)行!相信小伙伴們都有一個(gè)疑惑,session_id有29和34,如何確定他們屬于session1還是session2,保證殺死的是session1讓session2成功執(zhí)行DML語(yǔ)句?

其實(shí)也很簡(jiǎn)單,這里的判斷方式就是session1執(zhí)行更新但不提交事務(wù),可先用以上SQL查詢(xún)未提交事務(wù)的session信息,此時(shí)查到的就是session1的信息。

總結(jié)

到此這篇關(guān)于Oracle鎖表解決的文章就介紹到這了,更多相關(guān)Oracle鎖表解決內(nèi)容請(qǐng)搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!

香港服務(wù)器租用

版權(quán)聲明:本站文章來(lái)源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來(lái)源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來(lái)源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來(lái),僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實(shí)時(shí)開(kāi)通

自選配置、實(shí)時(shí)開(kāi)通

免備案

全球線(xiàn)路精選!

全天候客戶(hù)服務(wù)

7x24全年不間斷在線(xiàn)

專(zhuān)屬顧問(wèn)服務(wù)

1對(duì)1客戶(hù)咨詢(xún)顧問(wèn)

在線(xiàn)
客服

在線(xiàn)客服:7*24小時(shí)在線(xiàn)

客服
熱線(xiàn)

400-630-3752
7*24小時(shí)客服服務(wù)熱線(xiàn)

關(guān)注
微信

關(guān)注官方微信
頂部