当某OLE DB源离线时,如何让SSIS包继续执行?
解决SSIS包因单个OLE DB源离线导致整体终止的问题
方法1:拆分数据流并配置失败行为
- 将每个OLE DB源的处理逻辑拆分为独立的数据流任务,隔离单个源的故障影响范围。
- 选中目标数据流任务,在属性窗口修改
FailPackageOnFailure和FailParentOnFailure为False。这样即使某一数据流因源离线失败,包仍会继续执行其他正常任务。
方法2:启用延迟验证跳过预运行验证
- 连接管理器层面:选中离线对应的OLE DB连接管理器,设置
DelayValidation为True。 - 数据流组件层面:选中该连接对应的OLE DB源组件,同样将
DelayValidation设为True。 - 延迟验证会把连接和组件的验证推迟到运行阶段,避免包启动时因验证失败直接终止。
方法3:脚本任务预检测连接可用性
- 在数据流任务前添加脚本任务,编写代码测试每个OLE DB连接的有效性:
using System.Data.OleDb; public void Main() { bool connValid = true; string connStr = Dts.Connections["ea.prenlyn.net.ROWriter.RowReadOnly3P"].ConnectionString; try { using (OleDbConnection conn = new OleDbConnection(connStr)) { conn.Open(); } } catch { connValid = false; } Dts.Variables["IsEAConnValid"].Value = connValid; Dts.TaskResult = (int)ScriptResults.Success; }
- 给对应数据流任务添加优先约束,设置为仅当变量
IsEAConnValid为True时执行;若连接无效则跳过该数据流,继续执行其他任务。
方法4:动态启用/禁用组件(进阶)
- 创建包级变量标记各数据源的启用状态,结合预检测结果,通过表达式或脚本设置OLE DB源组件的
Disabled属性,动态控制是否加载该组件。
内容的提问来源于stack exchange,提问作者Ramon Hernandez
相关产品推荐
相关产品推荐

