2014-03-05 36 views
0

我有一個SSIS包計劃在SQLAgent的每個X分鐘運行,如果滿足某些條件,它會執行大量的子包。我遇到的問題是,有時候某些子包需要比X分鐘運行更長的時間,這意味着除非所有子包完成,否則其他任何東西都不能運行。同時通過SQLAgent運行一個SSIS包的多個實例

這也意味着在運行期間,運行子包的條件可能已經到來並且即將到來,這意味着即使原始包完成時它們也不會運行。

有沒有辦法允許父包的併發實例運行,即使它以前正在運行?

ParentA計劃每10分鐘運行一次,在10:00啓動並滿足ChildA的標準。 ChildB需要在上午10點20分運行,它不會被滿足,因此它不會運行。 ChildA需要3個小時才能完成。

我需要一個新的ParentA實例在10:10啓動,然後在10:20再啓動。

如何在沒有2+ ParentA的情況下執行此操作,並且必須執行一些奇特的編碼操作,以便多個子包的多個實例不會被啓動?

感謝

回答

0

,使其一旦開始,不會結束,但有一系列的推出兒童套餐環路我會改變ParentA包。

在PackageA中,我會添加一個For循環容器,在那裏我會添加一個使用SQL WAITFOR命令的執行SQL任務來暫停10分鐘。然後我會運行ChildA包。

我會重複ChildB等模式等。因爲每個For循環容器是獨立的,他們將獨立循環。在循環之前,每個Loop容器都將等待它的Child包完成。

您需要添加一些機制來停止循環,例如,檢查系統時間,計算循環次數或類似的次數。該測試將在每個For Loop的EvalExpression屬性中進行。

+0

如果其中一個子包失敗,這不會導致問題嗎?整個循環不會失敗,然後父包將不得不重新啓動? – user1238918

+0

這似乎與您的原始問題是分開考慮的,但無論如何,如果發生錯誤,您可以配置SSIS包以繼續。您還可以配置啓動ParentA軟件包的作業,以便按照定期計劃運行,例如每10分鐘一班。直到ParentA由於任何原因終止,這將不會有任何效果。 –