Oracle鎖表問題的解決方法
一、問題復現(xiàn)
1、session1修改aabb表的B字段為迪迦奧特曼,但是不提交該事務

2、session2也修改這行的這個字段

發(fā)現(xiàn)該字段的執(zhí)行時間一直停滯,無法執(zhí)行。兩個session會相互爭搶 ,一直無法執(zhí)行,進而導致系統(tǒng)卡頓崩潰

二、解決方法
1、查詢競爭資源的表或語句
運行一下語句查詢鎖表的語句。
-- 查詢未提交事務的session信息,注意執(zhí)行以下SQL,用戶需要有DBA權(quán)限才行
SELECT
L.SESSION_ID,
S.SERIAL#,
L.LOCKED_MODE AS 鎖模式,
L.ORACLE_USERNAME AS 所有者,
L.OS_USER_NAME AS 登錄系統(tǒng)用戶名,
S.MACHINE AS 系統(tǒng)名,
S.TERMINAL AS 終端用戶名,
O.OBJECT_NAME AS 被鎖表對象名,
S.LOGON_TIME AS 登錄數(shù)據(jù)庫時間
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查詢結(jié)果如下

2、強制釋放資源
運行一下語句可以殺死對應的鎖表進程
通用語句:強制 結(jié)束/kill 鎖表會話語法 ALTER SYSTEM KILL SESSION 'SESSION_ID, SERIAL#'; 示例語句:強制殺死session1,讓session2可以修改a = '3228730285638861'的那條記錄 ALTER SYSTEM KILL SESSION '4984, 28973';
殺死session1的進程后,session2順利執(zhí)行。


以上就是Oracle鎖表問題的解決方法的詳細內(nèi)容,更多關(guān)于Oracle鎖表的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
oracle數(shù)據(jù)庫查詢表被鎖多種方式實現(xiàn)
本文介紹了在Oracle數(shù)據(jù)庫中如何通過V$LOCKED_OBJECT、DBA_OBJECTS和DBA_LOCKS、VSESSION和VLOCK、DBA_BLOCKERS和DBA_WAITERS、V$LOCK等視圖查詢表是否被鎖定的方法,這些視圖提供了詳細的鎖信息,包括鎖的類型、模式以及持有鎖的會話信息,需要的朋友可以參考下2024-10-10
查看oracle數(shù)據(jù)庫的編碼及修改編碼格式的方法
本節(jié)主要介紹了如何查看oracle數(shù)據(jù)庫的編碼及修改編碼格式,需要的朋友可以參考下2014-07-07
Oracle如何查看impdp正在執(zhí)行的內(nèi)容
這篇文章主要給大家介紹了關(guān)于Oracle如何查看impdp正在執(zhí)行的內(nèi)容的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Oracle具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2019-06-06
Oracle 11g數(shù)據(jù)庫安裝與卸載的方法圖解
如果小編使用的是win7系統(tǒng),最好采用11g,否則很可能10g出現(xiàn)不兼容安裝不成功的情況。下面給大家分享Oracle 11g數(shù)據(jù)庫安裝與卸載的方法圖解,非常不錯,感興趣的朋友一起看看吧2016-09-09
oracle數(shù)據(jù)庫如何給用戶授權(quán)查詢權(quán)限
這篇文章主要給大家介紹了關(guān)于oracle數(shù)據(jù)庫如何給用戶授權(quán)查詢權(quán)限的相關(guān)資料,授予權(quán)限是數(shù)據(jù)庫管理中的重要任務,它可以確保用戶有權(quán)訪問所需的數(shù)據(jù)庫對象,并執(zhí)行必要的操作,需要的朋友可以參考下2024-01-01

