我有7個需要按計劃刷新的物化視圖。Oracle dbms_job.submit:混合同步和異步
其中五個數據源是獨立的,可以異步重建。我想我用像湯姆描述here
PROCEDURE refresh_Independent_MViews AS
l_job BINARY_INTEGER;
BEGIN
dbms_job.submit (l_job, 'DBMS_MVIEW.REFRESH(list => ''IndependentMView1'', method => ''C'') ;') ;
dbms_job.submit (l_job, 'DBMS_MVIEW.REFRESH(list => ''IndependentMView2'', method => ''C'') ;') ;
dbms_job.submit (l_job, 'DBMS_MVIEW.REFRESH(list => ''IndependentMView3'', method => ''C'') ;') ;
dbms_job.submit (l_job, 'DBMS_MVIEW.REFRESH(list => ''IndependentMView4'', method => ''C'') ;') ;
dbms_job.submit (l_job, 'DBMS_MVIEW.REFRESH(list => ''IndependentMView5'', method => ''C'') ;') ;
END refresh_Independent_MViews;
其中兩個是依賴於一些前五MViews和需要等到那些已刷新。後兩者彼此獨立,可以同時運行。
PROCEDURE refresh_Dependent_MViews AS
l_job BINARY_INTEGER;
BEGIN
dbms_job.submit (l_job, 'DBMS_MVIEW.REFRESH(list => ''DependentMView1'', method => ''C'') ;') ;
dbms_job.submit (l_job, 'DBMS_MVIEW.REFRESH(list => ''DependentMView2'', method => ''C'') ;') ;
END refresh_Dependent_MViews;
問題:調用「refresh_Independent_MViews」旋轉起來異步工作做的工作後很快返回,但在個別異步作業都與他們的工作做,我不能告訴。
問題:有沒有辦法知道dbms_job.submit啓動的異步作業何時全部完成,因此我可以知道何時啓動「refresh_Dependent_MViews」過程?
請看看使用dbms_scheduler。 dbms_job不應該用於新開發,並且最好是「古怪」(例如,如果作業失敗,它將嘗試重新啓動自身以及其他陷阱)。在dbms_scheduler中,你想要的是一個作業鏈 – tbone
,並且問tom的鏈接是從2002年開始用於Oracle 8的。有更好的方式來做事情,因爲@tbone表示工作鏈接 – kevinsky
感謝@tbone和kevinsky的洞察力!我沒有意識到我正在實施Oracle 8級解決方案。在閱讀您的評論並看到Justin Cave的回答後,我開始研究如何使用鏈條。這是比我先做的更好的方法。如果有人感興趣,我會在單獨的帖子中分享我的最終解決方案。 – Deejers