十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
oracle死锁时杀进程的方法:
我们提供的服务有:成都网站建设、网站建设、微信公众号开发、网站优化、网站认证、惠民ssl等。为上1000+企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的惠民网站制作公司
第一步:尝试在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一级再杀。
1.关闭oracle所有的服务。可以在windows的服务管理器中关闭;\x0d\x0a\x0d\x0a 2.打开注册表:regedit 打开路径:\x0d\x0a HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ \x0d\x0a 删除该路径下的所有以oracle开始的服务名称,这个键是标识Oracle在windows下注册的各种服务!\x0d\x0a \x0d\x0a 3.打开注册表,找到路径:\x0d\x0a HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\x0d\x0a 删除该oracle目录,该目录下注册着Oracle数据库的软件安装信息。\x0d\x0a \x0d\x0a 4.删除注册的oracle事件日志,打开注册表\x0d\x0a HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\x0d\x0a 删除注册表的以oracle开头的所有项目。\x0d\x0a \x0d\x0a 5.删除环境变量path中关于oracle的内容。\x0d\x0a 鼠标右键右单击“我的电脑--属性--高级--环境变量--PATH 变量。\x0d\x0a 删除Oracle在该值中的内容。注意:path中记录着一堆操作系统的目录,在windows中各个目录之间使用分号(;)隔开的,删除时注意。\x0d\x0a 建议:删除PATH环境变量中关于Oracle的值时,将该值全部拷贝到文本编辑器中,找到对应的Oracle的值,删除后,再拷贝修改的串,粘贴到PATH环境变量中,这样相对而言比较安全。\x0d\x0a \x0d\x0a 6.重新启动操作系统。\x0d\x0a 以上1~5个步骤操作完毕后,重新启动操作系统。\x0d\x0a \x0d\x0a 7.重启操作系统后各种Oracle相关的进程都不会加载了。这时删除Oracle_Home下的所有数据。(Oracle_Home指Oracle程序的安装目录)\x0d\x0a \x0d\x0a 8.删除C:\Program Files下oracle目录。\x0d\x0a (该目录视Oracle安装所在路径而定)\x0d\x0a \x0d\x0a 9.删除开始菜单下oracle项,如:\x0d\x0a C:\Documents and Settings\All Users\「开始」菜单\程序\Oracle - Ora10g\x0d\x0a 不同的安装这个目录稍有不同。\x0d\x0a 如果不删除开始菜单下的Oracle相关菜单目录,没关系,这个不影响再次安装Oracle.当再次安装Oracle时,该菜单会被替换。\x0d\x0a \x0d\x0a 至此,Windows平台下Oracle就彻底卸载了。
方法/步骤\x0d\x0a1.查询哪些对象被锁:\x0d\x0aselect object_name,machine,s.sid,s.serial# \x0d\x0afrom v$locked_object l,dba_objects o ,v$session s\x0d\x0awhere l.object_id = o.object_id and l.session_id=s.sid;\x0d\x0a\x0d\x0a2.杀死进程:\x0d\x0aalter system kill session '137,233'; (其中137,223分别是上面查询出的sid,serial#)\x0d\x0a\x0d\x0aPS.以上两步,可通过Oracle的管理控制台来执行。\x0d\x0a\x0d\x0a如果利用上面的方法杀死进程后,进程状态虽被置为"killed",但是锁定的资源很长时间没有被释放,那么可以在OS一级再杀死相应的进程(线程)\x0d\x0a\x0d\x0a1.首先获得进程(线程)号:\x0d\x0aselect spid, osuser, s.program \x0d\x0afrom v$session s,v$process p\x0d\x0awhere s.paddr=p.addr and s.sid=137 (137是上面的sid)\x0d\x0a\x0d\x0a2.在OS上杀死这个进程(线程):\x0d\x0a\x0d\x0a1)在unix上,用root身份执行命令: \x0d\x0a#kill -9 12345(即上面查询出的spid)\x0d\x0a\x0d\x0a2)在windows(unix也适用)用orakill杀死线程,例:c:orakill orcl 12345\x0d\x0aorakill是oracle提供的一个可执行命令,语法为:orakill sid thread\x0d\x0a其中:\x0d\x0asid:表示要杀死的进程属于的实例名\x0d\x0athread:是要杀掉的线程号,即上面查询出的spid。
卸载Oracle总体分为三步 1.主程序的卸载 2.残留文件的删除 3.注册表清理
1.主程序卸载只要运行 Oracle OraDB11g_home1--Oracle安装产品--Universal Installerd
程序运行起来后 ,选择卸载产品进去下面的页子
如上图选择,如果你安装了Client 也将client文件夹选中。
然后就是等待 当进度走完后我们的第一步就完成了。
2.硬板上残留文件的卸载。
Oracle在安装时会安装到你的系统盘和你安装时所选的主程序安装盘,以我的系统为例Oracle分别安装在我的C盘和G盘。
C:\Program Files (x86)\Oracle 与 G:\app 这两个文件夹及其子文件全部删除。中间会提示,有的文件程序正在使用无法删除,我们稍后再来管它。
到此删除残留文件就大部分完成了。
3.删除注册表
在 开始--搜索中输入regedit 打开注册表编辑器
如上所示 所有 services 文件夹下 所有带“Oracle”的文件全部删除。重新启动计算机,在去删除 第二步中没有删除的残留文件。
到此Oracle已经彻底的从你的计算机上删除了
方法/步骤
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。
一、工具
pl/sql数据库
二、操作步骤
首先通过pl/sql查询到目前长时间活动的进程:
2.选择sessions,得到界面:
3.得到某个SID和serialId.
然后切换到超级用户下面,执行下面下面:select c.spid from v$process c where c.addr=(select b.paddr from v$session b
where b.sid= '15' and b.serial#= '16985') 得到spid. 然后登录到数据库的机器,执行如下命令即完成杀掉oracle进程:
三、注意事项:如果是生产环境,要尽量减少停机时间,让数据库尽快恢复使用。