今天碰到一个问题很棘手,我更改了存储过程,只是添加个注释,但是存储过程编译就一直在执行,我也不知道具体看那里出错了,看V$SESSION,V$SESSION_WAIT,V$LOCKED_OBJECT好像都不行,那位高手给个解决的方法!
解决方案 »
- Oracle怎样利用现有的表创建一张新表,只要表结构相同
- DENSE_RANK分析函数的使用
- 高级复制问题 ORA-04067: 未执行, stored procedure
- oracle10g方案比较
- 求救SQL语句,如何查找在原来字段基础上再加三位的数据,急救,谢谢高手,分全给
- 帮帮忙啊!!!存储过程的问题
- 想问几条语句的功能,见帖子程序段
- 关于oracle的一个基础问题
- 请教高手!在运用SQLLoad装载dat文件时,控制文件“When”所遇到的问题!
- Oracle,一个触发器将多行记录写入临时表,另外一个表级触发器读取新最数据
- 求教怎么查询表最后几条数据???
- 有哪些好的ORACLE论坛,人气旺一点的?
1) plsql developer的BUG, 重启再编译2)有别的Session在执行这个SP。可用dba_ddl_locks查看
2 我想问的是如果dba_ddl_locks 里面存在锁,如何解锁?
3 难道通过dba_ddl_locks 的SID 关联V$SESSION SID,再得到SID,SERIAL#,再通过alter system kill session 'sid,serial#'杀掉?
4 能否告诉我定位到具体的那个存储过程,具体的那张表不?
-----------------------------------------------------------------------------------
解决方式就是: 3 难道通过dba_ddl_locks 的SID 关联V$SESSION SID,再得到SID,SERIAL#,再通过alter system kill session 'sid,serial#'杀掉?
通过dba_ddl_locks 的确可以查询出该对象被锁住(单机版可以),不过在运行时系统我估计你几乎查询不出来数据,每一个瞬间都有N多对象可能被锁住,所以查询的时候基本都定在那里动都不动,掉不出来数据,一般需要将中端关闭掉才行。如果的确要弄,这种需要排查很多问题,一般可以先把应用程序(可能有多个终端)和JOB停掉,再查询SESSION,将当前用户的干掉(写个循环语句),不要把当前SESSION干掉了,根据登录时间和登录用户过滤。这个时候修改问题不大,不过这个问题是解决掉了,那么要么是程序有点点不对,要么程序员操作习惯不好或者结构设计中将太多分离的东西合并在一起,可以排查一下。
where object ='过程名或过程所在的包名';2、查调用过程的系统进程ID:
--查v$session视图
select sid,serial#,paddr from v$session where sid='第一步中查到的sid';
--查v$process视图
select spid from v$process where addr='刚才查到的paddr';3.再到操作系统中将对应的SPID进程KILL掉就可以了。