新手使用Oracle Scheduler根据事件启动作业
我在Oracle11.2数据库中有一个表。如果table1中的特定单元格更新为值1,并且table2中的现有行数>0,我希望数据库在远程服务器上运行可执行文件。我对数据库中可能发生的事情没有太多经验——下面的方法可以实现这一点吗新手使用Oracle Scheduler根据事件启动作业,oracle,Oracle,我在Oracle11.2数据库中有一个表。如果table1中的特定单元格更新为值1,并且table2中的现有行数>0,我希望数据库在远程服务器上运行可执行文件。我对数据库中可能发生的事情没有太多经验——下面的方法可以实现这一点吗 使用Oracle调度程序创建作业。作业立即运行,并用于在远程服务器上运行外部可执行程序。作业存在,但直到下面的步骤5才运行(这是否可能?)。 将DML触发器附加到在UPDATE语句上激发的表的列。 让触发器调用PL/SQL子程序 在PL/SQL子程序中,执行以下业
DBMS\u Scheduler来实现上面的步骤1-5。使用参数事件\u条件创建\u作业
以下是上述链接中的一个示例:
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'process_lowinv_j1',
program_name => 'process_lowinv_p1',
event_condition => 'tab.user_data.event_type = ''LOW_INVENTORY''',
queue_spec => 'inv_events_q, inv_agent1',
enabled => TRUE,
comments => 'Start an inventory replenishment job');
END;
上面的代码创建了一个作业,当应用程序通知调度程序某个项目的库存水平已降至低阈值水平时,该作业开始
能否以某种方式修改上述代码以执行预期的步骤?例如,是否可以在此处使用event\u condition
来消除上述步骤2-4?等等。如果是这样,它会是什么样子,例如,如何设置队列\u spec
假设您在远程服务器上安装了Oracle Scheduler Agent,DBMS\u Scheduler
可以在远程计算机上运行可执行文件。我会让DML触发器将消息排队到Oracle高级队列(AQ)中,并使用该队列创建一个(DML触发器不允许提交或回滚事务,但运行DBMS\u调度程序
作业会隐式发出提交,因此DML触发器无法直接运行作业)。基于事件的作业和运行远程可执行文件的作业将是。谢谢Justin,是的,我计划将代理放在远程服务器上。我不确定我是否遵循了上面的描述(过程似乎相当复杂)。请参阅上面的更新1,如果可以使用它,我可能会更容易遵循/实现它。