尽管进行了很多搜索,但我似乎无法找到解决我们遇到的这个问题的方法。
我们的系统允许用户提交某些进程以在他们继续工作的同时在后台运行。这些进程使用 DBMS_SCHEDULER 作为作业提交,我们有几个用于串行和并行处理的作业类,具体取决于用户需要执行的作业。
当我们关闭系统进行维护时,我们会停止运行作业并将它们重新输入队列,并禁用所有计划的作业。这对于标准维护窗口来说很好,因为如果我们的系统不在线,用户将无法提交新作业。维护后,所有作业都重新启用,每个人都很高兴。
但是,有时我们希望能够在系统仍处于活动状态时禁用队列——通常是为了在高峰时间释放一些资源。目前我们唯一能做的就是禁用当前计划的所有作业,但这显然不会阻止人们将新作业提交到队列中。
有谁知道一种方法
- 阻止人们进入队列中的工作
- 强制任何新作业以禁用状态进入队列(首选选项)?
提前谢谢了
我现在无法测试它,但我认为您可以使用打开/关闭调度程序窗口来执行此操作:
DBMS_SCHEDULER.create_window
。这个窗口可以有 24 小时的持续时间并每天重复,以便它始终打开。schedule_name
的参数DBMS_SCHEDULER.create_job
)。DBMS_SCHEDULER.close_window
. 维护完成后,使用DBMS_SCHEDULER.open_window
.窗口关闭时提交的作业应排队并稍后在窗口打开时运行。
您应该使用 Oracle 资源管理器来限制由调度程序作业引起的负载,使其不会干扰在线用户。
进行此类切换的另一种方法是通过作业类将您的作业绑定到服务并禁用该服务。请参阅CREATE_JOB_CLASS 过程
如果您想从已启用作业的数据库运行导入并且不希望它们在导入时开始运行,这也非常方便......