Bối cảnh
Mô hình triển khai dự án SSIS 2012 trong Visual Studio chứa một tệp cho các tham số dự án, trình quản lý kết nối mức dự án, gói và bất kỳ thứ gì khác mà bạn đã thêm vào dự án.
Trong hình sau, bạn có thể thấy rằng tôi có một Giải pháp có tên Vòng đời. Giải pháp đó có một dự án tên là Lifecycle. Dự án Vòng đời có Trình quản lý Kết nối Cấp Dự án ERIADOR
được định nghĩa và hai gói SSIS:Package00.dtsx và Package01.dtsx.
Khi bạn chạy một gói, đằng sau hậu trường, Visual Studio trước tiên sẽ xây dựng / biên dịch tất cả các phần tử dự án cần thiết thành một lượng tử có thể triển khai được gọi là ispac (phát âm là eye-ess-pack, không phải ice-pack). Điều này sẽ được tìm thấy trong bin\Development
thư mục con cho dự án của bạn.
Lifecycle.ispac là một tệp zip chứa các nội dung sau.
Tất cả những điều này có nghĩa là gì? Sự khác biệt lớn nhất là thay vì chỉ triển khai một gói cập nhật, bạn sẽ cần triển khai toàn bộ .ispac. Có, bạn thực sự phải triển khai lại mọi thứ mặc dù bạn chỉ thay đổi một gói. Đó là cuộc sống.
Làm cách nào để triển khai các gói bằng mô hình Triển khai Dự án SSIS?
Bạn có các tùy chọn máy chủ lưu trữ có sẵn cho mình nhưng có 3 điều bạn cần biết là
- ispac của tôi ở đâu
- tôi đang triển khai máy chủ nào
- thư mục này thực hiện dự án nào
SSDT
Đây có lẽ sẽ là lựa chọn phổ biến nhất của bạn trong thời gian đầu. Trong Công cụ dữ liệu SQL Server, SSDT, bạn có khả năng xác định ở cấp Trình quản lý cấu hình máy chủ nào và thư mục nào được triển khai tới. Tại khách hàng của tôi, tôi có 3 cấu hình:Dev, Stage, Production. Sau khi bạn xác định các giá trị đó, chúng sẽ được lưu vào tệp .dtproj và sau đó bạn có thể nhấp chuột phải và triển khai nội dung trái tim của mình từ visual studio.
ISDeploymentWizard - GUI hương vị
SSDT thực sự chỉ đang xây dựng lệnh gọi tới ISDeploymentWizard.exe có phiên bản 32 và 64 bit vì một số lý do.
- C:\ Program Files \ Microsoft SQL Server \ 110 \ DTS \ Binn \ ISDeploymentWizard.exe
- C:\ Program Files (x86) \ Microsoft SQL Server \ 110 \ DTS \ Binn \ ISDeploymentWizard.exe
Một phần mở rộng .ispac được liên kết với ISDeploymentWizard, vì vậy hãy nhấp đúp và bạn thực hiện. Màn hình đầu tiên là mới so với việc sử dụng giao diện SSDT nhưng sau đó, nó sẽ là cùng một tập hợp các nhấp chuột để triển khai.
ISDeploymentWizard - hương vị dòng lệnh
Những gì họ đã làm đúng với bản phát hành năm 2012 đã hấp dẫn với mô hình triển khai gói là tệp kê khai có thể được triển khai theo cách tự động. Tôi có giải pháp thay thế nhưng lẽ ra nó phải là một "thứ" tiêu chuẩn.
Vì vậy, hãy xem xét cẩn thận tab Xem lại từ triển khai SSDT hoặc GUI. Đó không phải là một vẻ đẹp?
Sử dụng cùng một tệp thực thi, ISDeploymentWizard, chúng ta có thể có cả trình cài đặt tham dự và không giám sát cho (các) .ispac của chúng ta. Đánh dấu dòng thứ hai ở đó, sao chép dán và bây giờ bạn có thể tích hợp liên tục!
C:\Program Files\Microsoft SQL Server\110\DTS\Binn\ISDeploymentWizard.exe
/Silent
/SourcePath:"C:\Dropbox\presentations\SSISDB Lifecycle\Lifecycle\Lifecycle\bin\Development\Lifecycle.ispac"
/DestinationServer:"localhost\dev2012"
/DestinationPath:"/SSISDB/Folder/Lifecycle"
TSQL
Bạn có thể triển khai ispac tới SQL Server thông qua SQL Server Management Studio, SSMS hoặc thông qua dòng lệnh, sqlcmd.exe. Trong khi SQLCMD không bắt buộc nghiêm ngặt, nó đơn giản hóa tập lệnh.
Bạn phải sử dụng tài khoản windows để thực hiện thao tác này mặc dù nếu không bạn sẽ nhận được thông báo lỗi sau.
Hơn nữa, bạn sẽ cần khả năng thực hiện các hoạt động hàng loạt (để tuần tự hóa .ispac) và quyền ssis_admin / sa đối với cơ sở dữ liệu SSISDB.
Ở đây chúng tôi sử dụng OPENROWSET với tùy chọn BULK để đọc ispac thành một biến varbinary. Chúng tôi tạo một thư mục qua catalog.create_folder nếu nó chưa tồn tại và sau đó thực sự triển khai dự án với catalog.deploy_project . Sau khi hoàn tất, tôi muốn kiểm tra bảng thông báo hoạt động để xác minh mọi thứ diễn ra như mong đợi.
USE SSISDB
GO
-- You must be in SQLCMD mode
-- setvar isPacPath "C:\Dropbox\presentations\SSISDB Lifecycle\Lifecycle\Lifecycle\bin\Development\Lifecycle.ispac"
:setvar isPacPath "<isPacFilePath, nvarchar(4000), C:\Dropbox\presentations\SSISDB Lifecycle\Lifecycle\Lifecycle\bin\Development\Lifecycle.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;
-- Check to see if something went awry
SELECT
OM.*
FROM
catalog.operation_messages AS OM
WHERE
OM.operation_message_id = @operation_id;
MẸ của bạn
Như trong, Mô hình đối tượng được quản lý cung cấp giao diện .NET để triển khai các gói. Đây là một cách tiếp cận PowerShell để triển khai ispac cùng với việc tạo thư mục vì đó là một tùy chọn mà ISDeploymentWizard không hỗ trợ.
[Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Management.IntegrationServices") | Out-Null
#this allows the debug messages to be shown
$DebugPreference = "Continue"
# Retrieves a 2012 Integration Services CatalogFolder object
# Creates one if not found
Function Get-CatalogFolder
{
param
(
[string] $folderName
, [string] $folderDescription
, [string] $serverName = "localhost\dev2012"
)
$connectionString = [String]::Format("Data Source={0};Initial Catalog=msdb;Integrated Security=SSPI;", $serverName)
$connection = New-Object System.Data.SqlClient.SqlConnection($connectionString)
$integrationServices = New-Object Microsoft.SqlServer.Management.IntegrationServices.IntegrationServices($connection)
# The one, the only SSISDB catalog
$catalog = $integrationServices.Catalogs["SSISDB"]
$catalogFolder = $catalog.Folders[$folderName]
if (-not $catalogFolder)
{
Write-Debug([System.string]::Format("Creating folder {0}", $folderName))
$catalogFolder = New-Object Microsoft.SqlServer.Management.IntegrationServices.CatalogFolder($catalog, $folderName, $folderDescription)
$catalogFolder.Create()
}
return $catalogFolder
}
# Deploy an ispac file into the SSISDB catalog
Function Deploy-Project
{
param
(
[string] $projectPath
, [string] $projectName
, $catalogFolder
)
# test to ensure file exists
if (-not $projectPath -or -not (Test-Path $projectPath))
{
Write-Debug("File not found $projectPath")
return
}
Write-Debug($catalogFolder.Name)
Write-Debug("Deploying $projectPath")
# read the data into a byte array
[byte[]] $projectStream = [System.IO.File]::ReadAllBytes($projectPath)
# $ProjectName MUST match the value in the .ispac file
# else you will see
# Failed to deploy the project. Fix the problems and try again later.:The specified project name, test, does not match the project name in the deployment file.
$projectName = "Lifecycle"
$project = $catalogFolder.DeployProject($projectName, $projectStream)
}
$isPac = "C:\Dropbox\presentations\SSISDB Lifecycle\Lifecycle\Lifecycle\bin\Development\Lifecycle.ispac"
$folderName = "Folder"
$folderName = "SSIS2012"
$folderDescription = "I am a description"
$serverName = "localhost\dev2012"
$catalogFolder = Get-CatalogFolder $folderName $folderDescription $serverName
Deploy-Project $isPac $projectName $catalogFolder