如何杀掉被锁定的ORACLE进程

来源:互联网 发布:如何修改linux的ip地址 编辑:程序博客网 时间:2024/04/27 22:56

 

上周五在对一张大表的数据进行汇总的时候,在程序运行中不小心将PL/SQL关闭,导致表被锁定.下面来讲讲解决的方法.

      1.下面的语句用来查询哪些对象被锁:
  col object_name for a30
  col machine for a20
  select object_name,s.sid,s.serial#
  from v$locked_object l,dba_objects o ,v$session s
  where l.object_id = o.object_id and l.session_id=s.sid;


OBJECT_NAME                           SID    SERIAL#
----------------------------------- ---------- ----------
ACC_HOLD_CYCLE_TOTAL         144     21993
  2.下面的语句用来杀死一个进程:
  alter system kill session '144,21993'; (其中144,21993分别是上面查询出的sid,serial#)
  3.利用上面的命令杀死进程后,该进程状态被置为 "killed", 但是锁定的资源很长时间没有被释放,那么我们可以在os一级再杀死相应的进程(线程),首先获得进程(线程)号:
select spid, osuser, s.program
from v$session s,v$process p
where s.paddr=p.addr and s.sid=#sid; (#sid是上面的sid)

  4.在操作系统中杀掉相应的进程(线程):
  1)在Linux上,用root身份执行命令:
  kill -9 12345(12345是第3步查询出的spid)
  2)在windows 用orakill杀死线程,orakill是oracle提供的一个可执行命令,语法为:orakill sid thread
  其中:
  sid:表示要杀死的进程属于的实例名
  thread:是要杀掉的线程号,即第3步查询出的spid。
  例:c:>orakill orcl 12345

这样就不用重启数据库拉,问题解决.

原创粉丝点击