ORACLE数据库巡检SQL脚本--5、查看是否有僵死进程

用于识别无对应会话的“孤儿进程”(僵死进程)

一、SQL脚本

-- 验证所有进程是否有对应会话
SELECT p.ADDR, -- 进程地址标识(关联会话的核心字段)
       p.SPID, -- 操作系统进程ID(Windows=PID,Linux=进程号)
       p.PNAME, -- 进程名称(区分后台/前台进程)
       s.SID, -- 对应会话ID(NULL=无会话=僵死进程)
       s.USERNAME AS 会话用户 -- 会话所属数据库用户(进一步验证业务进程)
  FROM V$PROCESS p
-- 左连接:保留所有进程,即使无对应会话(核心逻辑)
  LEFT JOIN V$SESSION s ON p.ADDR = s.PADDR
 WHERE p.SPID IS NOT NULL; -- 过滤伪进程(无实际OS进程的占位进程)

二、脚本说明

字段核心作用判僵死的关键值
p.ADDR进程唯一标识,用于确认“进程-会话”绑定关系无特殊值,仅用于关联验证
p.SPID操作系统层面的进程ID,用于终止僵死进程僵死进程的SPID为有效数字(如Windows的8168、Linux的12345)
p.PNAME区分进程类型(后台/前台)后台进程(如D000、S000、PMON)即使无会话也不是僵死进程;前台进程(PNAME为空/空白)无会话则是僵死进程
s.SID会话ID,判僵死的核心指标NULL = 该进程无对应会话 → 疑似僵死进程
s.USERNAME会话所属用户僵死进程的该字段为NULL;正常业务进程会显示具体用户(如SCOTT、APP_USER)

三、注意事项:

  • SID 列均为非 NULL:所有进程都有对应会话,无僵死进程;
  • 若某行 SID 为 NULL 且 PNAME 非后台进程(如无 PNAME / 为空白):该进程为僵死进程。

四、僵死进程的处理建议

  1. 验证进程状态
    通过SPID(操作系统进程ID)在操作系统层面确认是否为僵死进程:

    • Linux:执行ps -ef | grep [SPID],查看进程是否无业务交互;
    • Windows:执行tasklist | findstr [SPID],确认进程无有效活动。
  2. 终止僵死进程
    在操作系统层面终止该进程(需谨慎,仅处理无业务的僵死进程):

    • Linux:kill -9 [SPID]
    • Windows:taskkill /F /PID [SPID]
  3. 预防措施

    • 优化应用连接池配置,避免频繁创建/关闭连接;

    • 定期执行该巡检脚本,低峰期清理僵死进程,减少CPU、内存资源占用。
      你希望我详细解读这条用于验证Oracle进程是否为僵死进程的SQL语句,包括其设计逻辑、各子句作用、字段含义及结果判断规则。下面我会从核心功能到细节逐一拆解:

五、补充说明

  1. 后台进程例外:Oracle核心后台进程(如PMON、SMON、DBW0、D000、S000)即使SID为NULL,也不是僵死进程——这些进程是数据库运行的基础,终止会导致数据库异常;
  2. 适用环境:该SQL适配所有Oracle版本(11g/12c/19c),Windows/Linux均适用;
  3. 权限要求:需DBA权限才能查询V$PROCESSV$SESSION,普通用户可能无权限。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值