無法在 SQL Server Data Tools 2015 中部署 SSIS 包(目標伺服器名稱不允許輸入密碼)
我非常沮喪。我正在使用 SQL Server Data Tools 2015。我有一個集成服務項目,我想將此解決方案的單個包部署到 SQL Server 2012。我已將解決方案設置為將目標伺服器版本部署為 SQL 2012。我右鍵點擊在包上並選擇部署,但是在嚮導的選擇目標部分,它只允許我選擇一個伺服器名稱(而不是輸入任何憑據)。但是,我需要輸入特定的使用者名和密碼,因為我的域帳戶不是有效的登錄名。
我知道該嚮導最終將執行 isdeploymentwizard.exe,我也查看了它的參數,但沒有看到在伺服器名稱之外輸入任何連接資訊的方法。
如何使用使用者名和密碼而不是受信任的帳戶將此包部署到伺服器?我覺得我一定錯過了一些非常愚蠢的東西,因為即使在Google搜尋了一個小時後,我也找不到有類似問題的人。顯然,從 SSDT2015 部署到 SQL Server 的每個人都在使用受信任的帳戶。
編輯:在舊版本的 BIDS 中,您可以打開項目並選擇 File > Save Copy of .dtsx as 然後將其保存到 SQL 伺服器並使用憑據。但是在 SSDT 中,Save Copy of 選項僅允許您在本地保存包。
根據MSDN 論壇上的這篇文章,這根本不可能。您必須使用 Windows 身份驗證來部署包。但是,我發現如果點擊“轉換為包部署模型”,則“保存副本為”功能允許我將其保存到 SQL Server。但是,嘗試這樣做會給我以下消息:
在 SQL Server 中儲存或修改包需要 SSIS 執行時和數據庫版本相同。不支持在早期版本中儲存包。
SSDT 2015(儘管您可以將部署目標伺服器從 SQL 2016 更改為 SQL 2012 或 SQL 2014)似乎不允許您在未安裝 SSIS 執行時的情況下將包保存到 SQL 2012 或 SQL 2014 的 SQL Server。
dtutil引發了類似的錯誤,
C:\Program Files (x86)\Microsoft SQL Server\xxx\DTS\Binn
在 SSDT2015 安裝期間似乎安裝了 110、120 和 130 版本(在目錄中)。C:\Program Files (x86)\Microsoft SQL Server\110\DTS\Binn>dtutil /?
Microsoft (R) SQL Server SSIS Package Utilities Version 11.0.6020.0 for 32-bit 版權所有 (C) Microsoft Corporation 2012。保留所有權利。
此應用程序需要以下組件之一:Integration Services、Business Intelligence Studio、管理工具 - 基本或數據庫引擎,由 SQL Server 2012 Standard、Enterprise、Developer、Business Intelligence 或 Evaluation Edition 安裝。要安裝組件,請執行 SQL Server 安裝程序並選擇組件名稱。
在嘗試使用 SSDT 中的“另存為”功能時,從 SQL 2012 安裝程序安裝集成服務共享功能並沒有更改錯誤消息,但它確實允許我使用 dtutil 將包成功複製到伺服器。
TLDR;
- 將您的 Integration Services 項目轉換為使用包部署模型。
- 確保在本地為您將包部署到的 SQL 版本安裝了 Integration Services 共享功能。
- 使用 dtutil 將包複製到伺服器,即
C:\Program Files (x86)\Microsoft SQL Server\110\DTS\Binn>dtutil /FILE "C:\path\to\mypackage.dtsx" /DestServer SERVER\INSTANCE /DestUser MyUserName /DestPassword MyPassword /Encrypt SQL;PackageNameOnServer;2;PackagePassword
(您可以使用不同的加密級別或使用 /Copy 代替 /Encrypt,請參閱 dtutil 的文件)
你在這裡有很多事情要做。
包與項目部署模型
從 2012 版本開始,SSIS 項目可以在包部署模型和項目部署模型之間進行選擇。Project 允許您創建項目級工件 - 共享連接管理器、項目(和包)參數。新項目的預設部署模型是項目部署模型。
項目部署模型中的可部署程式碼單元是 .ispac 文件。您的 SSIS 包 + 項目參數 + 共享連接管理器 + 清單文件被壓縮到一個名為 MyProject.ispac 的文件中。ispac 文件部署到名為 SSISDB 的 SQL Server 目錄中。
包部署模型中的可部署程式碼單元是 SSIS 包本身。您可以將 .dtsx 文件部署到文件系統、SSIS 包儲存(也只是文件系統)或 SQL Server 實例。但是,SSIS 包將儲存在 MSDB(sysdtspackages90/sysssispackages)中
2016 版本使上述矩陣複雜化,因為我們現在可以將 .dtsx 包部署到 SSISDB 中。這是為了解決增量部署的故事。在幕後,它將生成一個 ispac,這就是部署的內容。但這僅適用於 2016 年的伺服器,它對您 2012 年的故事沒有幫助。
SSIS 版本
SSIS 包的版本與您正在使用的 SQL Server 和工具的版本相對應 (2005/2008/2008 R2/2012/2014/2016/v.Next)。軟體包僅*向前兼容,因此如果您錯誤地使用 2014 工具打開 2005 軟體包(或使用它部署)到 2005 實例,猜猜是什麼,您已經升級到目前版本並部署到不不會說那種方言。
2016 混淆了這個問題,因為該工具現在支持定位(項目 -> 屬性,配置屬性 -> 正常:TargetServerVersion)
部署
Ispac 是通過 isdeploymentwizard.exe 部署的,或者您可以在 TSQL 中進行部署。
-- You must be in SQLCMD mode -- Otherwise, modify the value of $(isPacPath) down below :setvar isPacPath "C:\sandbox\SSDTDeploy\TSQLDeploy\bin\Development\TSQLDeploy.ispac" DECLARE @folder_name nvarchar(128) = 'TSQLDeploy' , @folder_id bigint = NULL , @project_name nvarchar(128) = 'TSQLDeploy' , @project_stream varbinary(max) , @operation_id bigint = NULL; -- Read the zip (ispac) data in from the source file SELECT @project_stream = T.stream FROM ( SELECT * FROM OPENROWSET(BULK N'$(isPacPath)', SINGLE_BLOB ) AS B ) AS T (stream); -- Test for catalog existences IF NOT EXISTS ( SELECT CF.name FROM catalog.folders AS CF WHERE CF.name = @folder_name ) BEGIN -- Create the folder for our project EXECUTE [catalog].[create_folder] @folder_name , @folder_id OUTPUT; END -- Actually deploy the project EXECUTE [catalog].[deploy_project] @folder_name , @project_name , @project_stream , @operation_id OUTPUT;
這聽起來像您想要的,因為您可以是本地 SQL 使用者,但如果沒有記錯的話,如果您不是 Windows 使用者,上述函式會執行這種模擬操作,這會出錯。
此應用程序需要其中一個組件..
對於 2005/2008/2008 R2,您只能通過安裝介質獲得 SSDT,nee BIDS。這意味著您至少需要 Developer Edition 來建構您的 SSIS 包。從 2012 年開始,您可以直接從 MS 下載 SSDT 工具,而無需 SQL Server 許可證。但是,您僅獲得用於開發目的的許可。命令行工具不屬於開發工具,因此 dtutil 或 dtexec 都將無法通過許可檢查並報告上述情況(或類似的錯誤消息)。
正如您所指出的,解決方案是在需要“更多”而不僅僅是集成服務開發的機器上安裝集成服務服務。請注意,從許可的角度來看,這確實算作 SQL Server 的安裝,因此請確保您組織中處理許可的人員知道您在其中執行此操作的電腦,這樣您就不會在審核時遇到不愉快的意外。