Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Làm thế nào để triển khai Gói SSIS hiện có trong máy chủ sql 2012?

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 6 Truy vấn sự cố làm chậm cơ sở dữ liệu của bạn

  2. Cách di chuyển cơ sở dữ liệu SQL Server sang cơ sở dữ liệu SQL Azure

  3. Các mục nhập trùng lặp có dấu thời gian khác nhau

  4. Có thể khôi phục giao dịch sau khi được cam kết và kết nối bị đóng không?

  5. SQL - Xoay nhiều cột mà không có Aggregrates