Я работаю над пакетом SSIS. Я добавил еще одну задачу потока данных в существующий пакет ssis. После того, как вы добавили новую задачу, я перестроил пакет, из-за которого все ошибки были выполнены. Мне нужно развернуть его на сервере разработки?
Как развернуть существующий пакет SSIS на SQL Server 2012?
Ответ 1
Фон
Модель развертывания проекта SSIS 2012 года в Visual Studio содержит файл для параметров проекта, менеджеров соединений на уровне проектов, пакетов и всего остального, что вы добавлен в проект.
На следующем рисунке вы увидите, что у меня есть решение с именем Lifecycle. Это решение имеет проект Lifecycle. Проект Lifecycle имеет диспетчер соединений уровня проекта ERIADOR
и два пакета SSIS: Package00.dtsx и Package01.dtsx.
Когда вы запускаете пакет, за кулисами Visual Studio сначала создаст/скомпилирует все необходимые элементы проекта в расширяемый квант, называемый ispac (произносится как eye-ess-pack, а не ice-pack). Это можно найти в подпапке bin\Development
для вашего проекта.
Lifecycle.ispac является почтовым индексом со следующим содержимым.
Что все это значит? Самое большое различие заключается в том, что вместо простого развертывания обновленного пакета вам потребуется развернуть весь .ispac. Да, вам действительно нужно перераспределить все, даже если вы только изменили один пакет. Такова жизнь.
Как развернуть пакеты с использованием модели развертывания проекта SSIS?
У вас есть параметры хоста, доступные вам, но в 3 вещах, которые вам нужно знать,
- где мой ispac
- какой сервер я использую для
- какая папка делает этот проект для
SSDT
Вероятно, это будет ваш самый распространенный вариант в начале. В SQL Server Data Tools, SSDT, у вас есть возможность определить на уровне Configuration Manager то, на каком сервере и в каких папках развертывается. У моего клиента у меня есть 3 конфигурации: Dev, Stage, Production. После того, как вы определите эти значения, они будут сохранены в файле .dtproj, после чего вы сможете щелкнуть правой кнопкой мыши и развернуть его в своем сердце из визуальной студии.
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, либо с помощью графического интерфейса. Разве это не красота?
Используя тот же исполняемый файл, 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), которая подходит для развертывания отдельных пакетов в модели развертывания проекта
С помощью этой новой функции вы также можете развернуть несколько пакетов, щелкнув и удерживая клавишу управления (Ctrl), а затем выбрав пакеты, которые хотите развернуть.
Помимо опции "Развертывание пакета" в Visual Studio 2015, вы можете использовать другие возможности для развертывания пакетов, например, запуск приложения ISDeploymentWizard или выполнение развертывания командной строки (это один необходим, когда сбор и развертывание SSIS автоматизированы или управляются как часть процесса непрерывной интеграции). Вы можете узнать больше, перейдя к этой статье: http://www.sqlshack.com/single-package-deployment-in-sql-server-integration-services-2016/
Ответ 3
Если вы используете модель проекта в SSIS 2012, вам нужно развернуть проект каждый раз, когда вы вносите какие-либо изменения в пакет. Вы можете просто сделать это:
- ПРАВО Щелкните по проекту и развертыванию