none
integration server RRS feed

  • Pergunta

  •  

    Olá!

     

    Tenho um problemão. Hoje a minha empresa trabalha na plataforma sql 2000 e pretende migrar para o sql 2005, nós temos uma proc que faz execução de alguns DTS através da criação do objeto DTS.Package2.

    Alguem sabe me dizer se é possível no sql 2005 criar um objeto que chame os dtsx e pegue informações como o nome do step, se houve falha ou sucesso...?

     

    Obrigada.

    quarta-feira, 27 de agosto de 2008 17:32

Respostas

  • Boa Noite,

     

    A utilização das procedures sp_OA* não está atrelada ao uso do DTS. Elas certamente vão ser descontinuadas em alguma edição futuras mas isso não está sequer divulgado ainda, então acredito que só no SQL Server 2012 e olhe lá. O DTS não existe mais no SQL Server 2005 e embora possa ser executado, é chamado através de uma tarefa do SSIS que nada tem a ver com as procedures sp_OA*

     

    Independente disso, acho que o CLR é uma ótima alternativa. O CLR (Common Language RunTime) permite que você escreva procedures utilizando alguma linguagem do Framework .NET. Como o SSIS também possui classes nesse Framework, você pode codificar um Assembly em .NET para executar um pacote SSIS. Posteriormente você pode carregar esse Assembly para o SQL Server e executá-lo.

     

    É uma implementação que acho que vai demorar bastante para ser descontinuada. O CLR baseia-se no código gerenciado, enquanto as procedures sp_OA* utilizam o COM e código não gerenciado. Se as procedures sp_OA* ainda não tem data para serem retiradas, muito menos o CLR

     

    [ ]s,

     

    Gustavo

    quinta-feira, 28 de agosto de 2008 03:04

Todas as Respostas

  • Fabiana,

     

    Se não estou enganado é possível sim, sendo que no SQL Server 2005 você vai trabalhar com o SSIS ao invês do DTS.

     

    Procure mais informações e exemplos sobre dtsx no Books On-Line!!!

     

    quarta-feira, 27 de agosto de 2008 17:34
  • Olá Fabiana,

     

    O DTS não existe no SQL Server 2005. Ele foi substituído por uma implementação bem superior conhecida como SSIS (SQL Server Integration Services) que assim como o DTS também possui seu modelo de objetos. Só que a conversão não é tão direta e se você está trabalhando nesse nível, receio que tenha de reescrever boa parte de seus pacotes, já que o modelo de objetos do SSIS não é o mesmo do DTS.

     

    Para não atrasar a migração ou ainda impedí-la, o SSIS possui uma tarefa chamada Execute DTS Package que pode executar um pacote DTS a partir do SSIS.

     

    [ ]s,

     

    Gustavo

     

    quarta-feira, 27 de agosto de 2008 17:50
  • Junior,

     

    Procurei no books online e ele não faz referência aos obejtos que são possíveis de serem usados.

     

    Você conhece alguma material que eu possa utilizar?

     

     

    quarta-feira, 27 de agosto de 2008 17:50
  • Olá Gustavo,

     

    Nós não utilizaremos mais DTS e sim SSIS. Hoje nós temos uma proc que executa os DTS (além de fazer o controle das falhas) segue parte do código que exemplificam o que acontece. Gostaria de saber se é possivel criar um objeto que execute o DTSX.

     

     

    --Cria o objeto pacote

    EXEC @intHResult = sp_OACreate 'DTS.Package2', @intHPkg OUTPUT

     

    --Carrega o pacote

    SET @txtMetodo = 'LoadFromSQLServer'

    EXEC @intHResult = sp_OAMethod @intHPkg, @txtMetodo, NULL, @ServerName = @txtNomeServidor,

    @ServerUserName = @txtServerUsuario,

    @ServerPassword = @txtServerSenha,

    @Flags = @intFlagsPerm,

    @PackageName = @txtNomeDTS

     

    --Executa o pacote

    SET @txtMetodo = 'Execute'

    EXEC @intHResult = sp_OAMethod @intHPkg, @txtMetodo, NULL

     

     

     

    Obrigada.

     

    Fabiana

    quarta-feira, 27 de agosto de 2008 18:03
  • Olá Fabiana,

     

    Se a utilização é essa então está mais fácil do que eu imaginei. Você pode continuar utilizando as procedures sp_OA* para instanciar objetos COM+ e certamente é possível de fazer isso com o SSIS. No entanto, além de deixar o DTS para trás, possivelmente você vai deixar a sp_OA* para trás também. É melhor fazer isso com o CLR

     

    [ ]s,

     

    Gustavo

     

    quarta-feira, 27 de agosto de 2008 18:12
  •  

    Gustavo,

     

    A minha preocupação é que estas procedures sp_OA* existam no sql 2005 porque ainda é possível executar DTS no Integration Service, mas numa próxima mudança de platafroma o DTS eventualmente pode não ser mais utilizado e estas procs desaparecam, ai seria outro retrabalho rescrever a aplicação novamente. Então por isso gostaria se saber se há outra alternativa "mais moderna". Você citou o CLR, o que seria? Só para orientar minha pesquisa sobre.

     

    Obrigada!

    quarta-feira, 27 de agosto de 2008 18:22
  • Boa Noite,

     

    A utilização das procedures sp_OA* não está atrelada ao uso do DTS. Elas certamente vão ser descontinuadas em alguma edição futuras mas isso não está sequer divulgado ainda, então acredito que só no SQL Server 2012 e olhe lá. O DTS não existe mais no SQL Server 2005 e embora possa ser executado, é chamado através de uma tarefa do SSIS que nada tem a ver com as procedures sp_OA*

     

    Independente disso, acho que o CLR é uma ótima alternativa. O CLR (Common Language RunTime) permite que você escreva procedures utilizando alguma linguagem do Framework .NET. Como o SSIS também possui classes nesse Framework, você pode codificar um Assembly em .NET para executar um pacote SSIS. Posteriormente você pode carregar esse Assembly para o SQL Server e executá-lo.

     

    É uma implementação que acho que vai demorar bastante para ser descontinuada. O CLR baseia-se no código gerenciado, enquanto as procedures sp_OA* utilizam o COM e código não gerenciado. Se as procedures sp_OA* ainda não tem data para serem retiradas, muito menos o CLR

     

    [ ]s,

     

    Gustavo

    quinta-feira, 28 de agosto de 2008 03:04
  • Ola Gustavo,

     

    Muito obrigada pela explicação, agora já sei por qual caminho seguir.

     

    = D

     

    Fabiana.

     

    quinta-feira, 28 de agosto de 2008 11:43
  • uma pergunta, porque ao invez de usar as sp_Oxx nao vc nao usa o DTSrun ou comandos via linha de prompt ?

     

    Abs;

     

    quinta-feira, 28 de agosto de 2008 12:31
  •  

    Olá Marcelo!

     

    Porque usando o DTSrun eu não sei se é possível pegar o nome de cada task que esta sendo executada e o seu resultado (sucesso ou falha) para armazenar num banco.

     

    []s

    quinta-feira, 28 de agosto de 2008 12:37
  • Fabiana,

     

    Não tenho certeza, acredito que não pois o DTSRun abra uma sessão para trabalhar e o conjunto de dados que ele esta processando normalmente deve retornar informações para que esta sessão seja encerrada.

     

    Se invês de utilizar o DTSRun utilizar o DTExec!!!

     

    Vou tentar fazer alguns testes aqui com o DTSRun sobre este retorno de informações!!!!

    quinta-feira, 28 de agosto de 2008 13:39
  • Junior,

     

    Mas preciso startar um dtsx, por isso terei que usar o DTExec, certo?

     

    quinta-feira, 28 de agosto de 2008 14:31
  • Fabiana,

     

    Isso vai depender da sua necessidade, existem vários para trabalhar com o DTExec, veja estes que extraí diretamente do Books On-line:

     

     

    Examples

    Running Packages

    To execute an SSIS package saved to SQL Server using Windows authentication, use the following code:

    dtexec /sq pkgOne /ser productionServer

    To execute an SSIS package saved to the File System folder in the SSIS Package Store, use the following code:

    dtexec /dts "\File System\MyPackage"

    To validate a package that uses Windows Authentication and is saved in SQL Server without executing the package, use the following code:

    dtexec /sq pkgOne /ser productionServer /va

    To execute an SSIS package that is saved in the file system, use the following code:

    dtexec /f "c:\pkgOne.dtsx" 

    To execute an SSIS package that is saved in the file system, and specify logging options, use the following code:

    dtexec /f "c:\pkgOne.dtsx" /l "DTS.LogProviderTextFile;c:\log.txt"

    To execute a package that uses Windows Authentication and is saved to the default local instance of SQL Server, and verify the version before it is executed, use the following code:

    dtexec /sq pkgOne /verifyv {c200e360-38c5-11c5-11ce-ae62-08002b2b79ef}

    To execute an SSIS package that is saved in the file system and configured externally, use the following code:

    dtexec /f "c:\pkgOne.dtsx" /conf "c:\pkgOneConfig.cfg"
    Note:
    The package_path or filespec arguments of the /SQL, /DTS, or /FILE options must be enclosed in quotation marks if the path or file name contains a space. If the argument is not enclosed in quotation marks, the argument cannot contain white space.
    quinta-feira, 28 de agosto de 2008 14:37
  • isso  mesmo o dtexec

     

     

    e mais simples.

    quinta-feira, 28 de agosto de 2008 14:38
  • Marcelo e Junior,

     

    Obrigada pelas dicas optamos por utilizar o DTSEXEC e descobrimos que é possível configurar o pacote para que ele guarde os logs das tasks no msdb. Isso já resolve todos os nossos problemas.

     

    Obrigada pela ajuda.

     

    = D

     

    quinta-feira, 28 de agosto de 2008 18:06