2017-02-24 70 views
2

如果已经得到解答,但是我一直无法找到解决我的问题的答案。我有一个脚本任务引用的SSIS包:执行与DTEXEC引用mso.dll的SSIS包

C:\ Program Files(x86)\ Common Files \ microsoft shared \ OFFICE16 \ MSO.DLL。

当通过SQL Server数据工具执行时,程序包按预期运行。

当部署到Integration Services目录并手动执行时,程序包按预期运行。然后启用xp_cmdshell。

使用该命令时执行包:

DECLARE @returncode INT; 
EXEC @returncode = xp_cmdshell 'DTEXEC /ISSERVER "\SSISD 
\test\test_DW_ETL\test_script_task.dtsx"' 

其与错误消息失败

无法创建ActiveX组件

当另一个SSIS包,其中没有按”在脚本任务中有Microsoft对象引用,使用相同的DTEXEC命令执行,它已成功运行。

当使用该命令执行的脚本的任务包:

DECLARE @returncode INT; EXEC @returncode = xp_cmdshell '@"C:\Program 
Files\Microsoft SQL Server\120\DTS\Binn\DTExec.exe" /ISSERVER "\SSISDB 
\test\test_DW_ETL\test_script_task.dtsx"' 

使用32位DTEXEC,所述包装也失败,错误消息

无法创建ActiveX组件

我试过更改SQL Server的帐户,使用本地系统,本地服务,网络服务,我自己的帐户和一个服务帐户 - 这似乎没有任何区别。

我怀疑DTEXEC无法访问mso.dll。

这必须是一个相当普遍的方法,所以我认为我必须缺少一个相当明显的步骤。任何人都可以提供协助吗?

感谢,

伊恩

+1

您是否犯了一个错字,或者您是否确实表示您认为'Files \ Microsoft SQL Server \ 120 \ DTS \ Binn \ DTExec.exe'包含32位DTExec?C:\ Program ?因为在我的机器上,它托管着64位DTExec(如你所期望的); 32位版本应该位于C:\ Program 文件(x86)\ Microsoft SQL Server \ 120 \ DTS \ Binn \ DTExec.exe' –

+0

感谢您强调错字。我需要更加关注我未来写的内容! –

回答

1

更新留给后人的,别人有这个问题,该事件的目的。

在第一实例中,我取代了xp_cmdshell的参考存储过程
- SSISDB.catalog.create_execution
- SSISDB.catalog.set_execution_parameter_value
- SSISDB.catalog.start_execution

余然后确保在SQL Server上正确设置了代理帐户(凭证和对象对权限的引用),以便它可以运行SSIS包。

SSIS包引用了Excel对象,所以我更新了DCOM(MMC comexp。msc)Microsoft Excel的设置,以确保由代理帐户引用的帐户具有启动和激活权限和访问权限。除此之外,身份被设置为以交互式用户身份运行。

在开发环境中,我们安装了Visual Studio,SSDT和SSMS。测试环境只有SSMS。结果,一些组件丢失了,所以我们安装了SSDT和Windows SDK 8.1。我们还必须确保下列目录存在:
- C:\ WINDOWS \ Syswow64资料\ CONFIG \ systemprofile \桌面
- C:\ WINDOWS \ system32 \设置\ systemprofile \桌面

感谢,

Ian