手抄报 安全手抄报 手抄报内容 手抄报图片 英语手抄报 清明节手抄报 节约用水手抄报

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

时间:2024-10-26 07:09:22

ORA-00030: 用户会话 ID 不存在 在执行alter system kill session 'sid,serial#'时报错ORA-00030。场景回顾:使用一条简单的update DML语句来更新1000条数据,一直卡住,怀疑是锁的原因。通过相关SQL语句找出了sid和serial#,通过alter system kill 语句杀掉相关会话时报错ORA-00030。问题解决:1、找出sid2、找出pid和实例3、kill -9 进程号 杀掉进程4、我的处理情况详细oracle 锁信息参考我的经验:ORA-00054:资源正忙,要求指定NOWAIThttp://jingyan.baidu.com/article/a3aad71acae78eb1fb009695.html

问题解决:

1、找出sidselect l.session_id,o.owner,o.object_namefrom v$locked_object l,dba_objects owhere l.object_id=o.object_id如果是rac:select l.session_id,o.owner,o.object_namefrom gcv$locked_object l,dba_objects owhere l.object_id=o.object_id查看所有占有锁的会话和对象比如update更新语句是clfxx表,通过以上SQL语句,找出clfxx占有锁的所有会话。

2、找出pid和实例select t2.username,t2.sid,t2.serial#,t2.logon_timefrom v$locked_object t1,v$session t2where t1.session_id=t2.sid order by t2.logon_time;如果是rac:select t2.username,t2.sid,t2.serial#,t2.logon_timefrom gv$locked_object t1,gv$session t2where 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_timeSA 158 15184 2014/12/4 14:55:59SA 146 8229 2014/12/4 15:23:22SA 136 14314 2014/12/4 16:09:59SA 131 54 2014/12/4 16:10:06alter system kill session '146,8229';

3、kill -9 进程号 杀掉进程如果在执行alter system kill session '146,8229'的时候报错ORA-00030: 用户会话 ID 不存在,那么可以通过如下SQL语句:select * from gv$processwhere addr in (select paddr from gv$session where sid =146);查看进程号和实例名,因为如果是rac的话,需要进入对应的服务器中杀掉相关进程。ps -ef | grep 进程号 查看是否有相关进程号kill -9 进程号 使用root用户杀掉进程注意:通过上面的SQL语句查看,可以看到是集群用户grid分配的数据库前段进程资源,也就是说进群进程管理监听

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

© 手抄报圈