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

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

现象描述:oracle客户端plsql更新大数据量表,由于速度很慢,中途进行中断处理操作,甚至在任务管理器中杀掉了plsql进程。之后重启plsql客户端,对该大数据量表进行操作(查询,更新,删除)均出现等待现象。查询锁表sql,发现该表依旧是锁定状态,同时杀锁:alter system kill session’sid,serial#’,报错:标记要终止的会话。

问题原因:一些ORACLE中的进程被杀掉后,状态被置为"killed",但是锁定的资源很长时间不释放。

此时有两种方法处理:
方法一:重启数据库服务。由于数据库中有“killded”状态的进程,一直杀不掉,shutdown immediate命令可能会一直停留在shutdown immediate过程,而使用shutdown abort 会损坏数据库。
方法二:在数据库服务器层面杀掉“killded”状态的进程。

解决方法二步骤如下:
查锁表sql:

select sess.sid, 
    sess.serial#, 
    lo.oracle_username, 
    lo.os_user_name, 
    ao.object_name, 
    lo.locked_mode 
    from v$locked_object lo, 
    dba_objects ao, 
    v$session sess 
where ao.object_id = lo.object_id and lo.session_id = sess.sid;

一.查询killded状态的进程,结果与查锁sql对应

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';

二.找到对应的进行,查询对应进程在数据库服务器(操作系统)的进程号

select b.spid,a.osuser,b.program 
  from v$session a,v$process b 
 where a.paddr=b.addr 
   and a.sid=--sid来源于步骤一

三·.在数据库服务器上杀进程

1)、在unix上,用root身份执行命令:#kill -9 spid(spid 由步骤二·查询)
2)、在windows(unix也适用)用orakill杀死线程,orakill是oracle提供的一个可执行命令,语法为:
orakill sid thread
其中:
sid:表示要杀死的进程属于的实例名
thread:是要杀掉的线程号,即步骤二·查询出的spid。
例:c:>orakill orcl 12345
注意:这里要注意的是kill OS进程是在服务端操作,而不是你程序所在客户机。

本文主要参考资料:http://blog.sina.com.cn/s/blog_5ceb51480102w8et.html

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值