ORA-00031:标记要终止的会话

标签:
ora-00031ora-00031错误处理ora-00031错误详解ora-00031sessionmarora-00031详解过程 |
分类: Oracle数据库 |
一、现象描述
二、解决方法
1、下面的语句用来查询哪些对象被锁:
select a_s.owner,
from all_objects a_s,
where a_s.object_id=v_t.object_id
and v_t.session_id =vn.sid
and vs.addr=vn.paddr
and vn.username not in('SYSMAN','SYS');
2、查询该sid的sql语句
select *
3、用下面的语句用来杀死引起死锁的进程:
alter system kill session
'sid,serial#';
注意:如果出现题目的错误,则说明在数据库级不能杀掉该死锁进程,需要到操作系统级来处理了。如下图所示:
可以通过下列语句查询:
select
a.spid,b.sid,b.serial#,b.username
from v$process a,v$session b
where a.addr=b.paddr
and b.status='KILLED';
4、如果利用上面的命令杀死一个进程后,进程状态被置为"killed",但是锁定的资源很长时间没有被释放,那么可以在OS级再杀死相应的进程(线程),首先执行下面的语句获得进程(线程)号:
select b.spid,a.osuser,b.program
5、在OS上杀死这个进程(线程)
1)、在unix上,用root身份执行命令:#kill -9 12345(12345
即第4步查询出的spid)
2)、在windows(unix也适用)用orakill杀死线程,orakill是oracle提供的一个可执行命令,语法为:
orakill sid thread
其中:
sid:表示要杀死的进程属于的实例名
thread:是要杀掉的线程号,即第3步查询出的spid。
例:c:>orakill orcl 12345
注意:这里要注意的是kill
OS进程是在服务端操作,而不是你程序所在客户机。
ORA-00031详解过程
本文主要参考资料:http://blog.csdn.net/terryhuang/article/details/2622711