oracle的存储过程被锁,杀掉对应的进程

发布时间:2026/6/27 23:29:08

oracle的存储过程被锁,杀掉对应的进程 核心原因DDL锁冲突当你要编译ALTER一个存储过程时Oracle需要给它加上一个排他DDL锁Exclusive DDL Lock-2-9。如果这时有其他会话正在执行或修改同一个存储过程或者是这个存储过程正在被调试Oracle就会因为无法获得这个排他锁而导致编译操作被挂起或超时-2-10。️ 解决步骤定位并杀掉阻塞会话以下是标准的排查与解决流程第一步查找锁住的对象首先查询V$DB_OBJECT_CACHE视图确认你的存储过程是否确实被锁以及锁的数量-2-3-4。把YOUR_PROC_NAME换成你的存储过程名注意用大写。sql复制下载SELECT * FROM V$DB_OBJECT_CACHE WHERE name YOUR_PROC_NAME AND LOCKS ! 0;如果查询有结果且LOCKS大于0就说明确实被锁了。第二步找出阻塞会话的SID通过V$ACCESS视图找出是哪个会话SID锁住了这个对象-2-3-4。sql复制下载SELECT /* rule */ SID FROM V$ACCESS WHERE object YOUR_PROC_NAME;记下这里查出来的SID。第三步获取会话的SERIAL#根据上一步得到的SID查询V$SESSION视图获取对应的SERIAL#杀掉会话时这两个信息都需要-2-3-4。sql复制下载SELECT SID, SERIAL#, PADDR FROM V$SESSION WHERE SID 刚才查到的SID;第四步杀掉阻塞会话拥有SID和SERIAL#后就可以执行命令强制结束这个会话释放它占用的锁-2-3-4。sql复制下载ALTER SYSTEM KILL SESSION sid值, serial#值 IMMEDIATE;成功执行这个命令后再尝试编译你的存储过程应该就可以了SELECT * FROM V$DB_OBJECT_CACHEWHERE name ZZTEST AND LOCKS ! 0;SELECT /* rule */ SID FROM V$ACCESSWHERE object ZZTEST;SELECT SID, SERIAL#, PADDR FROM V$SESSIONWHERE SID 2269;ALTER SYSTEM KILL SESSION 2269, 15933 IMMEDIATE;

相关新闻