sql >> Databáze >  >> RDS >> Sqlserver

Jak nasadit stávající balíček SSIS na serveru SQL 2012?

Pozadí

Model nasazení projektu SSIS 2012 v sadě Visual Studio obsahuje soubor pro parametry projektu, správce připojení na úrovni projektu, balíčky a vše ostatní, co jste do projektu přidali.

Na následujícím obrázku můžete vidět, že mám Řešení s názvem Lifecycle. Toto řešení má projekt s názvem Lifecycle. Projekt životního cyklu má správce připojení na úrovni projektu ERIADOR a dva balíčky SSIS:Package00.dtsx a Package01.dtsx.

Když spustíte balíček, v zákulisí Visual Studio nejprve sestaví/zkompiluje všechny požadované projektové prvky do nasazovatelného kvanta zvaného ispac (vyslovováno eye-ess-pack, nikoli ice-pack). To najdete v bin\Development podsložku pro váš projekt.

Lifecycle.ispac je soubor zip s následujícím obsahem.

Co to všechno znamená? Největší rozdíl je v tom, že místo pouhého nasazení aktualizovaného balíčku budete muset nasadit celý .ispac. Ano, opravdu musíte přemístit vše, i když jste změnili pouze jeden balíček. Takový je život.

Jak nasadím balíčky pomocí modelu SSIS Project Deployment?

Máte k dispozici možnosti hostitele, ale 3 věci, které potřebujete vědět, jsou

  • kde je můj ispac
  • na jaký server nasazuji
  • do jaké složky se tento projekt vztahuje

SSDT

Na začátku to bude pravděpodobně vaše nejčastější možnost. V rámci SQL Server Data Tools, SSDT, máte možnost definovat na úrovni Configuration Manager, do kterého serveru a do jaké složky jsou věci nasazeny. U mého klienta mám 3 konfigurace:Dev, Stage, Production. Jakmile tyto hodnoty nadefinujete, uloží se do souboru .dtproj a poté můžete kliknout pravým tlačítkem a nasadit z vizuálního studia do svého obsahu.

ISDeploymentWizard – varianta GUI

SSDT ve skutečnosti pouze vytváří volání ISDeploymentWizard.exe, které z nějakého důvodu přichází v 32 a 64bitových variantách.

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

Rozšíření .ispac je přidruženo k ISDeploymentWizard, takže dvakrát klikněte a můžete jít. První obrazovka je nová ve srovnání s používáním rozhraní SSDT, ale poté bude nasazení stejné sady kliknutí.

ISDeploymentWizard – varianta příkazového řádku

S vydáním z roku 2012, které s modelem nasazování balíčků pohoršovalo, bylo to, že soubor manifestu lze nasadit automatizovaným způsobem. Měl jsem řešení ale měla to být standardní „věc“.

Podívejte se tedy pozorně na kartu Review z nasazení SSDT nebo GUI. Není to krása?

Pomocí stejného spustitelného souboru, ISDeploymentWizard, můžeme mít obsluhovaný i bezobslužný instalační program pro naše soubory .ispac. Zvýrazněte druhý řádek, zkopírujte a vložte a nyní můžete mít nepřetržitou integraci!

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 můžete nasadit na SQL Server prostřednictvím SQL Server Management Studio, SSMS nebo pomocí příkazového řádku sqlcmd.exe. Zatímco SQLCMD není striktně vyžadováno, zjednodušuje skript.

Musíte k provedení této operace použijte účet systému Windows, ale jinak se zobrazí následující chybová zpráva.

Dále budete potřebovat možnost provádět hromadné operace (pro serializaci .ispac) a práva ssis_admin/sa k databázi SSISDB.

Zde používáme OPENROWSET s možností BULK k načtení ispac do proměnné varbinary. Složku vytvoříme pomocí catalog.create_folder pokud již neexistuje, a poté skutečně nasaďte projekt pomocí catalog.deploy_project . Po dokončení bych rád zkontroloval tabulku provozních zpráv, abych si ověřil, že vše proběhlo podle očekávání.

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;

Vaše MÁMA

Stejně jako v případě vašeho Model spravovaného objektu poskytuje rozhraní .NET pro nasazení balíčků. Toto je přístup PowerShellu pro nasazení ispac spolu s vytvořením složky, protože to je možnost, kterou ISDeploymentWizard nepodporuje.

[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. Chyba syntaxe v příkazu SQL „WITH“ klíčové slovo vyvolá výjimku

  2. Přístup k WordPressu

  3. vytvořit dotaz, získat výsledky znovu vytvořit dotaz

  4. Vyhýbání se řazení pomocí zřetězení sloučení spojení