首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle 內建腳本一鍵查阻塞:建立 DBA_WAITERS/DBA_BLOCKERS 視圖實戰 Oracle 內建腳本一鍵查阻塞:建立 DBA_WAITERS/DBA_BLOCKERS 視圖實戰

     編輯:Oracle 資料庫相關知識

診斷鎖阻塞需關聯 V$LOCK、V$SESSION、V$PROCESS 等多張視圖,手工查詢繁瑣。Oracle 提供內建腳本 ?/rdbms/admin/catblock.sql,一次建立 DBA_WAITERS 與 DBA_BLOCKERS 兩個視圖,極大簡化排查。

部署步驟

SQLPLUS / AS SYSDBA
SQL> @?/rdbms/admin/catblock.sql
-- 輸出:VIEW CREATED, SYNONYM CREATED ...

實戰驗證

場景 1:DML 鎖阻塞 (SELECT FOR UPDATE)

Session 1: SELECT * FROM test FOR UPDATE;
Session 2: SELECT * FROM test FOR UPDATE;  -- 阻塞
Session 3 (SYS): SELECT * FROM DBA_WAITERS;

輸出:

WAITING_SESSION  HOLDING_SESSION  LOCK_TYPE   MODE_HELD  MODE_REQUESTED  LOCK_ID1  LOCK_ID2
---------------  ---------------  ----------  ---------  --------------  --------  --------
142              150              Transaction Exclusive  Exclusive       131099    2550

DBA_BLOCKERS 直接顯示持有者 150。

場景 2:DDL 鎖阻塞 (建立索引 vs SELECT FOR UPDATE)

Session 1: SELECT * FROM obj$ FOR UPDATE;  -- 鎖定資料字典
Session 2: CREATE INDEX ind_t_id ON test(object_id);  -- 阻塞
Session 3: SELECT * FROM DBA_WAITERS;

輸出顯示持有者 145,等待者 150,鎖類型同為 Transaction。

優勢總結

  • 零自訂 SQL,官方維護,升級相容。
  • 直接給出 等待 Session、持有 Session、鎖類型、模式,無需自行 JOIN 解碼 V$LOCK.TYPE/LMODE。
  • 適用所有阻塞類型 (DML、DDL、Library Cache 等)。

注意:catblock.sql 需在 SYS 模式下執行,僅需執行一次永久生效。

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