Oracle鎖表問題的解決方法
更新時間:2024年04月25日 11:04:33 作者:小海海不怕困難
在實際工作中,并發(fā)量比較大的項目,經常會出現(xiàn)鎖表的問題,下面我將復現(xiàn)這個問題,并給出解決方法,文中通過代碼示例和圖文介紹的非常詳細,需要的朋友可以參考下
一、問題復現(xiàn)
1、session1修改aabb表的B字段為迪迦奧特曼,但是不提交該事務
2、session2也修改這行的這個字段
發(fā)現(xiàn)該字段的執(zhí)行時間一直停滯,無法執(zhí)行。兩個session會相互爭搶 ,一直無法執(zhí)行,進而導致系統(tǒng)卡頓崩潰
二、解決方法
1、查詢競爭資源的表或語句
運行一下語句查詢鎖表的語句。
-- 查詢未提交事務的session信息,注意執(zhí)行以下SQL,用戶需要有DBA權限才行 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 登錄數據庫時間 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
查詢結果如下
2、強制釋放資源
運行一下語句可以殺死對應的鎖表進程
通用語句:強制 結束/kill 鎖表會話語法 ALTER SYSTEM KILL SESSION 'SESSION_ID, SERIAL#'; 示例語句:強制殺死session1,讓session2可以修改a = '3228730285638861'的那條記錄 ALTER SYSTEM KILL SESSION '4984, 28973';
殺死session1的進程后,session2順利執(zhí)行。
以上就是Oracle鎖表問題的解決方法的詳細內容,更多關于Oracle鎖表的資料請關注腳本之家其它相關文章!