2017-04-14 54 views
0

我的SSIS包的目的是從一臺集中式服務器獲取數據並將該數據組播到多臺服務器。當許多服務器中的一臺服務器出現故障時繼續執行SSIS任務

我有一箇中央服務器和5個目的地。

我截斷每個目標服務器的表,然後使用多播將每個表發送到所有目標。每個數據流對象都會更新每個服務器上的一個表。

我需要強調的是沒有for-loops。這個數據流是相對線性的。

這些目標服務器具有不可靠的互聯網連接,所以如果至少有一個目的地處於脫機狀態,則需要進行規劃。

我試圖禁用錯誤消息,因爲這裏

看到我試過設置最大錯誤計數爲較高的數字。

但是,每次我嘗試執行時,程序包都會完全停止並抱怨其中一個連接斷開(我故意打破該連接以進行測試)。儘管至少有一次連接不良,我如何強制繼續使用該軟件包?

謝謝

+0

禁用錯誤消息只會引起更多的麻煩。我不會建議你這樣做。 – rvphx

回答

0

將每個服務器放在1個數據流任務中。將一個數據流連接到另一個數據流時,而不是使用成功/失敗優先級約束,請將其設置爲完成。關於性能的一句話:這會減慢你的處理速度,因爲你再也不能組播了。但這也將確保如果其中一個失敗,其他人仍然可以繼續工作。

如果你仍然想使用多播方法,我會建議在腳本組件中編寫一個腳本。但是一旦遇到故障並且需要調試時,這將會陷入混亂。

0

而不是遍歷一個動態生成的連接循環(谷歌建議的許多解決方案),我減少了SSIS任務,一次只修改一個表,所以沒有更多的多播。

關鍵是在SQL服務器管理器的任務級別修改連接字符串。

我在服務器上的作業菜單下爲每個連接設置了一個任務。每個任務都有一個連接字符串。在將包設置爲SSIS包後,我在「數據源」下修改了此連接字符串。每個步驟都使用相同的SSIS包連接字符串作爲默認值(因爲我反覆創建使用同一個包的步驟),但是如果我更改了服務器地址,則一切正常。要清楚,我只是修改了「Data source = server.address.here;」和「初始目錄= TableToModifyOnThatSpecificServer;」。每個連接字符串中的所有其他信息都是相同的。有趣的是,「Password =#passwordGoesHere;」連接字符串的一部分將消失。它仍然在那裏,所以不要嚇壞了。

我知道這並不能解決SSIS級別的問題,但我希望在幾天前知道這個問題。祝好運的讀者在此尋找答案!