Oracle存储过程INVALID,重新编译很慢解决方案
1、查询对象表 db_object_cache ,name为对象名(表名/方法名/过程名)
--检查对象是否被锁
select * from v$db_object_cache where name=upper('proc_wip_al_tran_inf_half_back') and locks!=0;
发现有5个lock
2、查询被锁对象的SID
--得到被锁对象的SID等信息
select * from v$access where object=upper('proc_wip_al_tran_inf_half_back');
--这一步查询 v$access 可能会卡住 解决方案:
--先设置数据库session _optimizer_cartesian_enabled 为 false,解决后再开启
alter session set "_optimizer_cartesian_enabled"=false;
此处参考:查询视图v$access很慢
3、通过 SID 查到 SERIAL# 等详细信息
--通过SID查询到 SERIAL# ,此处用子查询会很慢,直接写查询结果 比较快
select sid,serial#,paddr from v$session where sid in(
--select sid from v$access where owner='ALMES' and object=upper('proc_wip_al_tran_inf_half_back')
'404',
'3820',
'3830',
'2816'
);
4、结束致使对象被锁的会话
--alter system kill session 'SID,SERIAL#' immediate; --杀掉会话
alter system kill session '404, 2050' immediate;
alter system kill session '2816,29326' immediate;
alter system kill session '3820,16795' immediate;
alter system kill session '3830,24513' immediate;
参考文档:
本文作者:Journey&Flower
本文链接:https://www.cnblogs.com/JourneyOfFlower/p/14854005.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步