2011-03-30 95 views
0

我正在使用SQL Server 2008.使用代理,我創建了一個作業並安排它每分鐘執行一次。 作業執行一個存儲過程,該過程將數據從表XXX移動到臨時表,然後最終到表YYY。在SQL Server中執行長時間運行的作業

作業的執行可能需要一分多鐘 - 因爲數據相當大。

  1. 即使第一個實例仍在運行,該作業的第二個實例是否會啓動?

  2. 如果是這樣,我是否應該將臨時表(status = 1)中的記錄標記爲表明這些記錄正在被前一個作業實例處理?

  3. 有沒有辦法讓我檢查一個工作實例當前正在運行,以便我不啓動第二個工作實例?

  4. 有沒有另一種解決方案,我不知道? (吞吐量很重要)

+1

是的,你可以只有一個實例,MS建議使用MSX/TSX來提供此功能 - http://connect.microsoft.com/SQLServer/feedback/details/633140/sql-server-agent-allow-多個單一作業實例您可以考慮在每個作業中都有該作業的副本,然後將此ID放入狀態列以標記數據繼續執行 – Silx 2011-03-30 09:43:32

回答

3

一次只能運行一個特定作業的一個實例。

因此,沒有必要採取任何特殊的預防措施,防止第一次停止前開始執行相同的作業。

+1

downvote的原因?這是絕對正確的。同一個作業不能與其自身同時執行。所以回答問題「。在這種情況下,新的執行工作開始了嗎?」沒有」。提出問題2是沒有意義的。 – 2014-01-13 15:59:23

+0

+1我以爲這是每個SCHEDULE一個實例,而不是JOB本身。但是,我剛剛測試過,並且每個作業都有一個實例,即使有重疊的計劃。因此,我也同意回答問題2 - 4是沒有意義的,因爲它們都是以#1爲「是」爲條件,事實並非如此。 – 2014-03-07 20:28:41