请教大家一个问题,我的一个包编译、编辑、删除、调试和访问都报ora-04021:timeout occurred while waiting to lock object……
然后用
select a.*,b.*
FROM V$ACCESS A, V$SESSION B
WHERE A.SID = B.SID
and a.OBJECT = 'DAMS_WEBCONTEN_MANAGE'
and a.TYPE = 'PACKAGE';
查处锁定的id,
然后想杀掉锁,运行
alter system kill session……
这时就报ORA-00031: session ed for kill
好像没有杀掉,只是标记了,几天都是这样,包一直不能被编译、编辑、删除、调试和访问。
不知道怎么才能编辑这个包了?
然后用
select a.*,b.*
FROM V$ACCESS A, V$SESSION B
WHERE A.SID = B.SID
and a.OBJECT = 'DAMS_WEBCONTEN_MANAGE'
and a.TYPE = 'PACKAGE';
查处锁定的id,
然后想杀掉锁,运行
alter system kill session……
这时就报ORA-00031: session ed for kill
好像没有杀掉,只是标记了,几天都是这样,包一直不能被编译、编辑、删除、调试和访问。
不知道怎么才能编辑这个包了?
不想重启的话就用oracle的工具orakill来结束这个进程。
在命令行窗口中输入orakill可以看到具体步骤
此时v$process和v$session失去关联,进程就此中断.
然后Oracle就等待PMON去清除这些Session.所以通常等待一个被标记为Killed的Session退出需要花费很长的时间.所以通过select p.addr from v$process p where pid <> 1 minus select s.paddr from v$session s;
获得了kill的进程地址,然后在v$process中找到对应spid,然后可以使用Kill或者orakill在系统级来杀掉这些进程.
2.SELECT SID,SERIAL#,PADDR FROM V$SESSION WHERE SID='刚才查到的SID';
3.在SQLPLUS的命令窗口执行:
alter system kill session 'sid,SERIAL#';
若出现ora-00031错误,则在后面加immediate;alter system kill session '29,5497' immediate; 再执行后面的操作,若不出现ora-00031错误则操作到此结束。4.SELECT SPID FROM V$PROCESS WHERE ADDR='刚才查到的PADDR';
5.telnet 到小机上执行下列命令:
ps -ef|grep os_process_id
kill -9 os_process_id
ps -ef|grep os_process_id
注:os_process_id是上面查到的SPID
包里面只有select 表的 操作。应该不会是其它程序锁定表造成的。
如果是这样,就可以借用oem工具,了解具体的对象是谁呢?,进而再跟踪处理。