"Error: error - Service Unavailable" while running any job via oracle Apex Page

"Error: error - Service Unavailable" while running any job via oracle Apex Page

我正在使用 DBMS_SCHEDULER 通过顶点页面通过以下方式单击按钮执行外部作业。(动态操作=>执行 PlSql)

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

它正在正确执行外部作业。(需要 1-2 分钟)。我的问题是,在执行期间我无法访问任何其他页面或无法使用新会话登录nothing.showing 我正在执行的每项任务都低于错误。

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

这是一般问题还是已知问题?如果是,如何解决问题,因为同时其他用户还必须执行任何其他任务或其他人可能同时登录。

谢谢。

我认为您混合了 2 种难以结合的东西:

  1. 动态操作旨在从页面提交代码而不提交页面,这样用户可以在完成某些操作后继续在页面上工作(例如 运行 pl/sql 代码)
  2. 运行 数据库中占用数据库会话直到完成的进程 (use_current_session=> TRUE)。您的 dbms_scheduler.run_job 进程将在当前会话中 运行 并且只要该作业是 运行ning 就不会在该数据库会话中进行其他操作 运行 (连接正在使用中)如错误信息所示。

解决方案:

  • use_current_session=> FALSE 所以作业 运行 在后台
  • 在动态操作中,将“等待结果”设置为 true,这样用户就必须等待直到作业完成。
  • 在页面提交上执行作业,这也会强制用户等待作业完成。

由于您的工作需要 1-2 分钟才能完成,因此选项 2 和 3 可能不可行,因为用户体验不是最佳的。如果您在后台执行作业,那么您可能需要编写一些额外的代码来防止用户点击几次并多次提交作业。您可以通过在提交之前检查作业是否 运行ning 来做到这一点,如果当前是 运行ning 则不提交。