Sql-Server-2016

SSIS 容錯數據連接

  • December 26, 2018

我覺得可能離這個太近了。我繼承了一個SSIS package有兩個數據連接對象的。在OLE DB連接(執行工作)和ADO.NET連接(到不同的伺服器)以進行日誌記錄。

ADO.NET 連接遠端的伺服器可能不穩定,我需要使日誌記錄容錯。日誌記錄任務已設置為在失敗時不讓包失敗,也不讓父級失敗。然而,這個過程並沒有那麼遠。包失敗是因為連接失敗,而不是因為任務失敗。

這個包的邏輯路徑是Log Start > Do Stuff > Log Completion。在這個特定的範例中,Log Start 成功,Do Stuff 也是如此。日誌完成失敗,因為伺服器突然不可用。

SSIS 報告級別的錯誤消息是

日誌狀態完成錯誤:無法獲取連接“記錄 ADO NET”。連接可能未正確配置,或者您可能沒有正確的權限 pm 此連接。

歡迎所有建議。(謝謝​​和聖誕快樂)

不確定這是解決方案還是解決方法。不管怎樣,它解決了這個問題。我禁用了 SQL 任務並創建了一個腳本任務。連接發生在 try/catch 中。如果失敗,流程將轉到“無所事事”的 catch 塊。該軟體包將完成視為成功和進展繼續。包括新腳本任務的螢幕圖像及其程式碼。

在此處輸入圖像描述

#region Namespaces
using System;
using System.Data;
using System.Data.SqlClient;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;
#endregion

namespace ST_4ddaab95fb4d46ef9521d651f5227575
{
[Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute]
   public partial class ScriptMain : 
Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
   {
   public void Main()
   {
       Package pkg = new Package();
       Variables vars = null;
       VariableDispenser vd = pkg.VariableDispenser;
       SqlConnection LoggingConn;
       SqlCommand LoggingCommand;
       vd.GetVariables(ref vars);
       try
       {
           LoggingConn = (SqlConnection)Dts.Connections["Logging ADO NET"].AcquireConnection(null);
           LoggingCommand = new SqlCommand("[etl].[usp_LogPackageStatus]", LoggingConn);
           LoggingCommand.CommandType = CommandType.StoredProcedure;
           LoggingCommand.Parameters.AddWithValue("@PackageID", vars["System::PackageID"].Value.ToString());
           LoggingCommand.Parameters.AddWithValue("@PackageName", vars["System::PackageName"].Value.ToString());
           LoggingCommand.Parameters.AddWithValue("@MasterExecutionID", vars["$Package::MasterExecutionID"].Value.ToString());
           LoggingCommand.Parameters.AddWithValue("@ExecutionID", vars["System::ExecutionInstanceGUID"].Value.ToString());
           LoggingCommand.Parameters.AddWithValue("@Status", vars["User::Status"].Value.ToString());
           LoggingCommand.Parameters.AddWithValue("@StartTime", vars["User::StartTime"].Value.ToString());
           LoggingCommand.ExecuteNonQuery();
       }
       catch (Exception ex)
       {
           //Do nothing

           //For Debugging
           //MessageBox.Show(ex.Message);
       }
       Dts.TaskResult = (int)ScriptResults.Success;
   }

   #region ScriptResults declaration
   enum ScriptResults
   {
       Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success,
       Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
   };
   #endregion
}

}

引用自:https://dba.stackexchange.com/questions/225735