0
点赞
收藏
分享

微信扫一扫

Oracle故障处理:SID状态为killed导致业务异常

客户反馈业务系统突然异常,在联系我方之前已经找软件工程师进行了查看,软件工程师初步诊断为死锁,也进行了相应处理,但是测试发现业务系统还是不能使用,因为工程师在数据库层次执行kill session出现报错,不能正常将死锁会话杀掉。

工程师执行的语句:ALTER SYSTEM KILL SESSION 'sid,serial#';

报错内容:“删除session时出错,原因如下:ORA-00031标记要终止的会话”

根据沟通结果,进行远程登录处理,处理过程简单记录如下:

1、按照软件工程师提供的session SID进行查找对应的系统SPID

sqlplus / as sysdba

select spid from v$process where addr in (select paddr from v$session where sid=2731);

将查询出来的spid再系统层次进行kill -9 spid,然后通知客户进行测试,反馈业务系统依旧不能正常使用。

2、双节点逐个登录

登录racnode1,通过sys权限查找死锁对象,没有找到相关行,如下图:

Oracle故障处理:SID状态为killed导致业务异常_rac

登录racnode2,查找看是否存在死锁,发现一条异常记录,如下图:

Oracle故障处理:SID状态为killed导致业务异常_rac_02

其中SID为2208的会话状态被标识为killed,等待时间5万多秒,根据SID查询系统SPID,在系统层次竟然找不到对应的SPID,现象比较奇怪,如图:

Oracle故障处理:SID状态为killed导致业务异常_session sid_03

与客户继续进行沟通,为了尽快恢复业务,客户的意思是将数据库两节点分别进行重启,告知客户重启风险,认为重启不是最优选择。

想到迁移数据库时候一致性关闭数据库的操作,停止监听,kill会话,shutdown数据库。其中kill会话有两种方式,一种是在数据库层次进行会话查询进行杀掉,另外一种操作是在系统层次进行kill进程。此次现象中根据sid无法查找到系统进程spid,那在业务都无法使用的情况下采用批量将系统LOCAL=NO的系统进程全部杀掉。

进行如下尝试:

Oracle故障处理:SID状态为killed导致业务异常_rac_04

再次查询异常状态进程,未查询到相关记录。联系客户进行业务测试,业务恢复正常。


举报

相关推荐

0 条评论