Как развернуть существующий пакет SSIS на SQL Server 2012?

Я работаю над пакетом SSIS. Я добавил еще одну задачу потока данных в существующий пакет ssis. После того, как вы добавили новую задачу, я перестроил пакет, из-за которого все ошибки были выполнены. Мне нужно развернуть его на сервере разработки?

Ответ 1

Фон

Модель развертывания проекта SSIS 2012 года в Visual Studio содержит файл для параметров проекта, менеджеров соединений на уровне проектов, пакетов и всего остального, что вы добавлен в проект.

На следующем рисунке вы увидите, что у меня есть решение с именем Lifecycle. Это решение имеет проект Lifecycle. Проект Lifecycle имеет диспетчер соединений уровня проекта ERIADOR и два пакета SSIS: Package00.dtsx и Package01.dtsx.

Solution to project to file relationship

Когда вы запускаете пакет, за кулисами Visual Studio сначала создаст/скомпилирует все необходимые элементы проекта в расширяемый квант, называемый ispac (произносится как eye-ess-pack, а не ice-pack). Это можно найти в подпапке bin\Development для вашего проекта.

Lifecycle.ispac

Lifecycle.ispac является почтовым индексом со следующим содержимым.

Exploded ispac

Что все это значит? Самое большое различие заключается в том, что вместо простого развертывания обновленного пакета вам потребуется развернуть весь .ispac. Да, вам действительно нужно перераспределить все, даже если вы только изменили один пакет. Такова жизнь.

Как развернуть пакеты с использованием модели развертывания проекта SSIS?

У вас есть параметры хоста, доступные вам, но в 3 вещах, которые вам нужно знать,

  • где мой ispac
  • какой сервер я использую для
  • какая папка делает этот проект для

SSDT

Вероятно, это будет ваш самый распространенный вариант в начале. В SQL Server Data Tools, SSDT, у вас есть возможность определить на уровне Configuration Manager то, на каком сервере и в каких папках развертывается. У моего клиента у меня есть 3 конфигурации: Dev, Stage, Production. После того, как вы определите эти значения, они будут сохранены в файле .dtproj, после чего вы сможете щелкнуть правой кнопкой мыши и развернуть его в своем сердце из визуальной студии.

enter image description here

ISDeploymentWizard - графический интерфейс

SSDT на самом деле просто вызывает вызов ISDeploymentWizard.exe, который по какой-то причине поставляется с 32 и 64 бит-версиями.

  • C:\Program Files\Microsoft SQL Server\110\DTS\Binn\ISDeploymentWizard.exe
  • C:\Program Files (x86)\Microsoft SQL Server\110\DTS\Binn\ISDeploymentWizard.exe

Расширение .ispac связано с ISDeploymentWizard, поэтому дважды щелкните и отпустите. Первый экран является новым по сравнению с использованием интерфейса SSDT, но после этого будет установлен один и тот же набор кликов.

ISDeploymentWizard - вкус командной строки

То, что они получили прямо с выпуском 2012 года, втянутым в модель развертывания пакета, состояло в том, что файл манифеста можно развернуть в автоматическом режиме. У меня было обходное решение, но оно должно было стать стандартной "вещью".

Поэтому внимательно изучите вкладку "Обзор" либо из развертывания SSDT, либо с помощью графического интерфейса. Разве это не красота?

Silent install option

Используя тот же исполняемый файл, ISDeploymentWizard, у нас может быть как установленный, так и необработанный установщик для нашего .ispac(s). Выделите вторую строчку, скопируйте пасту, и теперь вы можете иметь непрерывную интеграцию!

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

Вы можете развернуть ispac для SQL Server через SQL Server Management Studio, SSMS или через командную строку sqlcmd.exe. Хотя SQLCMD строго не требуется, он упрощает script.

Для выполнения этой операции вы должны использовать учетную запись Windows, иначе вы получите следующее сообщение об ошибке.

Операция не может быть запущена учетной записью, использующей проверку подлинности SQL Server. Запустите операцию с учетной записью, использующей проверку подлинности Windows.

Кроме того, вам понадобится возможность выполнять массовые операции (для сериализации .ispac) и ssis_admin/sa в базе данных SSISDB.

Здесь мы используем OPENROWSET с опцией BULK, чтобы прочитать ispac в переменной varbinary. Мы создаем папку catalog.create_folder, если она еще не существует, а затем фактически развертывает проект с catalog.deploy_project. После этого мне нравится проверять таблицу сообщений операций, чтобы проверить, что все прошло так, как ожидалось.

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;

Ваша MOM

Как и в вашей модели управляемого объектапредоставляет интерфейс .NET для развертывания пакетов. Это подход PowerShell для развертывания ispac вместе с созданием папки, поскольку это опция, которую ISDeploymentWizard не поддерживает.

[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

Ответ 2

Вот обновление по развертыванию одного пакета в SSIS 2016 (надеюсь, это может быть полезно).

С выпуском SQL Server 2016 и SSDT 2015 проблема развертывания одного пакета теперь ушла в прошлое. Существует новая опция Развернуть пакет (VS 2015), которая подходит для развертывания отдельных пакетов в модели развертывания проекта

Развернуть пакет в VS 2015

С помощью этой новой функции вы также можете развернуть несколько пакетов, щелкнув и удерживая клавишу управления (Ctrl), а затем выбрав пакеты, которые хотите развернуть.

Помимо опции "Развертывание пакета" в Visual Studio 2015, вы можете использовать другие возможности для развертывания пакетов, например, запуск приложения ISDeploymentWizard или выполнение развертывания командной строки (это один необходим, когда сбор и развертывание SSIS автоматизированы или управляются как часть процесса непрерывной интеграции). Вы можете узнать больше, перейдя к этой статье: http://www.sqlshack.com/single-package-deployment-in-sql-server-integration-services-2016/

Ответ 3

Если вы используете модель проекта в SSIS 2012, вам нужно развернуть проект каждый раз, когда вы вносите какие-либо изменения в пакет. Вы можете просто сделать это:

  • ПРАВО Щелкните по проекту и развертыванию