0

我们有 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。它具有相同的值/细节,所以我在这里处于死胡同。

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> 
4

0 回答 0