sql >> Database teknologi >  >> RDS >> Sqlserver

Hvordan implementerer man en eksisterende SSIS-pakke i sql server 2012?

Baggrund

2012 SSIS Project Deployment model i Visual Studio indeholder en fil til projektparametre, forbindelsesadministratorer på projektniveau, pakker og alt andet, du har tilføjet til projektet.

På det følgende billede kan du se, at jeg har en løsning ved navn Lifecycle. Den løsning har et projekt ved navn Lifecycle. Livscyklusprojektet har en forbindelsesleder på projektniveau ERIADOR defineret og to SSIS-pakker:Package00.dtsx og Package01.dtsx.

Når du kører en pakke, vil Visual Studio bag kulisserne først bygge/kompilere alle de påkrævede projektelementer til et deployerbart kvante, kaldet en ispac (udtales eye-ess-pack, ikke ice-pack). Dette vil blive fundet i bin\Development undermappe til dit projekt.

Lifecycle.ispac er en zip-fil med følgende indhold.

Hvad betyder alt dette? Den største forskel er, at i stedet for blot at implementere en opdateret pakke, bliver du nødt til at implementere hele .ispac. Ja, du skal virkelig implementere alt, selvom du kun har ændret én pakke. Sådan er livet.

Hvordan implementerer jeg pakker ved hjælp af SSIS Project Deployment-modellen?

Du har en værtsmulighed tilgængelig for dig, men de 3 ting du skal vide er

  • hvor er min ispac
  • hvilken server installerer jeg til
  • hvilken mappe går dette projekt til

SSDT

Dette vil sandsynligvis være din mest almindelige mulighed i starten. Inden for SQL Server Data Tools, SSDT, har du muligheden for at definere på Configuration Manager-niveau, hvilken server og hvilken mappe ting er implementeret til. Hos min klient har jeg 3 konfigurationer:Dev, Stage, Production. Når du har defineret disse værdier, bliver de gemt i .dtproj-filen, og du kan derefter højreklikke og implementere til dit hjertes indhold fra Visual Studio.

ISDeploymentWizard - GUI-smag

SSDT bygger egentlig bare opkaldet til ISDeploymentWizard.exe, som kommer i 32 og 64 bit varianter af en eller anden grund.

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

En .ispac-udvidelse er knyttet til ISDeploymentWizard, så dobbeltklik og væk. Den første skærm er ny i forhold til at bruge SSDT-grænsefladen, men derefter vil det være det samme sæt klik at implementere.

ISDeploymentWizard - kommandolinjesmag

Det, de fik ret med 2012-udgivelsen, der sugede med pakkeimplementeringsmodellen, var, at manifestfilen kan implementeres på en automatiseret måde. Jeg havde en løsning men det burde have været en standard "ting".

Så se omhyggeligt på fanen Gennemgang fra enten SSDT- eller GUI-implementeringen. Er det ikke en skønhed?

Ved at bruge den samme eksekverbare, ISDeploymentWizard, kan vi have både et overvåget og uovervåget installationsprogram til vores .ispac(s). Fremhæv den anden linje der, copy paste og nu kan du have kontinuerlig integration!

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

Du kan implementere en ispac til SQL Server gennem SQL Server Management Studio, SSMS eller gennem kommandolinjen sqlcmd.exe. Mens SQLCMD er ikke strengt påkrævet, det forenkler scriptet.

Du skal brug en Windows-konto til at udføre denne handling, men ellers vil du modtage følgende fejlmeddelelse.

Desuden skal du have mulighed for at udføre masseoperationer (for at serialisere .ispac) og ssis_admin/sa-rettigheder til SSISDB-databasen.

Her bruger vi OPENROWSET med muligheden BULK til at læse ispac'en til en varbinær variabel. Vi opretter en mappe via catalog.create_folder hvis det ikke allerede eksisterer, og implementer derefter projektet med catalog.deploy_project . Når det er gjort, kan jeg godt lide at tjekke tabellen med driftsmeddelelser for at bekræfte, at tingene gik som forventet.

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;

Din MOR

Som i, din Managed Object Model giver en .NET-grænseflade til implementering af pakker. Dette er en PowerShell-tilgang til implementering af en ispac sammen med oprettelse af mappen, da det er en mulighed, ISDeploymentWizard ikke understøtter.

[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. Hvorfor virker MySql Connector.Net på min Windows-boks, men ikke på Mono?

  2. Oprettelse af et brugerdefineret SQL Server Docker-billede oven på det officielle billede

  3. Flere rækker til én kommasepareret værdi i SQL Server

  4. Hive-tabel returnerer tomt resultatsæt på alle forespørgsler