Oracle如何刪除被鎖定(locked)的session

前言

今天在run別人寫得PKG時,怎麼打都卡住,連要編譯都不行!!!
這情況可能是Transaction時,有人忘記rollback 或 commit,
導致我的PKG被lock住~~~

像是這樣,這畫面直接卡住~

😜😜😜 解決方法 找到誰lock住 請他離線~ 或是砍掉他XD


1. 查詢出要刪除的Lock Session ID

1
2
3
4
5
SELECT a.sid||','||a.serial#,a.machine
FROM v$session a,DBA_DML_LOCKS b
WHERE a.sid = b.session_id
GROUP BY a.sid||','||a.serial#,a.machine;

利用找到的相關 session 資訊

通知該 session 關係人離線
或直接 kill 這些 session (不要砍到自己的).
請他關閉連線~~~


2. 當得知哪支程式無法 compile 的解決辦法

利用下列語法查詢 lock 住該 object 的 session

1
2
--Name = 你的Object Name
SELECT * FROM DBA_DDL_LOCKS WHERE name = 'PKG_TRIAL';

這樣就知道129 跟 245 lock住了~
通知該 session 關係人離線


3. 如何刪除Session ID

1
2
3
4
5
6
7
8
9
10
11
--方法一 用第一個SQL查到的SID刪除
ALTER system kill session '129,57492';

--方法二 (一邊查一邊刪!)
SELECT 'alter system kill session '''||sid||','||serial#||''';'
FROM V$SESSION
WHERE SID IN (
SELECT distinct session_id FROM DBA_DDL_LOCKS
WHERE NAME='PKG_TRIAL'
)
AND user#<>0 AND USERNAME <> 'SYS'

這樣就可以順利刪除!!! 開心灑花 ~~~

參考資料:
1.http://orzcook.logdown.com/posts/65221
2.https://ittutorial.org/alter-system-kill-session-tips-in-oracle/
3.https://stackoverflow.com/questions/58731396/can-not-compile-a-stored-procedure-because-it-seems-to-be-locked


Oracle如何刪除被鎖定(locked)的session
http://example.com/2022/07/01/Oracle如何刪除被鎖定(locked)的session/
作者
Tayli Kuan
發布於
2022年7月1日
許可協議