Oracle DBMS_Scheduler 有什么好处?
- 每次都安排(禁用)作业。并在需要时启用并运行它。
- 创建作业,运行它并删除它。
我有一个表 x,每当有记录提交到该表时,我应该有一份工作来处理该记录。我们可能会或可能不会一直插入唱片。请记住这一点..有什么更好的...?
Oracle DBMS_Scheduler 有什么好处?
我有一个表 x,每当有记录提交到该表时,我应该有一份工作来处理该记录。我们可能会或可能不会一直插入唱片。请记住这一点..有什么更好的...?
在异步过程中处理出现在表中的行可以通过多种不同的方式完成,选择适合您的方式:
向表中添加一个触发器,该触发器创建一个一次性作业以使用DBMS_JOB
. 如果插入到表中的数据量非常低,并且您不希望您的作业一直运行,这将是合适的。的优点DBMS_JOB
是在插入提交之前作业不会启动;如果回滚,作业也会回滚,因此不会运行。缺点是,如果活动持续激增,所有创建的作业将挤占任何其他正在运行的作业。
创建一个DBMS_SCHEDULER
定期运行的作业,轮询表中的新记录并处理它们。此方法需要表上的一列,它可以更新以将每条记录标记为“已处理”。例如,添加一个在插入时设置为并在处理后由作业设置为的VARCHAR2(1)
标志。您可以向该标志添加一个索引,该索引将只存储未处理行的条目(因此它会小而快)。这种方法效率更高,特别是对于大数据量,因为每次运行作业都可以一次有效地批量处理大块数据。'Y'
NULL
使用 Oracle 高级队列。http://docs.oracle.com/cd/E11882_01/server.112/e11013/aq_intro.htm#ADQUE0100
对于 (1),为表中的每条记录创建一个单独的作业。您不需要创建工作。但是,您确实需要监视它们;如果失败,您将需要手动调查并重新运行。
对于 (2),您只需创建一个作业并让它定期运行。如果一个记录失败,它可能会被工作的下一次迭代拾取。我将在单独的事务中处理每条记录,因此一条记录的失败不会影响仍在队列中的其他记录的失败。
对于 (3),您仍然创建一个类似 (2) 的作业,但不是读取表,而是将请求从队列中拉出。