一次SSIS Package的调试经历
2015-05-26 13:33
357 查看
SSIS Package的调试有时是一个非常艰难的过程,由于SSIS 编译器给出的错误信息,可能并不完善,需要程序员根据错误信息抽丝拨茧,寻找错误的根源,进而解决问题。
第一部分:SSIS提供的调试工具
1,SSIS Package的 Control Flow 通过醒目的图标显示task的执行情况
在执行package的时候,如果一个Task上显示绿色的勾,表示task执行正常,如果显示的是红色的X,表示task执行异常。
通常SSIS Package调试的第一步就是寻找出错的Task,然后进入该task的data flow中查看报错的component。
在Task上显示错误信息,进入该task,发现Excel Source没有指定connection manager。
2,在package执行时,会出现一个progress显示执行的进度
如果错误,会在Progress中显示错误的信息
3,Data Viewer 查看从上游组件传递的数据
通过 点击蓝色的数据流线,Enable Data Viewer来查看数据。
4,设置breakpoint
选中Task,点击右键,选中Edit Breakpoint来设置断点,进行调试
5,package 事件,可以在事件中写入特殊的代码,当错误出现时,发送runtime的错误信息或将错误信息写入文档,方便程序员捕捉错误信息,提高debug的效率。
6,以上5种都是非常方便的调试工具,当然SSIS提供的辅助调试工具也有很多,各有用途,如果使用得当,将会使debug更有效率。
第二部分:示例
在使用scripte componet的一个package,出现一个错误信息 “object reference not set to an instance of an object”
说明在 scripte componet的C#代码中,并没有将对象设置为一个有效的实例。
从PreExecute函数中,可以看出,最有可能的错误原因是 cnManager 并没有获取到Package的Connection Manager
IDTSConnectionManager100 cnManager = Connections.Connection;
查看Script component的connection managers选项卡,已经设置了connection manager,那么错误的原因可能就是Name=Connection的Connection Manager的链接字符串有错误,导致无法连接到DB。
经验证,最终的结果跟推测一样,Connection Manager的链接字符串有错误,无法连接到DB,导致Script component执行失败。
第一部分:SSIS提供的调试工具
1,SSIS Package的 Control Flow 通过醒目的图标显示task的执行情况
在执行package的时候,如果一个Task上显示绿色的勾,表示task执行正常,如果显示的是红色的X,表示task执行异常。
通常SSIS Package调试的第一步就是寻找出错的Task,然后进入该task的data flow中查看报错的component。
在Task上显示错误信息,进入该task,发现Excel Source没有指定connection manager。
2,在package执行时,会出现一个progress显示执行的进度
如果错误,会在Progress中显示错误的信息
3,Data Viewer 查看从上游组件传递的数据
通过 点击蓝色的数据流线,Enable Data Viewer来查看数据。
4,设置breakpoint
选中Task,点击右键,选中Edit Breakpoint来设置断点,进行调试
5,package 事件,可以在事件中写入特殊的代码,当错误出现时,发送runtime的错误信息或将错误信息写入文档,方便程序员捕捉错误信息,提高debug的效率。
6,以上5种都是非常方便的调试工具,当然SSIS提供的辅助调试工具也有很多,各有用途,如果使用得当,将会使debug更有效率。
第二部分:示例
在使用scripte componet的一个package,出现一个错误信息 “object reference not set to an instance of an object”
说明在 scripte componet的C#代码中,并没有将对象设置为一个有效的实例。
DataTable dt; public override void PreExecute() { base.PreExecute(); IDTSConnectionManager100 cnManager = Connections.Connection; SqlConnection cnn = (SqlConnection)cnManager.AcquireConnection(null); SqlCommand cmd = cnn.CreateCommand(); cmd.CommandText = "select code,name from [dbo].[tbExcel]"; cmd.CommandType = CommandType.Text; cmd.CommandTimeout = 60000; dt = new DataTable("dt"); SqlDataAdapter sda = new SqlDataAdapter(cmd); sda.Fill(dt); }
从PreExecute函数中,可以看出,最有可能的错误原因是 cnManager 并没有获取到Package的Connection Manager
IDTSConnectionManager100 cnManager = Connections.Connection;
查看Script component的connection managers选项卡,已经设置了connection manager,那么错误的原因可能就是Name=Connection的Connection Manager的链接字符串有错误,导致无法连接到DB。
经验证,最终的结果跟推测一样,Connection Manager的链接字符串有错误,无法连接到DB,导致Script component执行失败。
相关文章推荐
- 一次SSIS Package的调试经历
- 一次SSIS Package的调试经历
- 一次SSIS Package的调试经历
- geotrellis使用(十二)再记录一次惨痛的伪BUG调试经历(数据导入以及读取瓦片)
- 一次痛苦的server调试经历
- 记一次I2S调试经历
- 一次神奇的SQL 错误调试经历
- OpcRcw.da.dll在x64模式下编译运行失败的一次调试经历
- 一次system hang的调试经历
- 一次Windows CE下调试内存泄露的经历
- 记一次PHP“Segmentation fault”调试经历
- 一次难忘的调试经历
- 一次LoadLibrary调用失败的调试经历
- 一次难忘的调试经历
- 一次emacs调试经历
- 记一次内存释放调试经历
- 一次调试无法打印日志问题经历
- 一次OSIV调试经历
- [软件测试_hw1]记一次调试bug的经历
- (CCNA书本上无法学到的东西)一次协助电信调试网络的经历