我有一個簡單的SSIS包,我在VS2008中編輯。 基本上是做什麼是運行相同的SQL StoredProc,駐留在不同的SQL服務器,並將其輸出聚合到一個平面文件。 簡單地說,四個OLE DB數據源去'Union All'輸出。SSIS - 連接斷開時
如果其中一臺服務器出現故障,我怎樣才能讓軟件包跳過對該源進行驗證並因此進行處理,同時仍然聚合可能的內容?
我已經快速閱讀了ConnectionStrings正在一個文件中,使用腳本等,希望我可以避免這種情況。
我提前感謝您的任何幫助。
我有一個簡單的SSIS包,我在VS2008中編輯。 基本上是做什麼是運行相同的SQL StoredProc,駐留在不同的SQL服務器,並將其輸出聚合到一個平面文件。 簡單地說,四個OLE DB數據源去'Union All'輸出。SSIS - 連接斷開時
如果其中一臺服務器出現故障,我怎樣才能讓軟件包跳過對該源進行驗證並因此進行處理,同時仍然聚合可能的內容?
我已經快速閱讀了ConnectionStrings正在一個文件中,使用腳本等,希望我可以避免這種情況。
我提前感謝您的任何幫助。
這裏有幾個可能的解決方案:
如果數據庫本身是不可用的,但服務器可用,那麼你可以更改默認的連接的東西,總是可以像一個系統數據庫(主, msdb,tempdb,模型)。在查詢日誌發佈的數據庫時,我使用這種技術,因爲它們每天每個小時定期處於「恢復」狀態。
如果有另一臺始終可用的服務器,則可以在兩者之間創建鏈接服務器,並使用始終可用的數據庫服務器解決錯誤處理問題。
你可以有獨立的數據流,每個數據流可以附加數據到文件而不是覆蓋內容。然後,您可以設置DelayValidation = True和MaximumErrorCount> 012。這將允許每個數據流成功,同時避免導致程序包故障錯誤。
使用腳本任務執行查詢。這將使您能夠最有效地控制如何處理數據源的異常。對不起,下面這個奇怪的樣例代碼,但代碼塊沒有格式化,好像它通常對我來說很好,所以我嘗試使它工作增加了大量的死空間。示例代碼的要點是向您展示如何查詢數據庫並捕獲錯誤。您可以隨時忽略錯誤併成功完成。
// Try-Catch block
try
{
bool fireAgain = true;
string SQLCommandText = "EXEC dbo.usp_some_stored_procedure_or_select_statement;";
SqlConnection SQLConnection = new SqlConnection("Data Source=SomeServerName;Initial Catalog=master;Integrated Security=SSPI;Application Name=SSIS-My Package Name;Connect Timeout=600");
SqlCommand SQLCommand = new SqlCommand(SQLCommandText, SQLConnection);
SQLCommand.CommandTimeout = 60 * 60;
SqlDataAdapter SQLDataAdapter = new SqlDataAdapter(SQLCommand);
DataTable dt = new DataTable();
SQLDataAdapter.Fill(dt);
SQLConnection.Close();
RowsRemaining = dt.Rows.Count;
Dts.Events.FireInformation(0, "DataTable Rows", RowsRemaining.ToString(), "", 0, ref fireAgain);
}
catch (SqlException e)
{
Dts.Events.FireError(0, "SqlException", e.Message, "", 0);
Error = 1;
}
// Return results.
if (Error == 0)
{
Dts.TaskResult = (int)ScriptResults.Success;
}
else
{
Dts.TaskResult = (int)ScriptResults.Failure;
}
謝謝您的回答,非常感謝。 我正在給腳本任務去。 我可能會根據服務器是否可用而返回true/false,然後根據可用性有條件地獲取並追加數據的數據流? 嗯..想法.. :) – 2010-08-02 01:06:08
我面臨的另一個問題是數據整理的文件具有日期時間戳的文件名。這是通過一個包級變量創建的。如果我使用不同的數據流,他們將不得不通過不同的文件連接通過變量引用它? – 2010-08-02 01:17:10
關於基於服務器可用性返回true/false,上面的代碼已經爲您提供了一個控制返回true/false的變量。如果您想檢查特定文本的錯誤消息以確定要執行的操作,則可以調整異常塊以實現此目標。 – 2010-08-10 01:12:35