首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 9i 鎖定會話查找與終結實戰腳本

     編輯:Oracle 資料庫基礎

當 Oracle 因內部鎖機制導致資源被鎖定,需快速定位並終結阻塞會話。本文提供完整 SQL 腳本:列出所有會話 → 找出被鎖會話 → 產生 KILL 指令。

1. 列出所有連線會話

-- remsession.sql
SET ECHO OFF TERMOUT ON LINESIZE 80 PAGESIZE 60 NEWPAGE 0

SELECT RPAD(c.name||':',11)||RPAD(' current logons='||TO_NUMBER(b.sessions_current),20)||
       'cumulative logons='||RPAD(SUBSTR(a.value,1,10),10)||'highwater mark='||b.sessions_highwater Information
FROM v$sysstat a, v$license b, v$database c
WHERE a.name = 'logons cumulative';

TTITLE "Database|UNIX/Oracle Sessions"
SET HEADING OFF
SELECT 'Sessions on database '||SUBSTR(name,1,8) FROM v$database;
SET HEADING ON

SELECT SUBSTR(a.spid,1,9) pid,
       SUBSTR(b.sid,1,5) sid,
       SUBSTR(b.serial#,1,5) ser#,
       SUBSTR(b.machine,1,6) box,
       SUBSTR(b.username,1,10) username,
       SUBSTR(b.osuser,1,8) os_user,
       SUBSTR(b.program,1,30) program
FROM v$session b, v$process a
WHERE b.paddr = a.addr AND type='USER'
ORDER BY spid;

TTITLE OFF
SET HEADING OFF
SELECT 'To kill, enter SQLPLUS> ALTER SYSTEM KILL SESSION','''||'SID, SER#'||''''||';' FROM dual;

2. 偵測被鎖定的會話

SELECT sess.sid, sess.serial#,
       lo.oracle_username, lo.os_user_name,
       ao.object_name, lo.locked_mode
FROM v$locked_object lo, dba_objects ao, v$session sess
WHERE ao.object_id = lo.object_id
  AND lo.session_id = sess.sid;

輸出範例:

SIDSER#Oracle UserOS UserObjectLock Mode
2156APPSapplmgrFND_CONCURRENT_REQUESTS2
77535APPSapplmgrMTL_SYSTEM_ITEMS2
126161APPSoracleSO_LINES_ALL2

3. 自動產生 KILL SESSION 指令

SPOOL run_nuke.sql
SELECT 'ALTER SYSTEM KILL SESSION '''||sess.sid||','||sess.serial#||''';'
FROM v$locked_object lo, dba_objects ao, v$session sess
WHERE ao.object_id = lo.object_id
  AND lo.session_id = sess.sid;
SPOOL OFF

執行產生的 run_nuke.sql 即可逐一終結阻塞會話,釋放鎖定資源。

補充說明

  • Lock Mode 2 = Row Share (RS),3 = Row Exclusive (RX),6 = Exclusive (X)
  • 若鎖定持續過久,易導致資料庫掛起或死鎖
  • 建議搭配應用層超時機制,避免長時間阻塞
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved