Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Bagaimana cara menyebarkan Paket SSIS yang ada di sql server 2012?

Latar Belakang

Model Penerapan Proyek SSIS 2012 di Visual Studio berisi file untuk parameter proyek, manajer koneksi tingkat proyek, paket, dan apa pun yang telah Anda tambahkan ke proyek.

Pada gambar berikut, Anda dapat melihat bahwa saya memiliki Solusi bernama Lifecycle. Solusi itu memiliki proyek bernama Lifecycle. Proyek Siklus Hidup memiliki Manajer Koneksi Tingkat Proyek ERIADOR didefinisikan dan dua paket SSIS:Package00.dtsx dan Package01.dtsx.

Saat Anda menjalankan sebuah paket, di balik layar Visual Studio pertama-tama akan membangun/mengkompilasi semua elemen proyek yang diperlukan ke dalam kuantum yang dapat digunakan yang disebut ispac (diucapkan eye-ess-pack, bukan ice-pack). Ini akan ditemukan di bin\Development subfolder untuk proyek Anda.

Lifecycle.ispac adalah file zip dengan konten berikut.

Apa maksud semua ini? Perbedaan terbesarnya adalah bahwa alih-alih hanya men-deploy paket yang diperbarui, Anda harus men-deploy seluruh .ispac. Ya, Anda benar-benar harus memindahkan semuanya meskipun Anda hanya mengubah satu paket. Begitulah hidup.

Bagaimana cara menyebarkan paket menggunakan model Penerapan Proyek SSIS?

Anda memiliki opsi host yang tersedia untuk Anda, tetapi pada 3 hal yang perlu Anda ketahui adalah

  • di mana ispac saya
  • ke server mana saya menerapkan
  • untuk folder apa proyek ini

SSDT

Ini mungkin akan menjadi pilihan Anda yang paling umum di awal. Dalam Alat Data SQL Server, SSDT, Anda memiliki kemampuan untuk menentukan di tingkat Pengelola Konfigurasi server apa dan folder apa yang digunakan. Di klien saya, saya memiliki 3 konfigurasi:Dev, Stage, Production. Setelah Anda menentukan nilai tersebut, nilai tersebut akan disimpan ke dalam file .dtproj dan Anda dapat mengeklik kanan dan menerapkannya ke konten Anda dari visual studio.

ISDeploymentWizard - rasa GUI

SSDT benar-benar hanya membangun panggilan ke ISDeploymentWizard.exe yang datang dalam rasa 32 dan 64 bit untuk beberapa alasan.

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

Ekstensi .ispac dikaitkan dengan ISDeploymentWizard jadi klik dua kali dan pergilah. Layar pertama masih baru dibandingkan dengan menggunakan antarmuka SSDT, tetapi setelah itu, akan menjadi kumpulan klik yang sama untuk diterapkan.

ISDeploymentWizard - rasa baris perintah

Apa yang mereka lakukan dengan benar dengan rilis 2012 yang tersedot dengan model penyebaran paket adalah bahwa file manifes dapat digunakan secara otomatis. Saya memiliki solusi tapi itu seharusnya menjadi "benda" standar.

Jadi perhatikan baik-baik tab Review dari SSDT atau GUI deploy. Bukankah itu cantik?

Dengan menggunakan executable yang sama, ISDeploymentWizard, kita dapat memiliki installer yang hadir dan tanpa pengawasan untuk .ispac(s). Sorot baris kedua di sana, salin tempel dan sekarang Anda dapat memiliki integrasi berkelanjutan!

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

Anda dapat menyebarkan ispac ke SQL Server melalui SQL Server Management Studio, SSMS, atau melalui baris perintah, sqlcmd.exe. Sementara SQLCMD tidak sepenuhnya diperlukan, ini menyederhanakan skrip.

Anda harus gunakan akun windows untuk melakukan operasi ini meskipun jika tidak, Anda akan menerima pesan kesalahan berikut.

Selanjutnya, Anda memerlukan kemampuan untuk melakukan operasi massal (untuk membuat serial .ispac) dan hak ssis_admin/sa ke database SSISDB.

Di sini kita menggunakan OPENROWSET dengan opsi BULK untuk membaca ispac menjadi variabel varbinary. Kami membuat folder melalui catalog.create_folder jika belum ada, lalu terapkan proyek dengan catalog.deploy_project . Setelah selesai, saya ingin memeriksa tabel pesan operasi untuk memverifikasi semuanya berjalan seperti yang diharapkan.

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;

IBUmu

Seperti di, Model Objek Terkelola menyediakan antarmuka .NET untuk menyebarkan paket. Ini adalah pendekatan PowerShell untuk menyebarkan ispac bersama dengan membuat folder karena itu adalah opsi yang tidak didukung oleh 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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menggunakan variabel dalam pernyataan SEPERTI SQL

  2. Bagian waktu dari Bidang DateTime di SQL

  3. SQL Server:Klausa di mana dinamis

  4. Log Transaksi SQL Server, Bagian 1:Dasar-dasar Pencatatan

  5. sql server mengubah datetime menjadi zona waktu lain?