it-swarm.com.de

Wie stellen Sie ein vorhandenes SSIS-Paket in SQL Server 2012 bereit?

Ich arbeite am SSIS-Paket. Ich fügte dem vorhandenen Ssis-Paket eine weitere Datenflusstask hinzu. Nachdem das Hinzufügen einer neuen Task abgeschlossen war, wurde das Paket neu erstellt, und es wurde ohne Fehler ausgeführt.

16
user3203331

Hintergrund

Das 2012 SSIS-Projektbereitstellungsmodell in Visual Studio enthält eine Datei für Projektparameter, Verbindungsmanager auf Projektebene, Pakete und alles, was Sie dem Projekt hinzugefügt haben. 

Im folgenden Bild sehen Sie, dass ich eine Lösung mit dem Namen Lifecycle habe. Diese Lösung hat ein Projekt mit dem Namen Lifecycle. Für das Lifecycle-Projekt wurden ein Projektmanager für Verbindungsmanager ERIADOR und zwei SSIS-Pakete definiert: Package00.dtsx und Package01.dtsx. 

Solution to project to file relationship

Wenn Sie ein Paket ausführen, erstellt/kompiliert Visual Studio im Hintergrund alle erforderlichen Projektelemente zu einem bereitstellbaren Quantum, das als ispac (ausgesprochenes Augen-Ess-Pack, nicht als Eispaket) bezeichnet wird. Dies befindet sich im bin\Development-Unterordner für Ihr Projekt.

Lifecycle.ispac

Lifecycle.ispac ist eine Zip-Datei mit folgendem Inhalt. 

Exploded ispac

Was bedeutet das alles? Der größte Unterschied ist, dass Sie nicht nur ein aktualisiertes Paket bereitstellen müssen, sondern auch das gesamte .ispac-System bereitstellen müssen. Ja, Sie müssen wirklich alles neu implementieren, obwohl Sie nur ein Paket geändert haben. So ist das Leben.

Wie stelle ich Pakete mit dem SSIS-Projektbereitstellungsmodell bereit?

Sie haben Host-Optionen zur Verfügung, aber bei den 3 Dingen, die Sie kennen müssen, handelt es sich um

  • wo ist mein ispac
  • auf welchem ​​Server werde ich bereitstellen?
  • in welchem ​​Ordner soll dieses Projekt liegen?

SSDT

Dies ist wahrscheinlich die am häufigsten verwendete Option. In den SQL Server-Datentools, SSDT, können Sie auf Configuration Manager-Ebene festlegen, auf welchen Server und in welche Ordner die Dinge bereitgestellt werden. Bei meinem Kunden habe ich 3 Konfigurationen: Dev, Stage, Production. Wenn Sie diese Werte definiert haben, werden sie in der .dtproj-Datei gespeichert, und Sie können mit der rechten Maustaste klicken und sie von Visual Studio aus nach Herzenslust bereitstellen.

enter image description here

ISDeploymentWizard - GUI-Variante

SSDT baut den Aufruf der ISDeploymentWizard.exe auf, die aus verschiedenen Gründen in 32- und 64-Bit-Versionen verfügbar ist.

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

Eine .ispac-Erweiterung ist mit dem ISDeploymentWizard verknüpft, also doppelklicken und los geht's. Der erste Bildschirm ist im Vergleich zur Verwendung der SSDT-Benutzeroberfläche neu, danach müssen jedoch die gleichen Klicks bereitgestellt werden.

ISDeploymentWizard - Befehlszeilenvariante

Mit der 2012-Version, die mit dem Paketbereitstellungsmodell gelobt wurde, hatten sie Recht, dass die Manifestdatei automatisiert bereitgestellt werden kann. Ich hatte eine Workaround , aber es sollte eine Standard-Sache sein.

Sehen Sie sich also die Registerkarte "Überprüfen" in der SSDT- oder GUI-Bereitstellung genau an. Ist das nicht eine Schönheit?

Silent install option

Mit der gleichen ausführbaren Datei, ISDeploymentWizard, können wir sowohl einen beaufsichtigten als auch einen unbeaufsichtigten Installer für unsere .ispac (s) haben. Markieren Sie dort die zweite Zeile, kopieren Sie Einfügen, und Sie können jetzt eine kontinuierliche Integration durchführen!

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

Sie können einen ispac auf SQL Server über SQL Server Management Studio, SSMS oder über die Befehlszeile sqlcmd.exe bereitstellen. Während SQLCMD nicht unbedingt erforderlich ist, vereinfacht es das Skript.

Sie müssen must ein Windows-Konto verwenden, um diesen Vorgang auszuführen. Andernfalls wird die folgende Fehlermeldung angezeigt.

Der Vorgang kann nicht von einem Konto gestartet werden, das die SQL Server-Authentifizierung verwendet. Starten Sie den Vorgang mit einem Konto, das die Windows-Authentifizierung verwendet.

Darüber hinaus benötigen Sie die Möglichkeit, Massenvorgänge (zur Serialisierung von .ispac) und ssis_admin/sa-Berechtigungen für die SSISDB-Datenbank durchzuführen.

Hier verwenden wir das OPENROWSET mit der BULK-Option, um den ispac in eine Varbinary-Variable zu lesen. Wir erstellen einen Ordner über catalog.create_folder , falls noch nicht vorhanden, und setzen das Projekt dann tatsächlich mit catalog.deploy_project aus. Sobald dies geschehen ist, möchte ich die Tabelle mit den Betriebsmeldungen überprüfen, um zu überprüfen, ob alles wie erwartet lief.

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;

Deine Mutter

Ihr Managed Object Model bietet eine .NET-Schnittstelle zum Bereitstellen von Paketen. Dies ist ein PowerShell-Ansatz zum Bereitstellen eines ispac zusammen mit dem Erstellen des Ordners, da dies eine Option ist, die der ISDeploymentWizard nicht unterstützt.

[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

Hier ist ein Update zum Bereitstellen eines einzelnen Pakets in SSIS 2016 (hoffentlich kann dies nützlich sein).

Mit der Veröffentlichung von SQL Server 2016 und SSDT 2015 gehört das Problem der Bereitstellung einzelner Pakete der Vergangenheit an. Es gibt die neue Option Deploy Package (VS 2015), mit der einzelne Pakete innerhalb eines Projektbereitstellungsmodells bereitgestellt werden können

 Deploy Package option in VS 2015

Mit dieser neuen Funktion können Sie auch mehrere Pakete bereitstellen, indem Sie die Steuertaste (Strg) gedrückt halten und dann die Pakete auswählen, die Sie bereitstellen möchten.

Neben der Option zum Bereitstellen von Paketen in Visual Studio 2015 gibt es noch andere Möglichkeiten zum Bereitstellen von Paketen, z. B. das Starten der Anwendung ISDeploymentWizard oder die Ausführung von Command Line Deployment (diese Option ist erforderlich, wenn SSIS erstellt und bereitgestellt wird automatisiert oder als Teil des Continuous Integration-Prozesses verwaltet). Sie können mehr erfahren, indem Sie zu diesem Artikel navigieren: http://www.sqlshack.com/single-package-deployment-in-sql-server-integration-services-2016/

10
LarryB

Wenn Sie das Projektmodell in SSIS 2012 verwenden, müssen Sie das Projekt jedes Mal bereitstellen, wenn Sie Änderungen am Paket vornehmen. __ Sie können einfach Folgendes tun:

  • RECHTS Klicken Sie auf Projekt und Bereitstellen
1
Maverick