SQL Server Integration Services (SSIS) 包含一个非常有用的强大功能,称为检查点。您可以使用这些 SSIS 检查点从故障点重新启动包,而不是重新运行整个包(所有任务)。在加载大量数据或导入/导出图像时,SSIS 检查点非常有用。
本文通过一个示例展示了在 SSIS 包中配置检查点的步骤。对于本次检查点演示,我们将使用下面显示的数据。

SSIS 检查点示例
为了解释概念,请从工具箱中将“数据流任务”拖放到“控制流”中,并将其重命名为“SSIS 检查点”。

双击“SSIS 数据流任务”将打开数据流选项卡。将 OLE DB 源和 OLE DB 目标拖放到数据流区域。

双击 OLE-DB 源将打开源编辑器。从下面的屏幕截图中,您可以看到我们正在选择数据库中的 [Employee] 表。请参阅 OLE DB 源文章。

接下来,双击 OLE DB 目标以打开目标编辑器。目前,我们选择名为 [Checkpoint Example] 的现有表。请参阅 OLE-DB 目标文章。

单击“映射”选项卡以检查源列是否已准确映射到目标列。

单击“确定”关闭 OLE DB 目标编辑器。接下来,从工具栏拖动执行 SQL 任务并将其放到“控制流”区域。

现在,双击“执行 SQL 任务”将打开配置编辑器。我将选择“连接类型”为 OLE DB 连接,它连接到数据库。接下来,我们将使用“直接输入”作为 SQL 语句,因此单击“...”按钮。

请在此处编写您的自定义语句。从下面的屏幕截图中可以看到,我们正在编写一个 UPDATE 语句,将 ID 为 1 的员工的 EmpId 更新为 5,Education 更新为 Masters。
UPDATE [dbo].[SSIS Transactions Example]
SET [EmpID] = 5
,[Education] = 'Masters'
WHERE [EmpID] = 1

我运行 SSIS 检查点包。从下面的屏幕截图中,您可以看到执行 SQL 任务失败了,因为我们无法更新标识列(即 EmpID)。

但是我们成功地将 14 条记录插入了目标表。

您不知何故意识到自己的错误,并从 Update 语句中删除了 EmpID = 5。现在您可以看到数据流任务和执行 SQL 任务都已成功执行。

在这里,您正在重新运行整个包,对于这 14 条记录来说没问题,但对于大量数据来说成本很高。在这种情况下,您可以使用 SSIS 检查点从故障点(即执行 SQL 任务)开始执行包。
配置 SSIS 中的检查点
请选择您要设置检查点的包,然后转到其属性窗口查找“检查点”属性。
- CheckpointFileName(检查点文件名):请选择文件名。它将使用此文件保存与检查点相关的信息。通过单击此选项旁边的“...”按钮,它将打开文件系统以选择或创建新文件。
- CheckpointUsage(检查点用法):此属性有三个选项
- Never(从不):包将不使用检查点。
- IfExists(如果存在):包将查找检查点信息,如果存在任何信息,它将使用该信息。如果不存在,它将跳过使用。在大多数情况下,这是常用选项。
- Always(始终):包将始终查找检查点信息并使用该信息。如果它没有信息,它将抛出错误。
- SaveCheckpoint(保存检查点):选择是否要保存检查点。

我们在 D 驱动器中创建一个名为 SSIS Checkpoints 的新文件来保存检查点信息。

接下来,我们选择了最常见的 CheckpointUsage 属性,即 IfExists。

接下来,我们将 Save Checkpoints 选项从默认的 False 更改为 True。

在我们开始执行 SSIS 检查点包之前,我们必须更改“控制流”区域中所有任务的一个属性,称为 FailPackgaeOnFailure(失败时失败包)。首先,我选择数据流任务,并将属性值从 False 更改为 True。

接下来,选择执行 SQL 任务,并将属性值从 False 更改为 True。

现在我运行 SSIS 检查点包。

如您所见,它已创建一个包含检查点信息的파일。

接下来,我将更正任务中的查询。

我运行 SSIS 检查点包。从下面的屏幕截图中可以看到,执行直接从 Execute SQL Task(先前停止的位置)开始。

我将向您展示数据流区域。

最后,请打开 Management Studio 来检查结果。

评论已关闭。