一般Oracle 中的进程会通过PL/SQL 执行以下语句
select c.owner, c.object_name, c.object_type, b.sid, b.serial#,
b.status, b.osuser, b.machine from
v$locked_object a, v$session b, dba_objects c
where b.sid = a.session_id
and a.object_id = c.object_id;
上面的语句得出 SID 和 SERIAL#
alter system kill session '137,1681'
immediate;
其中 "137" 为 SID
"1681" 为SERIAL#
来进行"Killed"
,执行完之后,状态为"Killed",但是锁定的资源会很长一段时间不释放,一开始没有办法,只好重启数据库。
后来,经过研究,搜索资料,现提供下面的解决办法,进行杀掉锁的进程。
解决办法如下:
1、通过上面的命令来杀死进程,进程的状态会被置为"killed",但是锁定的资源没有被释放,那么可以在os一级再杀死相应的进程(线程),首先执行下面的语句获得进程(线程)号:
select spid,osuser,s.program
from v$session s,v$process p
where s.paddr = p.addr and s.sid =
'137'
注:这里的 '137' 就是第一段语句查出来的SID,
执行上述语句,得出来的SPID 为
728
2、在OS 上通关cmd命令来杀死这个进程(线程)
1)第一种,在UNIX OS 上,用ROOT 身份执行下面的命令:
#kill -9 728 (728 1中的语句查询出来的SPID)
2)第二种,在WINDOWS,用orakill杀死线程,
语法为:orakill sid thread
注:SID,这里的SID
为你杀死该进程的数据库的实例名
THREAD,指的是你要杀掉该进程的线程号,为1中查询出来的SPID
例子如下:
C:\Documents and Settings\Administrator>orakill
zghx 728
Kill of thread id 728 in instance zghx successfully
signalled.