【问题标题】:How to Create an Oracle Trigger to Dynamically Group/Queue Processes Based on Status?如何创建 Oracle 触发器以根据状态动态分组/排队进程?
【发布时间】:2017-06-12 20:19:35
【问题描述】:

根据以下示例需要以下帮助(使用触发器和序列):

我有一个参考表 (t2),其中列 seq.nextval 为 queue_num,sysdate,status (PROCESSING/COMPLETED/FAILED),当 Source (t1) 加载新数据时,触发器将拾取新插入的记录并将其加载到引用表 (t2) 并用状态 PROCESSING 和 seq.nextval 标记为 queue_num。

我无法弄清楚的是,我们最多只有 5 台服务器,每台服务器最多只能处理 20 个处理状态作业。我将如何创建触发器,它将跨 5 个服务器加载数据,每个服务器最多 20 条记录,然后当它达到最大值时,一旦 QUEUE 中的一个 PROCESSING 作业轮流,任何其他仍需要加载的记录将加载完成了吗?

谢谢你:-)

【问题讨论】:

    标签: oracle oracle11g queue jobs


    【解决方案1】:

    “我将如何创建将跨 5 台服务器加载数据的触发器”

    你可能不会。从T1 推送工作是个坏主意,正是因为没有办法根据T2 的状态来调节流量。

    相反,您应该有后台进程 - 作业 - 轮询 T1 以获取新记录,抓取一些(20 个?)并处理它们,也许填充 T2(如果仍然需要,不确定您的实际进程架构是什么)好像)。当 20 条记录用完时,作业会再轮询 T1,然后遍历表或进入睡眠状态。

    显然,这相当模糊,但恐怕这符合问题的粗略性。请免费详细说明您的问题。

    【讨论】:

    • 非常感谢您的回复。我想要完成的是以下示例:
    • 非常感谢您的回复。我想要完成的是以下示例:作业开始显示以下内容:ROW_ID |状态 |名称 ------------------- 1 |加工 |斯科特 2 |加工 |詹姆斯 3 |加工 |保罗 4 |加工 |迈克 5 |加工 |约翰 ------------------------------- 6 | IN_QUEUE |萨拉 7 | IN_QUEUE |拉里 8 | IN_QUEUE |大卫 9 | IN_QUEUE |玛丽亚 10 | IN_QUEUE | TED
    • * 我需要的是动态调用下一条记录“IN_QUEUE”并在当前运行状态之一更改为“COMPLETED”或“FAILED”时将其填充为“PROCESSING”状态,如图所示下面:
    • Job #1(SCOTT) 完成,下一个 IN_QUEUE 填充到 PROCESSING: ROW_ID |状态 |名称 ------------------- 1 |加工 |詹姆斯 2 |加工 |保罗 3 |加工 |迈克 4 |加工 |约翰 5 |加工 |萨拉 ------------------------------- 6 | IN_QUEUE |拉里 7 | IN_QUEUE |大卫 8 | IN_QUEUE |玛丽亚 9 | IN_QUEUE |泰德 10 |已完成 |斯科特
    • Job #3(MIKE) 这次完成,下一个 IN_QUEUE 填充到 PROCESSING: ROW_ID |状态 |名称 ------------------- 1 |加工 |詹姆斯 2 |加工 |保罗 3 |加工 |约翰 4 |加工 |萨拉 5 |加工 |拉里 ------------------- 6 | IN_QUEUE |大卫 7 | IN_QUEUE |玛丽亚 8 | IN_QUEUE | TED 9 |已完成 |迈克 10 |已完成 |斯科特
    猜你喜欢
    • 2017-06-17
    • 1970-01-01
    • 2010-10-28
    • 2012-07-31
    • 2011-09-02
    • 2018-08-23
    • 1970-01-01
    • 2013-10-12
    • 1970-01-01
    相关资源
    最近更新 更多