2017-02-24 68 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