You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ORA-00031错误:标记为终止的Oracle会话仍运行求助

解决ORA-00031: 会话已标记为终止且KILLED状态会话无法清除的问题

当执行alter system kill session 'SID, SERIAL' immediate;后,会话状态显示为KILLED但仍占用资源,同时触发ORA-00031错误,且该会话持有Body Definition Lock时,说明Oracle内部无法直接中断当前会话的操作,需要结合操作系统级的进程终止来彻底清除。

步骤1:获取会话对应的操作系统进程ID

执行以下SQL查询,拿到会话关联的操作系统进程ID(os_process_id):

SELECT 
    s.sid,
    s.serial#,
    s.status,
    p.spid AS os_process_id,
    l.lock_type,
    l.lock_id1
FROM 
    v$session s
JOIN 
    v$process p ON s.paddr = p.addr
JOIN 
    dba_lock_internal l ON s.sid = l.session_id
WHERE 
    UPPER(l.lock_id1) LIKE '%PACKAGE_NAME%'
    AND l.lock_type = 'Body Definition Lock';

步骤2:操作系统级强制终止进程

根据你的操作系统类型执行对应命令:

  • Linux/Unix系统:以Oracle用户或root身份执行
    kill -9 <os_process_id>
    
  • Windows系统:以管理员身份打开命令提示符执行
    orakill <ORACLE_SID> <os_process_id>
    
    注:<ORACLE_SID>替换为你的数据库实例名称。

步骤3:验证会话清除结果

重新执行步骤1的查询,确认目标会话已从结果中消失,对应的Body Definition Lock也已释放。

补充说明

alter system kill session仅在Oracle内部标记会话为终止状态,当会话正在执行无法被Oracle中断的操作(比如持有Body Definition Lock的PL/SQL包编译操作)时,Oracle无法立即回收会话资源,必须通过操作系统级强制杀死进程才能彻底清除。

内容的提问来源于stack exchange,提问作者Nassim 94

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 03:55:03