65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.09/5 (3投票s)

2018年2月25日

CPOL

4分钟阅读

viewsIcon

11538

downloadIcon

484

管理中断的批处理包重新运行的起始点。

引言

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 中保留一个表,其中包含列(包名称、上次执行、错误、间隔)。创建一个主包,它从该表中读取数据并根据其上次执行和间隔值执行包。还要执行上次执行中出错的包,等等,这就是用于管理重新运行起始点的自定义日志记录的想法。

自定义日志记录工作流程

 

 

Start Task

 

 

 

 

 

End Task

我们将要 

  1. 创建一个 SSIS 应用程序。
  2. 准备项目连接字符串。
  3. 设置起始和结束包任务参数。
  4. 准备自定义日志记录表。
  5. 准备自定义日志记录 SP。
  6. 测试自定义日志记录的重新运行。

创建一个 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

注意:示例项目包含必要的脚本。

测试自定义日志记录的重新运行

批处理成功运行

Batch run successfully

批处理运行失败

为了简化,在名为“Data Flow Error Task”的包 StgModels.dtsx 上创建一个自定义错误。您可以在示例项目中获得详细信息。默认情况下禁用失败情况,需要启用“Data Flow Error Task”并禁用“Load Models”

Failed configuration

 

 

 

 

 

 

 

 

 

 

Batch Failed

 

 

 

 

 

 

 

 

更多内容

© . All rights reserved.