«Ошибка: ошибка - служба недоступна» при выполнении любого задания через oracle страницу Apex. - PullRequest
0 голосов
/ 06 августа 2020

Я выполняю внешнее задание, используя DBMS_SCHEDULER через верхнюю страницу, нажав кнопку, как показано ниже. (Dynami c action => Execute Pl Sql)

 dbms_scheduler.run_job(job_name => 'APEXDATA.myJobName', use_current_session=> TRUE);

Его выполнение внешнего задания правильно. (занимает 1-2 минуты). Моя проблема заключается в том, что между временем, когда он выполняется, я не могу получить доступ к любой другой странице или не могу войти в систему с новым сеансом ничего. Показывая ниже ошибку в каждой задаче, которую я выполняю

**503 Service Unavailable
  The connection pool named: |apex|| is not correctly configured, due to the following error(s): 
  Exception occurred while getting connection: oracle.ucp.UniversalConnectionPoolException: 
  All connections in the Universal Connection Pool are in use**

Это общая или известная проблема? Если да, то как решить проблему, потому что в то же время другой пользователь также должен выполнить любую другую задачу, или другой пользователь может войти в систему в то же время.

Спасибо.

1 Ответ

0 голосов
/ 08 августа 2020

Я думаю, вы смешиваете 2 вещи, которые сложно объединить:

  1. Dynami c действия предназначены для отправки кода со страницы без отправки страницы, чтобы пользователь мог продолжить работу. страница после того, как он что-то сделал (например, запустил pl / sql code)
  2. Запуск процесса в базе данных, который занимает сеанс базы данных до его завершения (use_current_session=> TRUE). Ваш процесс dbms_scheduler.run_job будет выполняться в текущем сеансе, и пока это задание выполняется, никакие другие операции не могут выполняться в этом сеансе базы данных (соединение используется, как показано в сообщении об ошибке).

Решения:

  • use_current_session=> FALSE, поэтому задание выполняется в фоновом режиме
  • В действии Dynami c установите для параметра «Ждать результата» значение true, чтобы пользователь вынужден ждать, пока задание не будет завершено.
  • Выполнить задание на отправке страницы, что также заставит пользователя ждать завершения задания.

Поскольку ваше задание занимает 1- 2 минуты на завершение, варианты 2 и 3, вероятно, неосуществимы, потому что пользовательский интерфейс не оптимален. Если вы выполняете задание в фоновом режиме, вам, вероятно, потребуется написать дополнительный код, чтобы пользователь не щелкнул пару раз и не отправил задание несколько раз. Вы можете сделать это, проверив, выполняется ли задание, прежде чем отправлять его, и не отправлять его, если оно выполняется в данный момент.

...