本帖最后由 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最容易出事… |