2023年8月2日发(作者:)
在RAC环境下ORACLE无法释放进程的处理方法
一、软硬件环境:
服务器:IBMx3850M2:7233:2*2.4(7450),64G内存,2*300G,HBA*2,双电
存 储: EMC CX4-120
软件环境:ZLHIS10.26+ORACLE10.2.0.4+LINUX5.3+RAC(三节点)
二、问题现象:
收费室人员在收费确定打印发票的过程中突然发生电脑死机或蓝屏,造成此用户近两个小时内无法收费,只能耐心的等待,系统会自动恢复,此种情况在短短的3个月时间内发生过几次。
三、处理方式:
1、方式一:
A、通过后台语句 select SID,serial#,USERNAME from v$session
Where sid In(select SESSION_ID from v$locked_object )后台查询sid号和serial#号
B、通过语句alter system kill session 'sid,serial#'; 提示成功,但是仍然不能收费
C、将以前的用户停用,重新建一个用户,对就此操作员的姓名,结果仍然不行. D、由于是考虑是linux操作系统,又是rac环境,则分别使用root用户登录操作系统进行结束进程:kill -9 psid号, 提示成功,但是仍然不能收费
E、经过以上几种方法后,通过 Select * From gv$session 查询,始终还是存在有未结束的进程,分布在不同例程中。
2、方式二:
经过日志的分析,最后发现好像是在’人员缴款余额’表上更新时出现的问题,最后解决办法是修改此表的相应值:
Alter table 人员缴款余额 pctfree 20 initrans 40 ;
Alter table 人员缴款余额 move;
Alter index 人员缴款余额_PK rebuild pctfree 20 initrans 40;
本以为可以彻底解决,但是好景不长,第三天又发生类似的情况了.
3、方式三:
通过查了一些Oracle的文档,这种情况有一个特性可以使用。Oracle称之为Dead Connection Detection(DCD僵尸进程检测),启用这个功能后,Oracle会在指定的空闲间隔时间内,发送一个10个字节的探测包,如果客户端进程无响应则会启用PMON后台进程对这个进程的所占用的相关资源进程清理操作,包括内存资源(如PGA,UGA)、变量、锁等进行释放。 于是在的rac测试环境下,实验过这个方案。具体实施方法也非常简单:
A、在每个服务器节点的文件中添加这个参数:
_TIME= <# of minutes>
这个参数就是指定的空闲时间,也就是探测包发送的空闲间隔时间,以分钟为单位,根据医院业务时的实际情况,可以灵活设置时间
B、同时设置这个参数后,要求重启或reload监听程序,由于重启监听程序不影响已经连接的用户,可以直接重启;由于是rac环境,需要重启所有节点的监听程序,在任一节点执行如下命令即可:
srvctl stop listener –n his1
srvctl start listener –n his1
srvctl stop listener –n his2
srvctl start listener –n his2
srvctl stop listener –n his3
srvctl start listener –n his3
c、具体操作步骤如下:
在h1号节上的/u01/oracle/network/admin目录下增加一个
文件,其中内容为:_TIME=1
在oracle用户下停h1节点监听:srvctl stop listener –n h1
在oracle用户下重启动h1节点监听:srvctl start listener –n h1
查看rac状态:crs_stat -t ,状态正常
分别在h2,h3号机上重复以上操作 目前通过方法三处理后近一个周的时间,未发现此现象,希望以上方法可以使大家在以后的维护过程提供帮助,同时从以上可以得知在高可用rac环境下也存在维护的难度。
发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1690956187a472504.html
评论列表(0条)