Oracle Job Scheduler "Застрял"
У нас есть 2 производственные среды, скажем, XX и XY. Оба находятся на Oracle 11g Release 11.2.0.2.0. В обеих средах есть таблица очередей и очередь заданий для постановки / снятия заданий в очередь и их обработки. Сервер приложений - Apache Tomcat версии 6.0.32.
Проблема, с которой я сталкиваюсь, заключается в том, что в среде XX планировщик Oracle "зависает" или "зависает" почти ежедневно в 16:30 по местному времени, тогда как в среде XY он работает идеально. Записи для запланированных заданий начинают накапливаться в таблице очередей, вызывая срабатывание предупреждений. Затем кто-то должен перезапустить сервер приложений, после чего все работает отлично и ожидающие задания обрабатываются без каких-либо проблем. Администратор БД всегда говорит, что в базе данных нет проблем, но я не совсем уверен.
Поиск в Google привел меня к этой ссылке: Задания DBMS_SCHEDULER зависли после обновления до 11.2. На основании объяснения я проверил и сравнил параметр 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)
Так что теперь мне интересно,
- Возможно ли, что в то время как задания ставятся в очередь, между ними теряется соединение с БД, из-за чего планировщик Oracle "зависает" между ними?
- Есть ли другой параметр базы данных, который мне нужно проверить / проверить? Это известная ошибка в Oracle? Если да, документировано ли это где-нибудь? Извините, я, возможно, пропустил чтение.
- Есть ли какая-либо другая информация, которую мне нужно попросить администратора базы данных проверить?
Заранее благодарю за любую помощь.
РЕДАКТИРОВАТЬ: ссылка для вывода запроса => select * from DBA_SCHEDULER_JOBS
предоставляется в Excel по ссылке: Job_output.xlsx
Спасибо!
Обновление от 20 марта 2014 г.
Проблема еще не решена. Следовательно, некоторые дополнительные результаты запросов публикуются ниже в этом вопросе.
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>