web-dev-qa-db-fra.com

Comment déployer un package SSIS existant dans SQL Server 2012?

Je travaille sur le package SSIS. J'ai ajouté une tâche de flux de données supplémentaire au package ssis existant. Après la finalisation de l'ajout d'une nouvelle tâche, j'ai reconstruit le package, sans aucune erreur.

16
user3203331

Contexte

Le modèle 2012 de déploiement de projet SSIS dans Visual Studio contient un fichier pour les paramètres de projet, les gestionnaires de connexions au niveau du projet, les packages et tout ce que vous avez ajouté au projet. 

Dans l'image suivante, vous pouvez voir que j'ai une solution appelée Lifecycle. Cette solution a un projet nommé Lifecycle. Le projet Lifecycle a un gestionnaire de connexions au niveau projet ERIADOR défini et deux packages SSIS: Package00.dtsx et Package01.dtsx. 

Solution to project to file relationship

Lorsque vous exécutez un package, Visual Studio commence par créer/compiler tous les éléments de projet requis dans un quantum déployable appelé ispac (prononcez eye-ess-pack, pas ice-pack). Cela se trouve dans le sous-dossier bin\Development de votre projet.

Lifecycle.ispac

Lifecycle.ispac est un fichier Zip contenant le contenu suivant. 

Exploded ispac

Qu'est-ce que tout cela signifie? La plus grande différence est qu'au lieu de déployer uniquement un package mis à jour, vous devez déployer l'intégralité du fichier .ispac. Oui, vous devez vraiment tout redéployer même si vous n'avez modifié qu'un seul package. C'est la vie.

Comment déployer des packages à l'aide du modèle de déploiement de projet SSIS?

Vous avez plusieurs options d’hôte à votre disposition, mais aux trois points à connaître:

  • où est mon ispac
  • sur quel serveur est-ce que je déploie
  • dans quel dossier ce projet

SSDT

Ce sera probablement votre option la plus commune au début. Dans SSDT, Outils de données SQL Server, vous avez la possibilité de définir le serveur et les dossiers sur lesquels les dossiers sont déployés au niveau de Configuration Manager. Chez mon client, j'ai 3 configurations: Dev, Stage, Production. Une fois que vous avez défini ces valeurs, elles sont enregistrées dans le fichier .dtproj. Vous pouvez ensuite cliquer avec le bouton droit de la souris et déployer le contenu de votre cœur à partir de visual studio.

enter image description here

ISDeploymentWizard - Modèle d'interface graphique

SSDT est en train de créer l'appel à ISDeploymentWizard.exe qui existe en versions 32 et 64 bits pour une raison quelconque.

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

Une extension .ispac est associée à ISDeploymentWizard alors double-cliquez dessus et c'est parti. Le premier écran est nouveau comparé à l’utilisation de l’interface SSDT, mais après cela, ce sera le même ensemble de clics à déployer.

ISDeploymentWizard - Modèle de ligne de commande

Ce qu’ils ont bien compris avec la version 2012, qui s’est fait avoir avec le modèle de déploiement de package, est que le fichier manifeste peut être déployé de manière automatisée. J'ai eu une solution de contournement mais cela aurait dû être une "chose" standard.

Examinez donc attentivement l'onglet Review du déploiement du SSDT ou de l'interface graphique. N'est-ce pas une beauté?

Silent install option

En utilisant le même exécutable, ISDeploymentWizard, nous pouvons avoir un programme d’installation avec ou sans assistance pour nos fichiers .ispac. Mettez en surbrillance la deuxième ligne, copiez-collez et vous pouvez maintenant avoir une intégration continue!

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

Vous pouvez déployer un ispac sur SQL Server via SQL Server Management Studio, SSMS ou via la ligne de commande sqlcmd.exe. Bien que SQLCMD ne soit pas strictement requis, cela simplifie le script.

Vous devez utiliser un compte Windows pour effectuer cette opération, sinon vous recevrez le message d'erreur suivant.

L'opération ne peut pas être démarrée par un compte utilisant l'authentification SQL Server. Démarrez l'opération avec un compte utilisant l'authentification Windows.

En outre, vous devez avoir la possibilité d'effectuer des opérations en bloc (pour sérialiser le fichier .ispac) et des droits sur ssis_admin/sa sur la base de données SSISDB.

Ici, nous utilisons OPENROWSET avec l'option BULK pour lire l'ispac dans une variable varbinary. Nous créons un dossier via catalog.create_folder s'il n'existe pas déjà, puis déployons le projet avec catalog.deploy_project . Une fois cela fait, j'aime bien consulter le tableau des messages d'opérations pour vérifier que les choses se sont déroulées comme prévu.

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;

Votre mère

Comme dans, votre Managed Object Model fournit une interface .NET pour le déploiement de packages. Il s'agit d'une approche PowerShell pour le déploiement d'un ispac et la création du dossier, car il s'agit d'une option non prise en charge par 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
60
billinkc

Voici une mise à jour sur le déploiement d'un seul package dans SSIS 2016 (espérons que cela pourra être utile).

Avec la publication de SQL Server 2016 et de SSDT 2015, la question du déploiement d'un seul package appartient désormais au passé. La nouvelle option Deploy Package (VS 2015) permet de déployer des packages individuels dans un modèle de déploiement de projet.

 Deploy Package option in VS 2015

Avec cette nouvelle fonctionnalité, vous pouvez également déployer plusieurs packages en cliquant sur la touche Contrôle (Ctrl) et en la maintenant enfoncée, puis en choisissant les packages à déployer.

Outre l'option Déployer le package dans Visual Studio 2015, vous pouvez également utiliser d'autres possibilités pour déployer des packages, telles que le lancement de l'application ISDeploymentWizard ou l'exécution de Command Line Deployment (nécessaire lors de la génération et du déploiement de SSIS). automatisé ou géré dans le cadre du processus d’intégration continue). Pour en savoir plus, consultez cet article: http://www.sqlshack.com/single-package-deployment-in-sql-server-integration-services-2016/

10
LarryB

Si vous utilisez Project Model dans SSIS 2012, vous devez déployer le projet chaque fois que vous apportez une modification au package .

  • DROIT Cliquez sur Project and Deploy
1
Maverick