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