SSIS 自定义日志记录,用于管理重新运行包的起点






4.09/5 (3投票s)
管理中断的批处理包重新运行的起始点。
引言
SQL Server Integration Services (SSIS) 包可能由于多种原因而失败。数据源可能离线,服务器可能宕机,网络可能不可用,或者可能出现无数其他问题。无论原因如何,最终结果是 SSIS 包停止运行。
背景
自定义日志记录工作流程,用于管理 SSIS 上中断批处理运行的起始点
快速示例想法
有一个主包,它将执行多个子包。主包具有以下事件处理程序 -(OnInformation、OnError、OnWarning、OnPostExecute)每个事件处理程序都有一个自定义代码(.net 自定义任务)来读取包名称、任务名称和消息,并将信息插入到 SQL SERVER 中的自定义日志表中。SQL Server Integration Services (SSIS) 包可能由于多种原因而失败。数据源可能离线,服务器可能宕机,网络可能不可用,或者可能出现无数其他问题。无论原因如何,最终结果是 SSIS 包停止运行。
为了简化,本文重点介绍如何在中断的包处重新运行。
这可能不是什么大问题;您只需在问题解决且一切恢复正常后重新启动包即可。事件处理程序和服务器登录可帮助您识别问题,但需要一个流程来帮助识别失败的批处理,以便管理重新运行的起始点。
一种有助于防止此类事件发生的方法是在 SSIS 包中实施自定义日志记录。要管理包运行,最好使用 SQL Server 表。在 SQL Server 中保留一个表,其中包含列(包名称、上次执行、错误、间隔)。创建一个主包,它从该表中读取数据并根据其上次执行和间隔值执行包。还要执行上次执行中出错的包,等等,这就是用于管理重新运行起始点的自定义日志记录的想法。
自定义日志记录工作流程
我们将要
- 创建一个 SSIS 应用程序。
- 准备项目连接字符串。
- 设置起始和结束包任务参数。
- 准备自定义日志记录表。
- 准备自定义日志记录 SP。
- 测试自定义日志记录的重新运行。
创建一个 SSIS 应用程序
我们创建一个名为“ETLBatchController”的 SSIS 项目,其中包含两个子包(StgEmp.dtsx、StgModels.dtsx)和一个主包(MBC.dtsx)。这是一个简单的项目,子包从暂存读取数据并存储在目标表中,主包用于批处理运行。
准备项目连接字符串
要连接到 SQL SERVER,项目需要一个连接字符串。带有必要的凭据
准备一个连接字符串。
设置起始和结束包任务参数
对于每个包,我们使用定义的参数集(package_name、current_extract_time、is_master_package、batch_number、source)设置起始和结束任务。每个参数都有其自身的必要性。
package_name => 用于获取正在运行的包标识。
current_extract_time => 用于获取上次包执行时间。设置一个公式以获取包的上次执行时间,公式在示例代码中。
is_master_package => 用于定义是主包还是子包,对于主包 (MBC.dtsx),其值为 1,对于子包 (StgEmp.dtsx, StgModels.dtsx),其值为 0。详细信息在示例项目中。
batch_number => 用于定义当前正在运行哪个批处理。
Source => 用于运行此批处理或子包的源。
准备自定义日志记录表
对于自定义日志记录,我们创建四个表(Batch_Event_Log、Batch_Statistics、Batch_Status、Package_Status)
Batch_Event_Log => 记录每个包执行的开始和结束活动。
Batch_Statistics => 记录每个包的开始和结束执行时间
Batch_Status => 记录批处理运行条件是成功执行还是失败。
Package_Status => 记录每个包执行的开始和结束时间,以及 LSET(上次执行时间)和 CET(当前执行时间)
注意:示例项目包含必要的脚本。
准备自定义日志记录 SP
每个包的 Start Task 和 End Task 分别执行 SP usp_StartPackage 和 usp_EndPackage
注意:示例项目包含必要的脚本。
测试自定义日志记录的重新运行
批处理成功运行
批处理运行失败
为了简化,在名为“Data Flow Error Task”的包 StgModels.dtsx 上创建一个自定义错误。您可以在示例项目中获得详细信息。默认情况下禁用失败情况,需要启用“Data Flow Error Task”并禁用“Load Models”