sql >> Databasteknik >  >> RDS >> Sqlserver

Distribuera SSIS (SQL Server 2012)-projekt utanför nätverket

Du har tre verktyg för att distribuera .ispac-filer i SSISDB-katalogen.

  1. ISDeploymentWizard.exe
  2. ManagedObjectModel
  3. TSQL

Du använder redan guiden och den fungerar inte på grund av autentiseringsproblem. Jag tror att även med din MOM-metod kommer du fortfarande att stöta på autentiseringsproblem. Det lämnar TSQL-metoden och eftersom du har en giltig inloggning kommer förhoppningsvis detta att fungera.

Följande kod kommer att serialisera din .ispac, skapa distributionsmappen om den inte redan finns, distribuera projektet och sedan tilldela ett parametervärde.

I SSMS måste du ändra ditt läge till SQLCMD-läge som är tillgängligt under menyn Fråga. Efter att ha gjort det, tryck Ctrl-Skift-M för att ta fram makro-saken och det låter dig ange var .ispac-filen kan hittas.

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

Om du deltog i SQL Pass Summit 2012-konferensen visade jag detta i mitt föredrag om 2012 implementeringsmodell men jag täckte inte parametern del. Jag tror att det sista samtalet är korrekt men jag har inte verifierat det. Jag har länkat till dokumentationen för procedursamtalet så att du kan skräddarsy det efter dina specifika behov.

Exempel på PowerShell-implementering

Uppdatering augusti 2013

Jag har lärt mig något hos min nuvarande kund. Vi har våra bärbara datorer som är anslutna till hemdomänen. Vi har konton på kundens AD-nätverk. Närhelst jag behöver "göra" något i kundens värld måste jag starta min process och instruera den att presentera mina "utländska" referenser. Det som gör detta möjligt är RunAs . Alternativ referens

Jag skapade en svit med batchfiler som startar alla processer jag behöver. De tar formen av

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

Jag har en för en kommandotolk (ovan), Visual Studio, SSMS, PowerShell, PowerShell ISE och några andra specialappar som måste fungera med sin domän.

Genom att använda runas-metoden har jag kunnat distribuera paket med alla ovanstående metoder (liksom att distribuera direkt från en Visual Studio-instans som körs med främmande referenser).



  1. Varför INNER JOIN inte lika (!=) hänga för alltid

  2. MySQL:Vänster koppling och kolumn med samma namn i olika tabeller

  3. Kan flera primära nycklar finnas på ett enda bord?

  4. Välj två kolumner från samma tabell med olika WHERE-villkor