【问题标题】:Continue SSIS package when One Connection string is not reachable当无法访问一个连接字符串时继续 SSIS 包
【发布时间】:2019-09-17 18:14:46
【问题描述】:

我有一个奇怪的情况。我有一个 SSIS 包,这个包从 SQL 服务器中的表中获取连接字符串,例如 (Data Source=XYZ;Initial Catalog=Mail;Provider=SQLNCLI11.1;Integrated Security=SSPI;Auto Translate=False;) 还有更多这样的连接字符串。
它使用此连接字符串将记录插入到所需的 SQL 服务器。但是,只要无法访问服务器,SSIS 包就会失败并停止执行。

我想知道如果特定服务器出现故障,我们如何继续 SSIS 包,以免影响其他服务器。任何帮助或评论表示赞赏。

【问题讨论】:

    标签: ssis


    【解决方案1】:

    我假设当前的包看起来像

    1. 执行 SQL 任务(获取连接字符串的主列表)

    2. ForEach(记录集)枚举器(将当前连接字符串分配给变量)

    3. 执行 SQL 任务(插入表)

    对于您找到的每条记录,您将其分配给一个变量,然后该变量用于驱动 OLE DB 连接管理器的 ConnectionString 属性。

    假设这近似于问题,您需要在#3 中添加一个前导步骤,以测试连接字符串/管理器的有效性。在 SSIS 中,这通常通过脚本任务来实现。除了处理脚本任务失败,我还创建了一个名为 IsConnectionValid 的 SSIS 变量,脚本任务的结果将根据连接状态将其设置为 True 或 False。

    假性的

    假设只读集合是我们的变量@[User::ConnectionString]

    假设读/写集合是我们的变量@[User::IsConnectionValid]

    假设我可以在不打开文本编辑器的情况下进行编码,但逻辑是合理的

    // re-initialize our state to false
    Dts.Variables["User::IsConnectionValid"].Value = false;
    // Access the current connection string
    string cs = Dts.Variables["User::ConnectionString"].Value.ToString();
    try
    {
        using (System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(cs))
        {
            conn.Open();
            // If the connection didn't blow chow, then it's good *right now*
            // The server could fall over in the next instant but this is the best we can do
            Dts.Variables["User::IsConnectionValid"].Value = true;
        }
    }
    catch(Exception ex)
    {
        // Swallow the error
        ;
    }
    

    既然我们已经运行了这个脚本任务并安全地评估了我们的连接,那么最后一步是在这个新的第 3 步(脚本任务)和旧的第 3 步(执行 SQL 任务)之间更改优先级约束。双击连接线,将其从当前默认的 OnSuccess 更改为 PrecedentAndConstraint(名称近似)

    约束只是@[User::IsConnectionValid],它仍然是一个AND条件。这意味着它只会在变量为 true 且前面的任务没有失败的情况下向 Execute SQL Task 发出触发信号。

    【讨论】:

    • 这就像一个魅力。我有同样的想法,但不知道如何实现它。你解释得很完美。真的很感激。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多