close

今天使用 SQL Server 2008 Management Studio 修改維護計畫時,老是執行失敗。檢查了錯誤訊息後,發現錯誤訊息只列出:The connection "???????" is not found. This error is thrown by Connections collection when the specific connection element is not found. 
這錯誤訊息看起來像是在讀取中文字元的 connction 名稱,發生錯誤。由進一步查證,發現遠端伺服器安裝的SQL Server 是英文版,而我的用戶端管理工具是中文版。第一時間猜測可能是不同的語言版本工具修改同一個維護計畫發生異常。一時間有股衝動讓我很想移除目前的中文版用戶端管理工具。

image 
最後決定將維護計畫所建立的 *.dtsx 封裝檔copy回用戶端的目錄,透過 SSIS 設計工具檢視封裝內容。但遇到的第一個問題是,我們沒有遠端登入的權限可登入此伺服器,只有 SQL Server 的帳號可登入。也沒有權限登入此伺服器的Integration Services,因 Integration Services 是使用 windows 驗證模式,而我只有SQL Server 的 sysadmin 帳號。所以最後決定使用 dtutil公用程式 來執行這個任務了。

使用dtutil工具前,先透過下列語法查一下封裝的實際位置。

select foldername,name from msdb.dbo.sysssispackagefolders f
join msdb.dbo.sysssispackages p
on f.folderid=p.folderid

開啟[ 命令提示字元工具 ],使用cd 指令將目錄移到c:\temp資料夾底下。再使用下列 dtutil  指令碼將遠端SQL Server上的封裝下載到目的端的檔案目錄中。 

dtutil /sql "封裝資料夾\封裝名稱" /SourceS [SQL主機位置] /S SourceU [SQL帳號] 
/SourceP [SQL密碼]  /cpoy file;[目的端的封裝名稱]

image 
上述的錯誤說明指出,需要指定的保護等級和密碼來加密載入的封裝,並將它儲存在 Path 所指定的位置中。所以這裡使用下列語法將 Path 的指令碼修改一下,成功的將檔案備份到我的硬碟中。
/En[crypt] {SQL | FILE}; Path;ProtectionLevel[;password]
完整的指令碼如下所示:

dtutil /sql "封裝資料夾\封裝名稱" /SourceS [SQL主機位置] /S SourceU [SQL帳號] 
/SourceP [SQL密碼]  /en file;[目的端的封裝名稱];加密層級;[指定的加密密碼]

image 

 

最後,證明最初的想法沒錯。中文版的管理工具維護英文版的維護計畫果然有點小問題。
使用封裝設計師開啟封裝後,在變數值發現了中文字串"本機伺服器連接"。但這裡原本應該是"local server connection",經由中文版本的managemet Studio 管理工具修改,則變成了本機伺服器連接了。
image

此外,備份資料庫工作(Back up Database task)封裝內的localConnectionForLoggin 屬性也被修改成中文了。

image

最後的解決方法則是:修改維護計畫時,另建一個新的連接管理員,將所有需要連線設定的都改為此新增的連接管理員就不會再出錯了。

arrow
arrow
    全站熱搜

    小草 發表在 痞客邦 留言(0) 人氣()