पृष्ठभूमि
2012 SSIS प्रोजेक्ट परिनियोजन मॉडल विजुअल स्टूडियो में प्रोजेक्ट पैरामीटर, प्रोजेक्ट लेवल कनेक्शन मैनेजर, पैकेज और प्रोजेक्ट में जो कुछ भी आपने जोड़ा है, उसके लिए एक फाइल है।
निम्न चित्र में, आप देख सकते हैं कि मेरे पास Lifecycle नाम का एक Solution है। उस समाधान में लाइफसाइकिल नाम की एक परियोजना है। जीवनचक्र परियोजना में एक परियोजना स्तरीय कनेक्शन प्रबंधक है ERIADOR
परिभाषित और दो SSIS पैकेज:Package00.dtsx और Package01.dtsx।
जब आप एक पैकेज चलाते हैं, तो परदे के पीछे विजुअल स्टूडियो पहले सभी आवश्यक प्रोजेक्ट तत्वों को एक आईपैक (उच्चारण आई-एस्स-पैक, आइस-पैक नहीं) नामक एक परिनियोजन योग्य क्वांटम में निर्मित/संकलित करेगा। यह bin\Development
. में मिलेगा आपके प्रोजेक्ट के लिए सबफ़ोल्डर।
Lifecycle.ispac निम्नलिखित सामग्री के साथ दायर एक ज़िप है।
यह सब क्या मतलब है? सबसे बड़ा अंतर यह है कि केवल एक अद्यतन पैकेज को परिनियोजित करने के बजाय, आपको संपूर्ण .ispac को परिनियोजित करने की आवश्यकता होगी। हां, आपको वास्तव में सब कुछ फिर से तैनात करना होगा, भले ही आपने केवल एक पैकेज बदला हो। ऐसा ही जीवन है।
मैं SSIS प्रोजेक्ट परिनियोजन मॉडल का उपयोग करके पैकेज कैसे परिनियोजित करूं?
आपके पास होस्ट विकल्प उपलब्ध हैं, लेकिन जिन 3 चीजों को आपको जानना होगा, वे हैं
- मेरा ispac कहाँ है
- मैं किस सर्वर पर तैनात हूं
- यह प्रोजेक्ट किस फ़ोल्डर में करता है
एसएसडीटी
शुरुआत में यह शायद आपका सबसे आम विकल्प होगा। SQL सर्वर डेटा टूल्स, एसएसडीटी के भीतर, आपके पास कॉन्फ़िगरेशन प्रबंधक स्तर पर परिभाषित करने की क्षमता है कि कौन सा सर्वर और कौन सी फ़ोल्डर चीजें तैनात हैं। मेरे क्लाइंट में, मेरे पास 3 कॉन्फ़िगरेशन हैं:देव, स्टेज, प्रोडक्शन। एक बार जब आप उन मानों को परिभाषित कर लेते हैं, तो वे .dtproj फ़ाइल में सहेजे जाते हैं और फिर आप विज़ुअल स्टूडियो से अपने दिल की सामग्री पर राइट क्लिक करके परिनियोजित कर सकते हैं।
ISDeploymentWizard - GUI फ्लेवर
SSDT वास्तव में ISDeploymentWizard.exe पर कॉल का निर्माण कर रहा है जो किसी कारण से 32 और 64 बिट फ्लेवर में आता है।
- C:\Program Files\Microsoft SQL Server\110\DTS\Binn\ISDeploymentWizard.exe
- C:\Program Files (x86)\Microsoft SQL Server\110\DTS\Binn\ISDeploymentWizard.exe
ISDeploymentWizard से एक .ispac एक्सटेंशन जुड़ा हुआ है, इसलिए डबल क्लिक करें और दूर जाएं। एसएसडीटी इंटरफ़ेस का उपयोग करने की तुलना में पहली स्क्रीन नई है, लेकिन उसके बाद, यह क्लिकों का एक ही सेट परिनियोजित करने के लिए होगा।
ISDeploymentWizard - कमांड लाइन फ्लेवर
2012 की रिलीज़ के साथ उन्हें जो मिला वह पैकेज परिनियोजन मॉडल के साथ चूसा गया था कि मेनिफेस्ट फ़ाइल को स्वचालित फैशन में तैनात किया जा सकता है। मेरे पास एक समाधान था लेकिन यह एक मानक "चीज" होनी चाहिए थी।
इसलिए SSDT या GUI परिनियोजन में से समीक्षा टैब को ध्यान से देखें। क्या यह सुंदरता नहीं है?
उसी निष्पादन योग्य, ISDeploymentWizard का उपयोग करके, हमारे पास हमारे .ispac(s) के लिए एक उपस्थित और अनुपस्थित इंस्टॉलर दोनों हो सकते हैं। वहां दूसरी पंक्ति को हाइलाइट करें, कॉपी पेस्ट करें और अब आप निरंतर एकीकरण कर सकते हैं!
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"
टीएसक्यूएल
आप SQL सर्वर प्रबंधन स्टूडियो, SSMS, या कमांड लाइन, sqlcmd.exe के माध्यम से SQL सर्वर पर एक ispac परिनियोजित कर सकते हैं। जबकि SQLCMD कड़ाई से आवश्यक नहीं है, यह स्क्रिप्ट को सरल करता है।
आपको जरूरी इस ऑपरेशन को करने के लिए विंडोज़ खाते का उपयोग करें, हालांकि अन्यथा आपको निम्न त्रुटि संदेश प्राप्त होगा।
इसके अलावा, आपको SSISDB डेटाबेस के बल्क ऑपरेशन (.ispac को क्रमबद्ध करने के लिए) और ssis_admin/sa अधिकारों को करने की क्षमता की आवश्यकता होगी।
यहाँ हम ispac को एक varbinary वेरिएबल में पढ़ने के लिए BULK विकल्प के साथ OPENROWSET का उपयोग करते हैं। हम catalog.create_folder के माध्यम से एक फ़ोल्डर बनाते हैं यदि यह पहले से मौजूद नहीं है और फिर वास्तव में प्रोजेक्ट को catalog.deploy_project के साथ परिनियोजित करें . एक बार हो जाने के बाद, मुझे यह सत्यापित करने के लिए संचालन संदेश तालिका की जांच करना पसंद है कि चीजें अपेक्षित थीं।
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;
आपकी माँ
जैसा कि, आपका प्रबंधित वस्तु मॉडल संकुल परिनियोजन के लिए एक .NET इंटरफ़ेस प्रदान करता है। यह फ़ोल्डर बनाने के साथ-साथ एक ispac को परिनियोजित करने के लिए एक PowerShell दृष्टिकोण है क्योंकि यह एक ऐसा विकल्प है जिसका 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