SSIS如何判定主包内任务执行成功并将执行日志写入SQL表
SSIS 任务执行状态判定与日志落地方案
对应实际业务场景
每日定时运行的SSIS主包,内部按流程依次执行多类数据处理任务,包括业务数据表加载、多维Cube构建加载等。运维侧的核心建设目标是满足日常追溯需求:
- 精准识别每个任务的真实完成节点,避免状态误判
- 自动采集每个任务的启动时间、结束时间、运行状态等明细信息
- 将采集到的信息统一存储到SQL表,直观展示每个执行步骤的运行情况
核心实现逻辑
1. 精准判定任务执行状态的方法
不要依赖包全局事件的错误回溯结果判定单任务状态,直接给每个待监控的任务单独绑定作用域内的事件捕获逻辑,从根源避免跨任务的状态串扰:
- 在任务作用域内捕获
OnPreExecute事件,事件触发即代表任务正式启动 - 在任务作用域内捕获
OnPostExecute事件,直接读取系统变量@ExecutionStatus的返回值判定最终状态:值为0代表执行成功,非0值对应执行失败 - 所有状态判定逻辑的作用域直接绑定到单个任务,不要挂在包级、序列容器层面,防止子任务状态被容器的整体执行结果覆盖
2. 执行信息持久化到SQL表的实现方式
- 提前在业务数据库创建统一的SSIS执行日志表,固定存储字段包含:主包运行批次号、任务名称、任务类型、启动时间、结束时间、运行状态、错误详情、执行耗时
- 在每个任务绑定的事件处理器中配置对应的SQL写入任务:
- 捕获到
OnPreExecute事件时,向日志表插入初始记录,写入主包批次号、任务基础信息、启动时间、初始状态为「执行中」 - 捕获到
OnPostExecute事件时,根据判定的任务最终状态,回写对应日志记录的结束时间、最终运行状态、捕获到的错误信息
- 捕获到
- 日常运维仅需查询这张统一日志表,即可快速掌握所有任务的当日运行情况,无需逐个回溯SSIS包的历史执行记录
内容的提问来源于stack exchange,提问作者Nikki
相关产品推荐
相关产品推荐

