我们有 2 个生产环境,比如 XX 和 XY。两者都在 Oracle 11g 版本 11.2.0.2.0 上。这两种环境都有一个队列表和一个作业队列,用于将作业入队/出队并处理它们。应用程序服务器是 Apache Tomcat 版本 6.0.32。
我面临的问题是,在 XX 环境中,Oracle 调度程序几乎每天都会在当地时间下午 4.30 被“挂起”或“卡住”,而在 XY 环境中它工作得非常好。计划作业的条目开始在队列表中累积,从而触发警报。然后有人必须重新启动应用程序服务器,之后整个事情工作得很好,待处理的作业被处理而没有任何问题。DBA 总是说数据库没有问题,但我不太相信。
在谷歌上搜索让我找到了这个链接:升级到 11.2 后 DBMS_SCHEDULER 作业卡住了 根据解释,我检查并比较了 DB 参数job_queue_processes。它具有相同的值/细节,所以我在这里处于死胡同。
重新启动应用程序时,我在输出/显示上出现以下异常,但在日志中却没有:
Mar 18, 2014 11:44:19 AM org.apache.catalina.startup.Catalina stopServer
SEVERE: Catalina.stop:
java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:529)
at java.net.Socket.connect(Socket.java:478)
at java.net.Socket.<init>(Socket.java:375)
at java.net.Socket.<init>(Socket.java:189)
at org.apache.catalina.startup.Catalina.stopServer(Catalina.java:422)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.stopServer(Bootstrap.java:338)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:416)
所以现在我想知道,
- 是不是在作业排队时,与 DB 的连接在两者之间丢失,导致 Oracle 调度程序在两者之间“挂起”?
- 我需要验证/验证任何其他数据库参数吗?这是 Oracle 中的一个已知错误吗?如果是,它是否记录在任何地方?对不起,我可能错过了阅读。
- 是否有任何其他信息需要我要求 DBA 检查?
提前感谢您的帮助。
编辑:查询输出的链接=>select * from DBA_SCHEDULER_JOBS
在链接的excel中给出:Job_output.xlsx
谢谢!
2014 年 3 月 20 日更新
问题还没有解决。因此,查询的更多输出将在问题下方发布。
SQL> select queue,msg_state,expiration_reason,count(*)
2 from AQ$JOB_QTBL
3 group by queue,msg_state,expiration_reason;
QUEUE MSG_STATE EXPIRATION_REASON COUNT(*)
------------------------------ ---------------- ------------------ ----------
JOB_Q READY 4
SQL> select owner, name, queue_type, max_retries, retry_delay
2 from dba_queues
3 where queue_table = 'JOB_QTBL'
4 and owner = 'ENV_XX';
OWNER NAME QUEUE_TYPE MAX_RETRIES RETRY_DELAY
------------------------------ ------------------------------ -------------------- ----------- -----------
ENV_XX AQ$_JOB_QTBL_E EXCEPTION_QUEUE 0 0
ENV_XX JOB_Q NORMAL_QUEUE 5 0
SQL>