Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Implantando o projeto SSIS (SQL Server 2012) fora da rede


Você tem 3 ferramentas para implantar arquivos .ispac no catálogo SSISDB.
  1. ISDeploymentWizard.exe
  2. ManagedObjectModel
  3. TSQL

Você já está usando o assistente e não está funcionando devido a problemas de autenticação. Acho que mesmo com sua abordagem MOM, você ainda terá problemas de autenticação. Isso deixa a abordagem TSQL e, como você tem um logon válido, esperamos que isso funcione.

O código a seguir serializará seu .ispac, criará a pasta de implantação se ela ainda não existir, implantará o projeto e atribuirá um valor de parâmetro.

No SSMS, você precisará alterar seu modo para o modo SQLCMD, que está disponível no menu Consulta. Depois de fazer isso, pressione Ctrl-Shift-M para abrir a macro e ela permitirá que você especifique onde o arquivo .ispac pode ser encontrado.
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

Se você participou da conferência SQL Pass Summit 2012, demonstrei isso em minha palestra no Modelo de implantação de 2012 mas não abordei o parâmetro papel. Acredito que a última chamada esteja correta, mas não a verifiquei. Eu vinculei a documentação da chamada de procedimento para que você possa adaptá-la às suas necessidades específicas.

Exemplo de implementação do PowerShell

Atualização de agosto de 2013


Aprendi algo no meu cliente atual. Temos nossos laptops que se juntam ao domínio doméstico. Temos contas na rede AD do cliente. Sempre que preciso "fazer" algo no mundo do cliente, preciso iniciar meu processo e instruí-lo a apresentar minhas credenciais "estrangeiras". O que torna isso possível é RunAs . referência alternativa

Criei um conjunto de arquivos em lote que iniciam todos os processos de que preciso. Eles assumem a forma de
runas /netonly:ForeignDomain\Doppelganger "C:\windows\system32\cmd.exe"

Eu tenho um para um prompt de comando (acima), Visual Studio, SSMS, PowerShell, PowerShell ISE e alguns outros aplicativos especializados que precisam trabalhar com seu domínio.

Usando a abordagem runas, consegui implantar pacotes usando todos os métodos acima (além de implantar diretamente de uma instância do Visual Studio sendo executada com credenciais estrangeiras).