2013-07-08 81 views
2

存在包含執行某些ETL作業的複雜Integration Services包的SQL代理作業。根據我們的數據來源,運行需要1到4小時。 工作目前每天運行,沒有問題。我現在想要做的是讓它在無限循環中運行,這意味着:完成後,重新開始。在無限循環中運行SQL代理作業

調度程序似乎沒有提供此選項。我發現在最後一步完成後可以使用steps界面進入第一步,但使用該方法會出現問題:如果我需要停止這項工作,那麼我需要以強有力的方式來完成。不過,我希望能夠在下一次迭代後停止工作。我怎樣才能做到這一點?

在此先感謝您的幫助!

+0

是否真的很難,如果你需要停止工作,編輯最後一步*不*返回到第1步,然後等待? –

+1

只需計劃每分鐘運行一次。如果它已經在運行,那麼這不會導致啓動第二個作業實例。 –

+2

只需安排高頻率的工作,例如。每10分鐘一班。如果作業已經運行,它將不會重新啓動。如果不運行將再次啓動。 –

回答

1

既然Martin和Remus都沒有給出答案,那麼這裏就是一個可以接受的問題。 最好的方法是簡單地將運行頻率設置爲非常低的值,如一分鐘。如果它已經在運行,則不會創建第二個實例。如果您想在當前運行後停止作業,只需禁用該計劃即可。

謝謝!

0

所以,你想,當你想停止工作,正在運行的迭代後,應立即停止 - 如果我正確地得到你。

你可以在這裏做一件事。

  1. 有一個配置表具有布爾值。
  2. 在工作中添加一個步驟。即迭代之前,檢查表中的值。如果這是真的,那麼只運行ETL包。
  3. 所以,每次它發現它的真實,它會遵循無限循環。
  4. 當你想停止工作時,將表中的值設置爲false。
  5. 當前工作迭代完成時,它會去查找表中的值,發現它錯誤,迭代將停止。
0

你總是可以設置「成功」行動來進行第一步,創建一個無限循環,但正如你所說,如果你想停止這項工作,你必須強制它。

除此之外,數據庫上的簡單控制表具有狀態和第二個作業,用於查詢此表並根據狀態觸發主要作業。在這裏可能的體系結構的跑車,只需選擇一個更適合您的跑車

1

您可以在數據庫中使用服務代理。您需要運行的工作可以通過排隊「開始」消息開始,當完成時它可以發送消息以重新開始。

要暫停進程,您可以停用隊列處理器。