联奕科技工程体系

 找回密码
 立即注册
查看: 175|回复: 0

【Oracle】记一次oracle的job卡死(hang住)的解决方案20181217

[复制链接]

1

主题

1

帖子

4261

积分

论坛元老

Rank: 8Rank: 8

积分
4261
发表于 2018-12-17 10:40:00 | 显示全部楼层 |阅读模式
本帖最后由 liangxiongbo 于 2018-12-17 11:52 编辑

问题现象
如下图所示:
该job自2018年12月14号晚上9点半开始就没有执行记录了。【由于该job以前一直是自动执行都没问题,所以排除本身的原因,猜测很可能是hang住了】

解决方案(思路)
select * from dba_scheduler_jobs where job_name='LY_JOB_DOWN_XGXT_XSQJ';
select * fromdba_scheduler_job_run_details where job_name='LY_JOB_DOWN_XGXT_XSQJ' order by log_date desc;
select * from dba_scheduler_running_jobswhere job_name='LY_JOB_DOWN_XGXT_XSQJ';
select * from v$session where sid='441';
通过上述sql可以知道,该job仍在运行中,确实是卡住了,去会话表找到会话id,可以选择强行结束会话,再看看情况(毕竟重启是解决问题最简单有效的方式)。此处,我们选择去分析一下卡住的具体原因。由于发现该job调用的存储过程牵涉到dblink,于是测试了一下dblink,随意通过dblink查询学工数据库的表,发现报TNS错误,于是登录192.168.5.14数据库服务器,一查监听,有2个,遂都关闭了,重启监听,然后再试dblink已经正常了,于是静待10分钟,发现hang住的job也已经执行成功了,至此问题已经完全解决~

附上oracle2个监听的解释及处理方案:
据ORACLE解释,在任何操作系统版本都有此问题。
现象:监听器启动后,隔一段时间(长短不定),就会出现无法连接: 若是用10201版本的SQLPLUS,则会出现 NO LISTENER。
9207 版本的SQLPLUS,则会出现:没反应,HANG住。
原因:10201 版本上的一个BUG:4518443。其会自动创建一个子监听器,当出现此情况时,监听器将会挂起。
/opt/oracle/product/10g/network/log/listener.log有如下语句:
WARNING: Subscription for node down event still pending
检查是否真因为此BUG造成此现象:
$ ps -ef | grep tnslsnr
ora10g 8909 1 0 Sep 15 ? 902:44 /u05/10GHOME/DBHOME/bin/tnslsnr sales -inherit
ora10g 22685 8909 0 14:19:23 ? 0:00 /u05/10GHOME/DBHOME/bin/tnslsnr sales –inherit
正常情况只有一个监听器,而此BUG则会出现两个监听器。
解决方法:打补丁4518443 或者在listener.ora 文件里加入:
SUBSCRIBE_FOR_NODE_DOWN_EVENT_<listener_name>=OFF
其中,<listener_name> 是数据库的监听器的名称。如:默认情况下,监听器名为:LISTENER 。则语句就是:
SUBSCRIBE_FOR_NODE_DOWN_EVENT_LISTENER=OFF
重启监听程序:
lsnrctl stop
lsnrctl start

后记:提醒自己,以后遇到hang住的问题,不要一味去想着杀掉重启,关联到dblink的情况下,优先检查一下dblink,因为dblink最容易出事…

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|ly-sky.com

GMT+8, 2025-12-17 23:43 , Processed in 0.100482 second(s), 20 queries .

快速回复 返回顶部 返回列表