ora-00031:标记要终止的会话解决方案

当遇到数据库表被锁且ALTER SYSTEM KILL SESSION失败时,本文介绍了如何通过查询会话信息、在操作系统层面kill进程以及使用orakill命令来解决ORA-00031错误。提供了在Linux和Windows环境下解除锁定的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


今天碰到一个问题,有一张表不能操作,很可能是被锁了,首先想到的是kill session,于是执行了下列的脚本找到是哪个session有问题:
查看表是否被锁
SELECT /*+ rule*/
a.sid, b.owner, object_name, object_type
FROM v$lock a, all_objects b
WHERE TYPE = 'TM'
and a.id1 = b.object_id;

根据上面查询出的sid,找出对应的serial#:
SELECT sid,serial# FROM v$session WHERE sid = &sid;

发现有一个会话有锁sid 197,serial# 17,于是执行alter system kill session ‘197,17’;大概等了30s中,pl/sql developer报出一个错误:ora-00031:标记要终止的会话。

百度了一下解决方法,是在OS级别kill掉;但是纠结了很久,不知道kill掉哪个进程;最终还是使用了最笨的方法重启了数据库,解决了问题;
后来还找到了这样的解决方案:查出session的spid
select spid, osuser, s.program from v$session s, v$process p where s.paddr = p.addr and s.sid =197;
1. 在linux上,  kill -9 12345
 
2. 在 windows上,C:\Documents and Settings\gg>orakill orcl 12345
 
orcl:表示要杀死的进程属于的实例名
 
12345:是要杀掉的线程号
 
ORA-00031: session marked for kill
 
Cause: The session specified in an ALTER SYSTEM KILL SESSION command cannot bekilled immediately (because it is rolling back or blocked on a networkoperation), but it has been marked for kill. This means it will be killed as soonas possible after its current uninterruptible operation is done.
 
Action: No action is required for the session to be killed, but further executionsof the ALTER SYSTEM KILL SESSION command on this session may cause the sessionto be killed sooner.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值