Oracle某条资料被锁如何解锁 (ScriptRunner,v$locked_object,SID和SERIAL#)

Posted 帅气型男

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle某条资料被锁如何解锁 (ScriptRunner,v$locked_object,SID和SERIAL#)相关的知识,希望对你有一定的参考价值。

最近在开发时出现一个状况,update和delete 某个table的某条记录时会卡死,像下图这样,ScriptRunner任务会一直在转,导致Oracle SQL Developer无法退出。

 

今天百度了一下,原来是该table的这一条数据被锁住了。下面步骤是找到的解决方法,先找到对应的session_id和serial#,然后杀掉进程。

(1)锁表查询的代码有以下的形式:

select count(*) from v$locked_object;
select * from v$locked_object;

(2)查看哪个表被锁

select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id = a.object_id;

(3)查看是哪个session引起的

select b.username,b.sid,b.serial#,logon_time from v$locked_object a,v$session b where a.session_id = b.sid order by b.logon_time;

(4)杀掉对应进程

执行命令:

alter system kill session\'1025,41\';

其中1025为sid,41为serial#.

 

如果查询不到v$locked_object,是因为没有权限。

 

以sys用户登录,执行如下授权语句:

grant select on SYS.V_$LOCKED_OBJECT TO dev;

 

此外,还需要注意的一个地方是,kill session语句中需要写上SID和SERIAL#

Alter system kill session \'SID,SERIAL#\'

这是因为SID会被重用,而SERIAL#是递增的,不会重复。SID和SERIAL#组合才可以准确指定session

 

 

以上是关于Oracle某条资料被锁如何解锁 (ScriptRunner,v$locked_object,SID和SERIAL#)的主要内容,如果未能解决你的问题,请参考以下文章

oracle数据库,表被锁,如何解锁?

orcal数据库表被锁了怎么解锁??

Oracle数据库表被锁了,如何解锁

oracle数据库表被锁了怎么解锁

Oracle中查看表是否被锁和如何解锁的处理方法

Oracle数据库老是被锁表,而且用解锁语句解开后,紧跟着又出来一堆锁,解也解不完