首页 > 新闻系统 > 编程天地 > 文章正文

SSIS的检查点文件用法

2008-01-24 17:11:53 来源:IT专家网 作者:戴羽 点击:
SQL Server集成服务提供了一个在某种程度上自动从失败处重启处理的机制。这个机制是通过使用检查点文件来提供的。它帮助我们配置ETL解决方案在发生一个执行错误后的执行流。这篇文章解释了检查点文件和集成服务的一些有用任务的使用。

ction2.txt 文件。一旦这个文件可用了我们可以再次运行这个包,但是最大的问题是,它再次运行了第一个任务并再次加载了Transaction1.txt。因此,它可能导致数据(或业务)错误或冗余(如果转换/转移执行了)。这就是我们所希望避免的,也是我们要使用检查点文件的地方。如果包执行失败了,我们需要从失败处重启这个包,而不是从头开始。

  让我们来进行配置。如下所示地改变属性:

改变属性

  让我们再次运行这个包。确保源文件夹只包含了Transaction1.txt 文件。就像第一次一样,在第二个任务后包运行失败了。现在打开保存检查点文件的文件夹。你将看到创建了SamplePackageCheckpoint.xml。之所以创建了这个文件是由于我们将包中的SaveCheckpoints值设置为True。因为包执行失败所以没有删除这个文件。执行失败是由于加载Transaction2 文件的FailPackageOnFailure 属性设置为True了。
  
  将Tranaction2.txt 文件放置在源文件下并运行这个包。你将看到包从加载Tranaction2文件任务开始并继续执行:

包继续执行

  它从第三个任务开始,因为检查点文件指导它这么做,而包使用了这个检查点文件因为CheckpointUsage属性设置为IfExists了。如果你检查检查点文件所在的文件夹,那你现在不会看到这个文件了。它已经被删除了,因为包执行成功了。

  在for loop中的检查点用法

  使用for loop 的检查点设置是不同的。我尝试在一个ETL测试应用程序中执行它时遇到了这个问题。为了了解它,让我们试一些简单的代码。

  打开一个新的SSIS项目并添加一个For Loop 容器。创建一个叫做Year的变量并设置类型为Int32。设置Year的默认值为2004。假设这样一个场景:你需要从一个给定的年份做一些处理到当前的年份。所以给定的年份是变量Year 的值。添加一个脚本任务到显示了这个处理的For Loop 容器上。在ScriptTask的ReadOnlyVaribles中添加变量Year,并添加一个信息框,它显示了如下信息:

以下是引用片段:
  ' 
code 1
  MsgBox("Calculation done for year " & Dts.Variables("User::Year").Value.ToString() & ".")
  Dts.TaskResult = Dts.Results.Success

  现在如下所示地配置For Loop 容器。注意我们在InitExpression上不设置@Year 的值。初始值会从变量那里得到。

配置For Loop 容器

  完成了!运行这个包。你将看到2004、2005、2006和2007年的信息。现在让我们开始配置检查点文件。如下所示地设置属性:

设置属性
  
  因为我们需要在某一点上让包执行失败,所以改变脚本任务的代码,如下所示:

以下是引用片段:
  ' code 2
  If (CInt(Dts.Variables("User::Year").Value) = 2005) Then
  MsgBox("Error occurred while processing for " & Dts.Variables("User::Year").Value.ToString() & ".")
  Dts.TaskResult = Dts.Results.Failure
  Else
  MsgBox("Calculation done for year " & Dts.Variables("User::Year").Value.ToString() & ".")
  Dts.TaskResult = Dts.Results.Success
  End If

  再次运行这个包。这个包在执行2004年后失败。你将看到检查点文件已经创建了而且没有被删除。改变脚本任务的代码如它原来的样子(代码1)。因为

9 7 3 1 2 3 4 8 :

精彩推荐
焦点大图推荐
本类热门文章

论坛美图

本周软件下载排行

广告联系 | 版权说明 | 意见建议 | 加入收藏 | 军网站群 [ 军软件园 - 军软件商城 - 军软件园论坛 ]

电信与信息服务业务经营许可证:京ICP证050203