Sql-Server

基於 SSIS 包建構的 SQL Server 代理作業不起作用

  • January 26, 2017

我將一個作業從舊的 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 中的項目屬性上更改目標伺服器版本。再次部署它,然後它會工作。

在此處輸入圖像描述

引用自:https://dba.stackexchange.com/questions/55832