以下 Sql 可以找出锁表的进程
- select sess.sid,
- sess.serial#,
- lo.oracle_username,
- lo.os_user_name,
- ao.object_name,
- lo.locked_mode
- from v$locked_object lo,
- dba_objects ao,
- v$session sess
- where ao.object_id = lo.object_id and lo.session_id =sess.sid;
以下 Sql 可以找出编译存储过程, 函数, 包的进程
- SELECT *
- FROM V$SESSION s, sys.x$kglob o, sys.x$kglpn p
- WHERE upper(o.kglnaobj) LIKE upper('% 不能编译的包体 %')
- AND p.kglpnhdl = o.kglhdadr
- AND s.SADDR = p.kglpnuse;
- select * from v$session t1, v$locked_object t2 where t1.sid = t2.SESSION_ID;
找出 SID 与 Serial# 后执行以下语句闭关 Session
alter system kill session '144,46679' ;
但我们想停止正在运行的 Job 时, dbms_jobs.broken + remove 时无法将其停止只是打上停止标记, 需要用以下方法:
执行下面的语句获得进程 (线程) 号:
- select spid, osuser, s.program
- from v$session s,v$process p
- where s.paddr=p.addr and s.sid=524 (524 是上面的 sid)
在 OS 上杀死这个进程(线程):
unix 上, 用 root 身份或是相应的 oracle 身份执行命令:
#kill -9 9846(9846 上一步查询出的 spid)
Windows(unix 也适用)用 orakill 杀死线程, orakill 是 oracle 提供的一个可执行命令 , 此命令需在命令窗口中运行. 用法为:
- orakill sid thread
- PS:
sid: 表示要杀死的进程属于的实例名
thread: 是要杀掉的线程号, 即第 3 步查询出的 spid.
- exp:
- c:>orakill orcl 9846
- ----------------
来源: http://www.bubuko.com/infodetail-3289829.html