2016-04-06 67 views
8

我們使用SQL Server 2008,並且有一項作業通常運行18個小時以上,並且有很多步驟。我已經搜索,似乎無法找到有關在執行期間修改作業時發生的情況的答案。以下是我在今天執行過程中對作業所做的更改的總結:如果在執行期間修改了SQL Server作業步驟,會發生什麼情況

1)我在'步驟2'位置插入了一個新步驟。這項工作已經在步驟15了,所以大概這個步驟在下一次作業運行之前不會啓動。

2)我刪除了最後一步(步驟#30)。

3)我將步驟29從'進入下一步'修改爲'退出報告成功'。

由於第15步在我今天進行修改時正在進行中,所以當我到達那一點時,對最終步驟所做的更改會生效,還是隻有在下次運行時纔會生效?

此外,我在#2位置插入新步驟會否影響當前運行的步驟順序?

+0

我會假設什麼都不會改變,直到下一次執行 - 作業已經加載到內存中並且正在運行。但是,我找不到任何文檔來支持這個想法 - 那麼爲什麼不嘗試並找出答案?例如,在執行期間向末尾添加一個步驟,輸出到未使用的表並查看是否有任何輸出? – Bridge

+0

如果作業在運行時執行,則不會發生任何作業。它不會破壞它或開始運行更改或任何事情。它只會在下一次運行時生效。 –

回答

8

我檢查完成後的工作,現在有一個確鑿的答案。在執行作業時修改作業作業會影響作業的當前執行。根據作業歷史記錄,SQL Server 2008處理作業的方式基於步驟編號一次一個步驟。這些步驟不會被加載到內存中,也不會以執行作業時其他任何方式進行存儲。

在我的具體情況下,我在#2位置添加了一個步驟。這會導致所有後續步驟編號在更新時增加1。當我更新它時,該作業正在運行步驟#15,因此步驟#15成爲更新後的#16。結果,當步驟#15完成時,再次執行相同的存儲過程(新步驟#16)。

另外,由於我刪除了作業的最後一步,因此在作業到達該步驟時不會執行該作業,因爲它不再作爲作業的一部分存在。

最好的做法是不要在執行期間更新作業。結果是可預測的,但除非您能承擔步驟運行兩次或根本不運行,否則不推薦。

0

我使用SQL Managment Studio 2012 Service Pack 3,答案是它取決於

  • 試想Job #1具有三個步驟。
  • Step 3觸發器Job #2
  • Job #1Step 2
  • 我不希望它運行「步驟3」,所以我的代碼更改爲SELECT 1並註釋掉線EXEC msdb.dbo.sp_start_job job #2
  • 作業#1完成Step 2並在Step 3上觸發Job #2

代碼更改沒有任何效果的原因是因爲作業已在運行,並且在腳本的本地副本上運行,所以後續代碼更改不會受到影響。

相關問題