在SQL Server中调试SSIS包


SQL Server 2005的新特性,SQL Server Integration Services (SSIS)增加了一种企业级数据抽取、转换和下载(ETL)工具,丰富了不断增长的SQL Server工具套件。SSIS取代了DTS,这只是在SQL Server的两个版本中。除了有点慢、操作起来很灵活外,DTS并没有在你遇到问题时提供任何简单的调试包的方法。在最近的SQL Server版本中有一些调试SSIS包的方法,这些方法可以帮你找到出现这些问题的根本原因。

  SSIS包嵌在SQL Server Business Intelligence Development Studio (BIDS)中,附带有一些SQL Server 2005客户机工具。事实上,BIDS只是Visual Studio的另一个版本。实际上如果你在同一台机器上安装Visual Studio作为BIDS,从这一点来看,你可以运行Visual Studio代替BIDS。那么,这里的调试是什么意思?它的意思就是在你开发SSIS包时你就可以用Visual Studio了。

  SSIS包调试断点(Breakpoint)

  设置断点的能力就是调试过程之一。SSIS可以让你设置两种不同的断点:一个在包、任务和存储器上,另一种就是在脚本对象里。设置好后,对SSIS包执行的操作就会在断点处停止,它可以让你观察处于暂停状态下的包。在断点的时,我们要记住这些断点只能在控制流上的项目上进行设置,而不能在数据流任务上进行设置。

  我们首先来看看在包、任务和容器上设置断点。

  要在包上设置断点,你就要进入控制流tab键,在包的面上单击右键,选择Edit Breakpoints。如果你想为任务或容器设置断点,就可以在你感兴趣的任务或容器上单击右键,再选择Edit Breakpoints。在这两种情况中,你都可以看到如图1所示的Set Breakpoints会话。

  

  图1:SSIS包的Set Breakpoint会话

  在该会话框中,你可以选择在这种条件下的Break Condition和Hit Count。在该实例中,当收到OnPreExecute事件时,我就要暂停数据流任务。注意,Hit Count有很多任务可供我们选择。在这个事例中,我们可以在任务收到OnPreExecute后再暂停,在任务运行之前OnPreExecute事件本来是触发的。你运行包的时候,OnPreExecute事件就停止,并突出启动断点任务,如图2所示:

  

  图2:“数据流任务”上的断点已经启动


  你可以看到,我们之前设置的断点已经启动,黄色的箭头指向活动的断点。这时,你就可以访问所有的本地变量、任意你曾配置的观察变量(watch variable)以及暂停之后表示包的状况的视图。

  除了能够在包、容器和任务上设置断点之外,你还可以在脚本任务里对它们进行配置。有两种方法实现:你可以在脚本设计器里打开脚本或者单击右键选择Breakpoint> Insert Breakpoint。或者,在编辑器左边的空白地方单击左键。和以前一样,遭遇断点之后SSIS包就会暂停。

使用断点还是有局限性的。如果“错误逻辑(error logic)”调用了多次,你就可以设置启用它们;或者你可以在你只能看见在出现问题的地方有什么包时你也可以对它们进行设置。从Integration Services里对包进行编辑并运行之后,断点就不存在了。所以在启用产品包时我们不要担心对它造成的影响。

  调试SSIS包的数据阅读器(data viewer)
 
  所以你现在可以在控制流上设置断点。但是如果你要解决数据流内部的故障问题该怎么办呢?这时数据阅读器就派得上用场了。数据阅读器(有四种选择)可以在任意数据流任务上进行配置。通过点击右键(任务之间的一个箭头)选择数据阅读器,你就可以看见Data Flow Path Editor的数据阅读器部分。然后点“Add”、选择查看Grid、Histogram、Scatter Plot或 Column图表。在图3中,你可以看到在conditional split的输出结果"Child Rows"上配置的Grid Data Viewer。

  

  图3:在conditional split的输出结果"Child Rows"上配置的Grid Data Viewer

  你选择的这种数据阅读很大程度上取决于你查看的数据类型和你所要知道的东西。我只想知道conditional split任务执行之后的数据。你运行包的时候,它就在数据阅读器这个地方暂停,显示你选择的数据格式。图4表示我运行包时的Grid Data Viewer。

 

  图4:在包执行过程中的Grid Data Viewer

  现在我可以检查数据,保证它们能够正常运行;或者我还可以查找有害数据,这些数据可能造成其他的问题。为了让这些包再次运行,我可以点击"Play"按钮或点击"Detach."。如果我选择"Play",SSIS包就会继续运行。下次运行同样的任务时,例如在进行loop操作时,我可以给目前的数据获取另一个数据阅读器。如果我选择"Detach",SSIS包就会在不触及数据阅读器的情况下继续运行。所以如果同一个任务再次在loop中运行的时候,我就不会获取新数据阅读器。

  SSIS提供了几种新的调试方法。其中两种最简单的方法就是用断点和数据阅读器。这两种方法都展现了SSIS包内部运转的一些信息。数据阅读器和断点只是去掉了SSIS包里调试选项表面的东西。通过简短的归纳,你可能对SSIS包内在的东西有了充分的理解,甚至还可以解决一些在包里可能遇到的问题。


« 
» 
快速导航

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3