ORA-00030: 用户会话 ID 不存在

2025-10-24 11:46:11

1、1、找出sid

select l.session_id,o.owner,o.object_name

from v$locked_object l,dba_objects o

where l.object_id=o.object_id

如果是rac:

select l.session_id,o.owner,o.object_name

from  gcv$locked_object l,dba_objects o

where l.object_id=o.object_id

查看所有占有锁的会话和对象

比如update更新语句是clfxx表,通过以上SQL语句,找出clfxx占有锁的所有会话。

2、2、找出pid和实例

select t2.username,t2.sid,t2.serial#,t2.logon_time

from v$locked_object t1,v$session t2

where t1.session_id=t2.sid order by t2.logon_time;

如果是rac:

select t2.username,t2.sid,t2.serial#,t2.logon_time

from gv$locked_object t1,gv$session t2

where t1.session_id=t2.sid order by t2.logon_time;

查看所有占有锁的会话ID和serial#

第一步已经确定了所有相关sid,那么通过sid找出serial#,然后执行

alter system kill session 'sid,serial#'

如查询结果:

username  sid  serial# logon_time

SA 158 15184 2014/12/4 14:55:59

SA 146 8229 2014/12/4 15:23:22

SA 136 14314 2014/12/4 16:09:59

SA 131 54 2014/12/4 16:10:06

alter system kill session '146,8229';

3、3、kill -9 进程号  杀掉进程

如果在执行alter system kill session '146,8229'的时候报错ORA-00030: 用户会话 ID 不存在,那么可以通过如下SQL语句:

select * from gv$process

where addr in (

select paddr from gv$session where sid =146

);

查看进程号和实例名,因为如果是rac的话,需要进入对应的服务器中杀掉相关进程。

ps -ef | grep 进程号   查看是否有相关进程号

kill -9  进程号   使用root用户杀掉进程

注意:

通过上面的SQL语句查看,可以看到是集群用户grid分配的数据库前段进程资源,也就是说进群进程管理监听

4、4、我的处理情况

找到了2个会话占有clfxx对象的锁,但是通过第3步骤的SQL只能找到其中的一个sid会话的pid,且这个进程在节点2上,杀掉之后,第二天再次查找到另外一个sid的pid,杀掉执行,update更新语句执行正常了

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢