在64位Win2008 Server 系统上部署SSIS包遇到的问题及解决办法

时间:2022-06-01 19:50:31

前一段时间在项目中使用SSIS做数据抽取,在最后的包部署过程中遇到了一些问题

包部署服务器环境:Win2008 Server 64bit,SQL Server 2008 R2

包部署方式:文件方式  + 作业定时执行

在服务器上过程中包执行总是提示失败,通过查Sql SERVER 帮助文档得知开发环境使用的是Win7 32bit编译,如果在64 bit系统仍以32位版本运行需要在 Integration Services 包的“项目属性”——“调试”页上设置 Run64BitRuntime 属性的值为 False 。(在64位系统上默认为True),修改后,包在Integration Services上执行成功。将包以文件方式部署到服务器上,在部署后使用作业调度执行包时又报错。在SQL Server 帮助文档这样描述:

64 位计算机上的安装注意事项

在 64 位计算机上,Integration Services 将安装 64 位版本的 dtexec 实用工具 (dtexec.exe)。如果需要以 32 位模式运行某些包,则必须安装 32 位版本的 dtexec 实用工具。若要安装 32 位版本的 dtexec 实用工具,必须在安装过程中选择“客户端工具”或 Business Intelligence Development Studio。

默认情况下,同时安装了 64 位和 32 位版本的 Integration Services 命令提示实用工具的 64 位计算机将在命令提示符处运行 32 位版本。运行 32 位版本的原因是:在 PATH 环境变量中,32 位版本的目录路径显示在 64 位版本的目录路径之前。(通常,32 位目录路径是 <驱动器>:\Program Files(x86)\Microsoft SQL Server\100\DTS\Binn,而 64 位目录路径是 <驱动器>:\Program Files\Microsoft SQL Server\100\DTS\Binn。)

注意:

如果使用 SQL   Server 代理来运行此实用工具,则 SQL Server 代理会自动使用 64 位版本的实用工具。SQL Server 代理使用注册表(而非 PATH 环境变量)来找到此实用工具的正确可执行文件。

SQL Server作业在执行SSIS包时默认调用了64bit版本的dtexec工具,所以包执行失败。后来按照帮助文档的说明修改环境变量将32bit版本执行目录提到64bit前,但在使用SqlServer作业调用包时仍然执行失败。帮助文档中已经注明:“如果使用 SQL Server 代理来运行此实用工具,则 SQL Server 代理会自动使用 64 位版本的实用工具。SQL Server 代理使用注册表(而非 PATH 环境变量)来找到此实用工具的正确可执行文件。”为了不修改注册表那么麻烦,所以采用了Windows命令方式执行包,使用dtexec  /f “C:\包文件路径\包名”命令,将此命令保存为bat文件,在作业中将直接调用包文件改为调用已保存的bat文件,运行Sql Server代理,作业执行成功,包执行成功。感觉这是一种变通的做法,不知道官方还有什么方法。