通过oracle Apex页面运行任何作业时出现“错误:错误-服务不可用”

时间:2020-08-06 19:32:02

标签: oracle-apex oracle-apex-5 oracle-apex-5.1

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

 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 :(得分:0)

我认为您正在混合难以组合的两件事:

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

解决方案:

  • use_current_session=> FALSE,因此作业在后台运行
  • 在动态操作中,将“等待结果”设置为true,以便迫使用户等待作业完成。
  • 在页面提交上执行作业,这也将迫使用户等待作业完成。

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

相关问题