为了处理数据一致性,我们需要使用事务。
在有多个任务时,可能在执行过程中遇到报错而停止,如果希望在修复问题之后从上一次报错的地方继续执行(而不是从头开始运行所有的任务),这时候可以使用检查点。
一、使用事务
在本实验中,将添加2个执行T-SQL脚本的任务,并且故意使用第2个任务出错。
1. 添加任务
从“SSIS工具箱”将“执行SQL任务”图标拖到“控制流”窗格,并更名为“Update TaxRate”。
重复上一步骤,再添加一个“执行SQL任务”,并命名为“Update TaxType”。
编辑“Update TaxRate”。
编辑“Update TaxType”。
注意:运行这个脚本将导致报错。因为TaxType不是字符数据类型。
2. 调试
启用调试。第一个任务执行成功了,但第二个执行失败。
3. 使用事务
先为整个包建立事务。在“控制流”窗格的空白处单击右键,然后在右键菜单中选择“属性”。
将TransactionOption改为Required。表示如果父任务没有事务,那么容器将启动一个事务;如果父任务已经存在一个事务,那么容器将联接父任务的事务。
同时选择“Update TaxRate”和“Update TaxType”任务,在属性窗格中将TransactionOption修改为Supported。表示如果已经存在一个父事务,那么容器将联接该事务。(Not Supported则表示:即使存在父事务,容器也不会联接该事务。)
4. 调试
启用调试。
在“进度”窗格可以看到,第二个任务出错,结果导致两个任务都执行失败了。
二、使用检查点
1. 启用检查点
在“控制流”窗格的空白片单击右键,在右键菜单中选择“属性”。
由于事务会影响到所有的任务(如前面的实验,其中一个T-SQL脚本报错将导致2个任务都失败),所以先将事务的 TransactionOption 选项设为 Supported。
为检查点的CheckpointFileName选项设置一个文件名。将CheckpointUsage选项设为IfExists,表示如果存在CheckpointFilename选项指定的检查点文件,那么将使用该文件,并根据检查点重新启动包。将SaveCheckpoints选项设为True,表示要写入检查点文件。
2. 设置检查点
选择“Update TaxType”任务,将属性的FailPackageOnFailure设为True。
3. 启用调试
启用调试。第二个任务执行失败,信息都被保存在检查点文件中。
4. 修正脚本
修改第二个任务的脚本,给TaxType赋一个整数型的数值。
5. 再次调试
然后再启用调试。可见两个任务都执行成功。
打开“进度”窗格,可见这次调试是从上次的故障点继续往下执行(仅执行了第二个任务),第一个任务(上一次已经执行成功了)这次没有被执行。