Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Bereitstellen von SSIS (SQL Server 2012) Projekt außerhalb des Netzwerks

Sie haben 3 Tools zum Bereitstellen von .ispac-Dateien im SSISDB-Katalog.

  1. ISDeploymentWizard.exe
  2. ManagedObjectModel
  3. TSQL

Sie verwenden den Assistenten bereits und er funktioniert aufgrund von Authentifizierungsproblemen nicht. Ich denke, selbst mit Ihrem MOM-Ansatz werden Sie immer noch auf Authentifizierungsprobleme stoßen. Damit bleibt der TSQL-Ansatz übrig, und da Sie eine gültige Anmeldung haben, funktioniert dies hoffentlich.

Der folgende Code serialisiert Ihre .ispac-Datei, erstellt den Bereitstellungsordner, falls er noch nicht vorhanden ist, stellt das Projekt bereit und weist dann einen Parameterwert zu.

In SSMS müssen Sie Ihren Modus in den SQLCMD-Modus ändern, der im Menü „Abfrage“ verfügbar ist. Drücken Sie danach Strg-Umschalt-M, um das Makro-Ding aufzurufen, und Sie können angeben, wo die .ispac-Datei gefunden werden kann.

USE SSISDB
GO

IF ('$(isPacPath)' = '$' + '(isPacPath)')
BEGIN
    THROW 50000, N'This script must be run in SQLCMD mode.', 1;
END
GO

-- You must be in SQLCMD mode
-- setvar isPacPath "C:\sandbox\SSDTDeploy\TSQLDeploy\bin\Development\TSQLDeploy.ispac"
:setvar isPacPath "<isPacFilePath, nvarchar(4000), C:\sandbox\SSDTDeploy\TSQLDeploy\bin\Development\TSQLDeploy.ispac>"



DECLARE
    @folder_name nvarchar(128) = 'TSQLDeploy'
,   @folder_id bigint = NULL
    -- this must match the ispac
,   @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;

-- Use this to set parameters
-- http://msdn.microsoft.com/en-us/library/ff878162.aspx
EXECUTE catalog.set_object_parameter_value 
    -- Use the value 20 to indicate a project parameter 
    -- or the value 30 to indicate a package parameter
    @object_type = 20 
,   @folder_name = @folder_name
,   @project_name = @project_name
,   @parameter_name = N'' -- nvarchar(128)
,   @parameter_value = NULL -- sql_variant
,   @object_name = N'' -- nvarchar(260)
,   @value_type = '' -- char(1)
--  Use the character V to indicate that parameter_value is a literal value 
-- that will be used by default if no other values are assigned prior 
-- to execution. 
-- Use the character R to indicate that parameter_value is a referenced value 
-- and has been set to the name of an environment variable. 
-- This argument is optional, the character V is used by default

Wenn Sie an der Konferenz SQL Pass Summit 2012 teilgenommen haben, habe ich dies in meinem Vortrag auf der 2012-Bereitstellungsmodell aber ich habe den Parameter nicht behandelt Teil. Ich glaube, dass der letzte Aufruf richtig ist, aber ich habe es nicht überprüft. Ich habe die Dokumentation für den Verfahrensaufruf verlinkt, damit Sie sie an Ihre spezifischen Bedürfnisse anpassen können.

Beispiel für PowerShell-Implementierung

Aktualisierung August 2013

Ich habe bei meinem jetzigen Kunden etwas gelernt. Wir haben unsere Laptops, die mit der Heimdomäne verbunden sind. Wir haben Konten im AD-Netzwerk des Kunden. Wann immer ich etwas in der Welt des Kunden „tun“ muss, muss ich meinen Prozess starten und ihn anweisen, meine „fremden“ Anmeldeinformationen vorzulegen. Möglich wird dies durch RunAs . Alternative Referenz

Ich habe eine Reihe von Batch-Dateien erstellt, die jeden Prozess starten, den ich benötige. Sie haben die Form von

runas /netonly:ForeignDomain\Doppelganger "C:\windows\system32\cmd.exe"

Ich habe eine für eine Eingabeaufforderung (oben), Visual Studio, SSMS, PowerShell, PowerShell ISE und einige andere spezielle Apps, die mit ihrer Domäne funktionieren müssen.

Mit dem Runas-Ansatz konnte ich Pakete mit allen oben genannten Methoden bereitstellen (sowie die Bereitstellung direkt von einer Visual Studio-Instanz, die mit fremden Anmeldeinformationen ausgeführt wird).