oracle死锁时杀进程的方法:
创新互联专业为企业提供武穴网站建设、武穴做网站、武穴网站设计、武穴网站制作等企业网站建设、网页设计与制作、武穴企业网站模板建站服务,10年武穴做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
第一步:尝试在sqlplus中通过sql命令进行删除,如果能够删除成功,则万事大吉。但通常情况下,出现死锁时,想通过命令行或者通过oracle的管理工具删除有死锁的session,oracle只会将该session标记为killed,但无法清除掉,往往需要通过第二步在操作系统层级进行删除。
第二步:
1、select xidusn, object_id, session_id, locked_mode from v$locked_object; --查死锁的对象,获取其SESSION_ID。
2、select username,sid,serial# from v$session where sid=29; --根据上步获取到的sid查看其serial#号。
3、alter system kill session '29,57107'; --删除进程,如已经删除过,则会报ora-00031的错误;否则oracle会将该session标记为killed状态,等待一段时间看能否会自动消失,如长时间消失不掉,则需要做后续步骤。
一些ORACLE中的进程被杀掉后,状态被置为"killed",但是锁定的资源很长时间不释放,有时实在没办法,只好重启数据库。现在提供一种方法解决这种问题,那就是在ORACLE中杀不掉的,在OS一级再杀。
进程数越来越多的原因比较多。例如:客户端增多、一个客户端打开多个任务、失败进程增多、应用程序没能正常结束等等。对于客户端的增多和多开任务是人为的比较好控制,而应用程序不能正常退出可以调整应用程序即可。问题失败进程,它是属于系统问题,与服务器的连接模式和网络通讯稳定性直接相关。
Oracle的后台进程PMON进程监控进程是专门清理死进程的。它定期被唤醒进行清理死进程,但出现的死进程过多来不及清理,那么进程数就会不断地增多最后可能出现客户端无法登入的现象了。
Oracle服务器目前主要采用两种连接方式:专用方式DEDICATED和共享方式SHARED。专用方式是每一个客户端的用户进程对应一个服务器进程为其服务,即使该服务器进程失败变成死进程了也不会影响其他用户的请求。而共享连接方式下,一个服务器进程为很多个客户的用户进程服务的,它是按照队列一个一个进行处理的,当第一个用户进程结束之前后面用户进程需要进行等待。
方法/步骤
1.查询哪些对象被锁:
select object_name,machine,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;
2.杀死进程:
alter system kill session '137,233'; (其中137,223分别是上面查询出的sid,serial#)
PS.以上两步,可通过Oracle的管理控制台来执行。
如果利用上面的方法杀死进程后,进程状态虽被置为"killed",但是锁定的资源很长时间没有被释放,那么可以在OS一级再杀死相应的进程(线程)
1.首先获得进程(线程)号:
select spid, osuser, s.program
from v$session s,v$process p
where s.paddr=p.addr and s.sid=137 (137是上面的sid)
2.在OS上杀死这个进程(线程):
1)在unix上,用root身份执行命令:
#kill -9 12345(即上面查询出的spid)
2)在windows(unix也适用)用orakill杀死线程,例:c:orakill orcl 12345
orakill是oracle提供的一个可执行命令,语法为:orakill sid thread
其中:
sid:表示要杀死的进程属于的实例名
thread:是要杀掉的线程号,即上面查询出的spid。
1.第一步:使用Linux的kill命令杀死所有与oracle有关的进程。 1)查询到与ORACLE_SID相关的oracle进程 $ ps -ef |grep $ORACLE_SID oracle 7776 1 0 22:51 ? 00:00:00 ora_pmon_ora10g oracle 7778 1 0 22:51 ? 00:00:00 ora_psp0_ora10g oracle...