【真实经验分享】Oradebug抓取阻塞源SQL语句

客户反馈最近系统经常锁表,想要找到导致锁表的语句,但是数据库中查不到阻塞会话的当前SQL,根本原因在于锁由事务(Transaction)持有而非SQL语句持有,加锁的SQL通常早已执行结束,而事务却因未提交或回滚而持续打开,导致会话处于空闲状态,因此动态性能视图中无法捕获到正在执行的SQL。最后通过oradebug工具来查找可能导致阻塞的SQL。

oradebug是Oracle数据库专供高级管理员使用的内部诊断"手术刀",核心价值在于通过生成各类转储(如系统状态和Hang分析)来精准定位数据库挂起、崩溃或慢SQL的根源,并能探查甚至修改内存结构;但它属于高风险且无官方文档详细承诺的调试工具,必须持有SYSDBA权限,强烈建议仅在Oracle技术支持指导下使用,否则操作不当极易导致实例宕机。

1、查找阻塞会话信息

sql 复制代码
SELECT 
    blocking_session AS blocker_sid,
    sid AS blocked_sid,
    sql_id,
    event AS waiting_event
FROM 
    v$session
WHERE 
    blocking_session IS NOT NULL;
    
    BLOCKER_SID BLOCKED_SID SQL_ID                                  WAITING_EVENT
----------- ----------- --------------------------------------- ------------------------------------------------------------
         77          69 bc8kzrzxdcvkh                           enq: TX - row lock contention

2、通过SID查询ORADEBUG需要的参数

-- 将 77 替换为阻塞源会话的 SID

sql 复制代码
SELECT 
    s.sid, 
    s.serial#, 
    s.status, 
    p.pid AS orapid,      -- 这是 ORADEBUG SETORAPID 需要的参数
    p.spid AS ospid
FROM v$session s, v$process p
WHERE s.paddr = p.addr
AND s.sid = 77;

       SID    SERIAL# STATUS            ORAPID OSPID
---------- ---------- ------------- ---------- -----------
        77         33 INACTIVE              53 48392

3、对阻塞源会话和被阻塞会话分别生成trc文件

sql 复制代码
ORADEBUG SETORAPID <SID>	-- SID替换为上一步查询出来的ORAPID

SYS@orcl1> ORADEBUG SETORAPID 53	-- 53
Oracle pid: 53, Unix process pid: 48392, image: oracle@rac1

SYS@orcl1> ORADEBUG DUMP SYSTEMSTATE 10
Statement processed.

SYS@orcl1> SYS@orcl1> ORADEBUG TRACEFILE_NAME;
/u01/app/oracle/diag/rdbms/orcl/orcl1/trace/orcl1_ora_48392.trc

在生成的trc文件中搜索被锁的表名,主要找DML语句。

相关推荐
泡海椒8 小时前
深度解析JQuick-SQL AST到逻辑计划转换机制|分布式SQL原理
数据库·分布式·sql
心静财富之门8 小时前
Python 数据共享四种方案完整实例(同进程 / JSON / Redis / HTTP)
数据库·python·oracle
略略略咯咯8 小时前
啊啊啊啊啊
java·服务器·数据库
奇牙coding8 小时前
GPT-5.5 报 401 invalid_api_key 怎么办?换密钥前按 4 层排查请求头、项目权限和端点
数据库·gpt·ios·ai
IvorySQL8 小时前
PostgreSQL 日报| WAL summarizer 断言失败(10 月 26 日)
数据库·postgresql·区块链
这个DBA有点耶9 小时前
2026年国产数据库“实际用户增长最快”核验指南:口径优先级、可查数据与选型动作清单
数据库·mysql·架构
程序员塔塔喵10 小时前
【MySQL篇|第三篇】脏读,幻读,不可重复读
数据库·mysql·不可重复读·幻读·脏读
数据库小学妹10 小时前
OLAP数据库怎么选、怎么优化?路线、提速与边界
运维·数据库·后端
织码weavecodes10 小时前
新闻资讯模块设计:内容发布、阅读计数与附件鉴权
java·服务器·数据库
小羊没烦恼!10 小时前
分布式事务 | 使用DTM 的Saga 模式
java·linux·运维·数据库·wpf