none
Executar SSIS via Stored Procedure RRS feed

  • Pergunta

  •  

    Bom dia a todos.

    Estou verificando "posts" antigos e materiais técnicos na internet de como executar um pacote SSIS com uma stored procedure que contenha parametros, confesso estar meio confuso.

     

    Minha necessidade é:

     

    1) Criar um pacote SSIS, com uma SQL Task que contenha uma stored procedure com parametros. Até aí, embora esteja apanhando para implementar vi que é possível.

     

    2) Fazer a chamada a este pacote SSIS de uma outra stored procedure, que será executada de minha aplicação. Vi uma matéria no link http://www.simple-talk.com/sql/sql-server-2005/executing-ssis-packages-/ que é possível, desde que eu faça a chamada do pacote com a stored procedure xp_cmdshell. Mas me parece que para chamar esta procedure o usuário tem que ter fortes permissões, correto?  

     

    Diante desta situação acima, alguém tem uma idéia melhor de como executar os pacotes SSIS através de minha aplicação?

     

    Obrigado,
    Roberto

     

    quinta-feira, 26 de junho de 2008 12:47

Todas as Respostas

  • Roberto,

     

    Realmente informações sobre o SSIS ainda são poucas, mas tem sempre alguém com interesse em ajudar.

     

    Você esta querendo de dentro da sua Stored Procedure, chamar uma package SSIS e executá-lo?

    quinta-feira, 26 de junho de 2008 13:11
  • Olá Junior Galvão,


    Era mais ou menos isso sim, chamar de minha procedure o pacote SSIS.

     

    Encontrei uma solução que aparentemente me atenderá.

     

    Funcionará da seguinte maneira.

     

    1) Minha aplicação manipula um arquivo XML com os parametros que a SP dentro do pacote SSIS necessita.
    2) Minha aplicação através de uma stored procedure chama uma JOB (sp_Start_Job), que chama o pacote SSIS. 
    3) Meu pacote SSIS contém uma outra stored procedure, que faz a leitura deste arquivo XML com os parametros.

    Algum inconveniente nesta arquitetura?

    To montando aqui, se funcionar direitinho aviso.

    [ ]'s
    Roberto

     

    quinta-feira, 26 de junho de 2008 17:53
  • Boa Noite,

     

    Eu particularmente não acho muito correto chamar um pacote SSIS dentro de uma SP. Penso que as tarefas de um pacote SSIS não coisas de bancos transacionais a ponto de colocarmos em uma SP e se é necessário chamar um pacote SSIS que se chame da aplicação, de um serviço ou de um JOB mas não de uma SP.

     

    Em todo caso, para que você não corra riscos desnecessários dando privilégios a xp_cmdshell para usuários comuns, você pode utilizar um novo recurso de segurança do 2005. Faça o seguinte:

     

    Code Snippet

    CREATE PROCEDURE uspExecutaPacoteSSIS

    @PacoteSSIS VARCHAR(30)

    AS

    EXECUTE AS Login = 'sa'

     

    DECLARE @cmd VARCHAR(1000)

    SET @cmd = 'dtexec /F " d:\TestPackages\' + @PacoteSSIS + '"'

    exec master..xp_cmdshell @cmd

     

    Se você codificar dessa forma e der a permissão na SP, durante a execução da SP, o usuário irá ter as permissões de SA e conseguirá executar o xp_cmdshell, mas assim que terminar a SP ele voltará a ser ele mesmo e não conseguirá rodar a xp_cmdshell isoladamente. Isso não irá comprometer sua segurança. Só lembre de habilitar a xp_cmdshell no SQL Server Configuration Manager

     

    [ ]s,

     

    Gustavo

    quinta-feira, 26 de junho de 2008 22:36