基於 SSIS 包建構的 SQL Server 代理作業不起作用
我將一個作業從舊的 SQL Server 2005 轉移到升級的 SQL Server 2008 R2 實例,我編寫了所有內容,更改了數據源和其他細節……“這個作業應該自動將一些文件從階段位置複製到活動目錄”但它不像在舊伺服器中那樣做!所以我不確定我錯過了什麼。
從文件路徑位置可以看出,它似乎是基於 SSIS 包建構的。我正在嘗試使用 SQL Server 集成服務打開此文件,希望查看有關階段位置和活動目錄詳細資訊的詳細資訊,但我收到有關“此應用程序的註冊資訊需要更新…”的錯誤,雖然遠端伺服器中有一個 MS Visual Studio,它應該是最新的!
我對集成服務一無所知,我在程式碼中看到了一些我沒有更改的關於 CONNECTION RCSMTP 的內容,也許需要將其更改為這個新的伺服器 SMTP?
下面是這個名為
elfCopy
電子圖書館格式的作業的腳本USE [msdb] GO /****** Object: Job [eLFCopy] Script Date: 12/30/2013 10:51:54 ******/ BEGIN TRANSACTION DECLARE @ReturnCode INT SELECT @ReturnCode = 0 /****** Object: JobCategory [[Uncategorized (Local)]]] Script Date: 12/30/2013 10:51:54 ******/ IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'[Uncategorized (Local)]' AND category_class=1) BEGIN EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'[Uncategorized (Local)]' IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback END DECLARE @jobId BINARY(16) EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N'eLFCopy', @enabled=1, @notify_level_eventlog=0, @notify_level_email=0, @notify_level_netsend=0, @notify_level_page=0, @delete_level=0, @description=N'This job copies eLF files & folders from stage locations to active directories.', @category_name=N'[Uncategorized (Local)]', @owner_login_name=N'BIO\WDDocManagement', @job_id = @jobId OUTPUT IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback /****** Object: Step [RunPackage] Script Date: 12/30/2013 10:51:54 ******/ EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'RunPackage', @step_id=1, @cmdexec_success_code=0, @on_success_action=1, @on_success_step_id=0, @on_fail_action=2, @on_fail_step_id=0, @retry_attempts=0, @retry_interval=0, @os_run_priority=0, @subsystem=N'SSIS', @command=N'/FILE "C:\SSIS\Packages\elfcopy.dtsx" /CONNECTION "BRORPORAP3.WDDocumentManagement";"Data Source=BRORPORAP3;Initial Catalog=WDDocumentManagement;Provider=SQLNCLI.1;Integrated Security=SSPI;Auto Translate=False;" /CONNECTION RCSMTP;"SmtpServer=brutmurex3.bio.ri.redcross.net;UseWindowsAuthentication=True;EnableSsl=False;" /MAXCONCURRENT " -1 " /CHECKPOINTING OFF /REPORTING E', @database_name=N'master', @flags=0 IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1 IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'WeeklySchedule', @enabled=1, @freq_type=8, @freq_interval=2, @freq_subday_type=1, @freq_subday_interval=0, @freq_relative_interval=0, @freq_recurrence_factor=1, @active_start_date=20110701, @active_end_date=99991231, @active_start_time=100, @active_end_time=235959, @schedule_uid=N'c406cae9-49b7-40dd-9438-cef44160f562' IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)' IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback COMMIT TRANSACTION GOTO EndSave QuitWithRollback: IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION EndSave: GO
–然後我從命令提示符執行以下命令,在@billinkc 和@Zane 的幫助下查看錯誤描述:
Microsoft Windows [版本 6.1.7601] 版權所有 (c) 2009 Microsoft Corporation。版權所有。 F:\>dtexec.exe /FILE "C:\SSIS\Packages\elfcopy.dtsx" /CONNECTION "BRORPORAP3.WDD ocumentManagement";"數據源=BRORPORAP3;初始目錄=WDDocumentManagement; 提供者=SQLNCLI.1;集成安全=SSPI;自動翻譯=假;" /CONNECTION R CSMTP;"SmtpServer=brutmurex3.bio.ri.redcross.net;UseWindowsAuthentication=True;? ?EnableSsl=False;" /MAXCONCURRENT " -1 " /CHECKPOINTING OFF /REPORTING E Microsoft (R) SQL Server 執行包實用程序 64 位版本 10.50.2500.0 版權所有 (C) Microsoft Corporation 2010。保留所有權利。 開始時間:上午 9 點 21 分 36 秒 錯誤:2014-01-02 09:22:38.54 程式碼:0x00000003 資料來源:PrepFiles PrepFiles 說明:從 XML 載入腳本任務時出現異常:Syste m.ApplicationException:VSTA 設計器載入失敗:“System.Runtime.Inter opServices.COMException (0x80004005):錯誤 HRESULT E_FAIL 已返回 可以呼叫 COM 組件。 在 VSTADTEProvider.Interop.VSTADTEProviderClass.GetDTE(字元串 bstrHostID,UIn t32 dw超時) 在 Microsoft.SqlServer.VSTAHosting.VSTAScriptingEngine.EnsureDTEObject()" 在 Microsoft.SqlServer.VSTAHosting.VSTAScriptingEngine.EnsureDTEObject() 在 Microsoft.SqlServer.VSTAHosting.VSTAScriptingEngine.InitNewScript(字元串 l anguageID,字元串項目名稱,字元串 projectext,布爾 bCleanupOnClose) 在 Microsoft.SqlServer.VSTAHosting.VSTAScriptingEngine.InitNewScript(字元串 l anguageID, 字元串項目名稱, 字元串 projectext) 在 Microsoft.SqlServer.Dts.Tasks.ScriptTask.ScriptTask.MigrateVSAScriptTask(X mlElement elemProj、IDTSInfoEvents 事件) 在 Microsoft.SqlServer.Dts.Tasks.ScriptTask.ScriptTask.LoadFromXML(XmlElement elemProj、IDTSInfoEvents 事件) 結束錯誤 錯誤:2014-01-02 09:23:40.42 程式碼:0x00000003 來源:SetCopyFail SetCopyFail 說明:從 XML 載入腳本任務時出現異常:Syste m.ApplicationException:VSTA 設計器載入失敗:“System.Runtime.Inter opServices.COMException (0x80004005):錯誤 HRESULT E_FAIL 已返回 可以呼叫 COM 組件。 在 VSTADTEProvider.Interop.VSTADTEProviderClass.GetDTE(字元串 bstrHostID,UIn t32 dw超時) 在 Microsoft.SqlServer.VSTAHosting.VSTAScriptingEngine.EnsureDTEObject()" 在 Microsoft.SqlServer.VSTAHosting.VSTAScriptingEngine.EnsureDTEObject() 在 Microsoft.SqlServer.VSTAHosting.VSTAScriptingEngine.InitNewScript(字元串 l anguageID,字元串項目名稱,字元串 projectext,布爾 bCleanupOnClose) 在 Microsoft.SqlServer.VSTAHosting.VSTAScriptingEngine.InitNewScript(字元串 l anguageID, 字元串項目名稱, 字元串 projectext) 在 Microsoft.SqlServer.Dts.Tasks.ScriptTask.ScriptTask.MigrateVSAScriptTask(X mlElement elemProj、IDTSInfoEvents 事件) 在 Microsoft.SqlServer.Dts.Tasks.ScriptTask.ScriptTask.LoadFromXML(XmlElement elemProj、IDTSInfoEvents 事件) 結束錯誤 錯誤:2014-01-02 09:23:50.24 程式碼:0x00000003 來源:SetPathFail SetPathFail 說明:從 XML 載入腳本任務時出現異常:Syste m.ApplicationException:VSTA 設計器載入失敗:“System.Runtime.Inter opServices.COMException (0x80004005):錯誤 HRESULT E_FAIL 已返回 可以呼叫 COM 組件。 在 VSTADTEProvider.Interop.VSTADTEProviderClass.GetDTE(字元串 bstrHostID,UIn t32 dw超時) 在 Microsoft.SqlServer.VSTAHosting.VSTAScriptingEngine.EnsureDTEObject()" 在 Microsoft.SqlServer.VSTAHosting.VSTAScriptingEngine.EnsureDTEObject() 在 Microsoft.SqlServer.VSTAHosting.VSTAScriptingEngine.InitNewScript(字元串 l anguageID,字元串項目名稱,字元串 projectext,布爾 bCleanupOnClose) 在 Microsoft.SqlServer.VSTAHosting.VSTAScriptingEngine.InitNewScript(字元串 l anguageID, 字元串項目名稱, 字元串 projectext) 在 Microsoft.SqlServer.Dts.Tasks.ScriptTask.ScriptTask.MigrateVSAScriptTask(X mlElement elemProj、IDTSInfoEvents 事件) 在 Microsoft.SqlServer.Dts.Tasks.ScriptTask.ScriptTask.LoadFromXML(XmlElement elemProj、IDTSInfoEvents 事件) 結束錯誤 錯誤:2014-01-02 09:23:50.29 程式碼:0x00000003 資料來源:PrepFiles 說明:腳本任務已損壞。 結束錯誤 錯誤:2014-01-02 09:23:50.29 程式碼:0xC0024107 資料來源:PrepFiles 描述:任務驗證期間出現錯誤。 結束錯誤 DTExec:包執行返回 DTSER_FAILURE (1)。 開始時間:上午 9 點 21 分 36 秒 完成時間:上午 9 點 23 分 50 秒 經過:134.161 秒 F:\>dtexec.exe /FILE "C:\SSIS\Packages\elfcopy.dtsx" /CONNECTION "BRORPORAP3.WDD ocumentManagement";"數據源=BRORPORAP3;初始目錄=WDDocumentManagement; 提供者=SQLNCLI.1;集成安全=SSPI;自動翻譯=假;" /CONNECTION R CSMTP;"SmtpServer=brutmurex3.bio.ri.redcross.net;UseWindowsAuthentication=True;? ?EnableSsl=False;" /MAXCONCURRENT " -1 " /CHECKPOINTING OFF /REPORTING E>MyOutpu t.txt F:\>dtexec.exe /FILE "C:\SSIS\Packages\elfcopy.dtsx" /CONNECTION "BRORPORAP3.WDD ocumentManagement";"數據源=BRORPORAP3;初始目錄=WDDocumentManagement; 提供者=SQLNCLI.1;集成安全=SSPI;自動翻譯=假;" /CONNECTION R CSMTP;"SmtpServer=brutmurex3.bio.ri.redcross.net;UseWindowsAuthentication=True;? ?EnableSsl=False;" /MAXCONCURRENT " -1 " /CHECKPOINTING OFF /REPORTING E >MyOutp ut.txt F:\>
我建議您按照以下步驟升級軟體包
如果升級後您仍然遇到問題,可能是您的軟體包使用了 64 位不可用的組件/驅動程序。在這種情況下,“最簡單”的解決方法是讓您的包使用 32 位執行時。
打開 de Job 屬性,然後編輯呼叫 SSIS 包的作業步驟。
轉到執行選項選項卡並選中“使用 32 位執行時”
它將開關 /X86 添加到 Dtexec 執行字元串中。(請注意,如果您直接從命令行執行,此開關將被忽略。)
但是,請注意,在這種情況下,您正在以 32 位執行該程序包,而沒有利用 64 位的優勢。這不應該是一個問題,只是要記住一些事情。
這個答案可能會遲到,但對於那些仍然對主題有疑問的人,只需在 Visual Studio 中的項目屬性上更改目標伺服器版本。再次部署它,然後它會工作。