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

Oracle 鎖表查詢與解鎖實戰指令大全

     編輯:Oracle 資料庫基礎

前言

Oracle 資料庫運行久了難免遇到鎖表問題,導致業務阻塞。本文整理四種常用查詢鎖定物件的 SQL,以及解鎖的標準指令,供 DBA 現場快速排查使用。

一、查詢被鎖定物件與 Session 資訊

SELECT l.session_id sid,
       s.serial#,
       l.locked_mode,
       l.oracle_username,
       l.os_user_name,
       s.machine,
       s.terminal,
       o.object_name,
       s.logon_time
  FROM v$locked_object l,
       all_objects o,
       v$session s
 WHERE l.object_id = o.object_id
   AND l.session_id = s.sid
 ORDER BY sid, s.serial#;

說明:直接關聯 V$LOCKED_OBJECT、ALL_OBJECTS、V$SESSION,可快速定位鎖定物件名、鎖模式、客戶端機器與登入時間。

二、查詢所有 DML 產生的鎖(含表鎖與列鎖)

SELECT /*+ RULE */
       s.username,
       DECODE(l.type, 'TM', 'TABLE LOCK', 'TX', 'ROW LOCK', NULL) lock_level,
       o.owner,
       o.object_name,
       o.object_type,
       s.sid,
       s.serial#,
       s.terminal,
       s.machine,
       s.program,
       s.osuser
  FROM v$session s,
       v$lock l,
       dba_objects o
 WHERE l.sid = s.sid
   AND l.id1 = o.object_id(+)
   AND s.username IS NOT NULL;

重點:任何 DML 實際會產生兩把鎖——TM(表鎖)與 TX(列鎖),此查詢可一次列出兩者。

三、依 Process 關聯查詢活躍 Session 詳細資訊

SELECT a.owner,
       a.object_name,
       b.xidusn,
       b.xidslot,
       b.xidsqn,
       b.session_id,
       b.oracle_username,
       b.os_user_name,
       b.process,
       b.locked_mode,
       c.machine,
       c.status,
       c.server,
       c.sid,
       c.serial#,
       c.program
  FROM all_objects a,
       v$locked_object b,
       sys.gv_$session c
 WHERE a.object_id = b.object_id
   AND b.process = c.process
   AND c.status = 'ACTIVE'
 ORDER BY 1, 2;

適用場景:需依作業系統 Process ID 追蹤具體 Session。

四、解鎖:殺掉造成阻塞的 Session

ALTER SYSTEM KILL SESSION 'sid,serial#';

⚠️ 注意:

  • 執行後該 Session 狀態變為 KILLED,實際釋放資源需等待 PMON 背景程序清理。
  • 若為 RAC 環境,建議加上 @inst_id 指定例項:ALTER SYSTEM KILL SESSION 'sid,serial#,@1';
  • 若 Session 長時間處於 KILLED 狀態,可嘗試 ALTER SYSTEM DISCONNECT SESSION 'sid,serial#' POST_TRANSACTION; 或在 OS 層面 kill -9 spid(謹慎操作)。

結語

鎖表排查核心在於「快速定位 → 確認業務影響 → 決定是否強制釋放」。建議將上述 SQL 存為腳本,納入日常巡檢工具箱。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved