sql >> Base de Datos >  >> RDS >> Sqlserver

Implementación del proyecto SSIS (SQL Server 2012) fuera de la red

Tiene 3 herramientas para implementar archivos .ispac en el catálogo de SSISDB.

  1. ISDeploymentWizard.exe
  2. ManagedObjectModel
  3. TSQL

Ya está utilizando el asistente y no funciona debido a problemas de autenticación. Creo que incluso con su enfoque MOM, aún tendrá problemas de autenticación. Eso deja el enfoque TSQL y, dado que tiene un inicio de sesión válido, es de esperar que esto funcione.

El siguiente código serializará su .ispac, creará la carpeta de implementación si aún no existe, implementará el proyecto y luego asignará un valor de parámetro.

En SSMS, deberá cambiar su modo al modo SQLCMD que está disponible en el menú Consulta. Después de hacer eso, presione Ctrl-Shift-M para que aparezca la macro y le permitirá especificar dónde se puede encontrar el archivo .ispac.

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

Si asistió a la conferencia SQL Pass Summit 2012, hice una demostración de esto en mi charla sobre Modelo de implementación de 2012 pero no cubrí el parámetro parte. Creo que esa última llamada es correcta pero no lo he comprobado. He vinculado a la documentación de la llamada de procedimiento para que pueda adaptarla a sus necesidades específicas.

Ejemplo de implementación de PowerShell

Actualización de agosto de 2013

He aprendido algo en mi cliente actual. Tenemos nuestras computadoras portátiles que están unidas al dominio doméstico. Tenemos cuentas en la red AD del cliente. Cada vez que necesito "hacer" algo en el mundo del cliente, necesito iniciar mi proceso e indicarle que presente mis credenciales "extranjeras". Lo que hace esto posible es RunAs . referencia alternativa

Creé un conjunto de archivos por lotes que inician todos los procesos que necesito. Toman la forma de

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

Tengo uno para un símbolo del sistema (arriba), Visual Studio, SSMS, PowerShell, PowerShell ISE y algunas otras aplicaciones especiales que necesitan funcionar con su dominio.

Usando el enfoque de runas, pude implementar paquetes usando todos los métodos anteriores (además de implementarlos directamente desde una instancia de Visual Studio que se ejecuta con credenciales externas).