道歉,如果这已经得到回答,但我找不到能够解决问题的答案。我有一个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组件
当使用相同的DTEXEC命令执行另一个在脚本任务中没有Microsoft Objects引用的SSIS包时,它已成功运行。
使用以下命令执行脚本任务包时:
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。
这一定是一种非常常见的方法,所以我认为我必须错过一个相当明显的步骤。任何人都可以提供任何帮助吗?
谢谢,
伊恩
答案 0 :(得分:1)
如果其他人遇到此问题,则为后代更新。
在第一个例子中,我参考了存储过程
来替换了xp_cmdshell
- SSISDB.catalog.create_execution
- SSISDB.catalog.set_execution_parameter_value
- SSISDB.catalog.start_execution
然后我确保在SQL Server上正确设置了代理帐户(凭据和对象对权限的引用),以便它可以运行SSIS包。
SSIS包引用了Excel对象,因此我更新了Microsoft Excel的DCOM(MMC comexp.msc)设置,以确保代理帐户引用的帐户具有启动和激活权限以及访问权限。除此之外,还将身份设置为以交互式用户身份运行。
在开发环境中,我们安装了Visual Studio,SSDT和SSMS。测试环境只有SSMS。结果,丢失了许多组件,因此我们安装了SSDT和Windows SDK 8.1。我们还必须确保存在以下目录:
- C:\ Windows \ SysWOW64 \ config \ systemprofile \ Desktop
- C:\ Windows \ System32 \ config \ systemprofile \ Desktop
谢谢,
伊恩