查杀Oracle线程的方法

在一次使用PLSQL Developer 对数据库(Oracle)进行数据删除操作时,在执行完删除命令后,commit之前,PLSQL Developer 非法关闭。再次使用PLSQL Developer 登录,此时无法对前面操作过的表再次进行删除数据的操作了。报错:record is locked by another user。估计是前面非法关闭PLSQL Developer后,因为未做提交,数据库一直在等待提交,在此过程中,不能再对数据库中该张表进行删除操作了。询问公司的DBA,果然如此,遂请教解决方法。果然是DBA,上网google了两下,搞定(这老兄挺神,技术很强,但英文贼烂,经常记不住命令如何拼写,要用的时候直接google拼写方法)

1、先查找哪些线程正在运行中。注意要使用admin权限的用户登录数据库SQL PLUS,并且不要使用PLSQL Developer登录。

Select s.sid,s.serial#,p.spid THREADID, s.osuser, s.program
From v$process p, v$session s
Where p.addr = s.paddr

从得出的结果中查找你非法退出时登录PLSQL Developer的用户名对应的线程。

2、KILL所有你非法退出时登录PLSQL Developer的用户名对应的线程。
alter system kill session '28,12156'; 

还有一个方法是等待Oracle自动回滚,隔一定时间Oracle回执行一次回滚,恢复到上一次commit之前的状态。汗……自然这是最窝囊的办法了。谁知道它什么时候高兴了会回滚阿!!

你可能感兴趣的:(查杀Oracle线程的方法)