none
Linked Server SQL com Informix RRS feed

  • Pergunta

  • Pessoal estou com o seguinte caso, consegui fazer funcionar um LInkedSever entre meu servidor SQL Server e servidor Informix utilizando o provider ifxoledbc.

    Se eu fizer um slect, insert ou update direto manualmente ele executa numa boa, agora quando eu faço um simples insert via trigger ele me retorna o erro abaixo:

    Msg 7391, Level 16, State 2, Procedure LGXT_R034FUN_AIU_2, Line 4
    The operation could not be performed because OLE DB provider "Ifxoledbc" for linked server "IFXDB_TST" was unable to begin a distributed transaction.

    Se eu habilitar a opção "Enalbe XA Transactions" em  Components Services -> Local DTC Properties  a query executa e faz o insert porem gera a seguinte msg:

    (1 row(s) affected)
    Msg 3609, Level 16, State 1, Line 10
    The transaction ended in the trigger. The batch has been aborted.

    Oque é essa mensagem? posso manter dessa forma?

    Alguem pode me ajudar?

    terça-feira, 17 de novembro de 2015 18:22

Todas as Respostas

  • Lpiza, boa noite.

    Geralmente esse erro ocorre quando acontece algum erro no codigo dentro da trigger. Tente depurar a sua trigger para ver se encontra algum problema.

    Antonio Cesar



    • Editado Antonio Cesar terça-feira, 17 de novembro de 2015 23:21
    terça-feira, 17 de novembro de 2015 22:53
  • Boa Noite,

    Não costuma ser uma boa decisão utilizar triggers dentro de um Linked Server, vai afetar negativamente a performance dos seus inserts. Além disso, os distributed transactions geralmente dão uma certa dor de cabeça em alguns tipos de operações.

    Relacionado a última mensagem de erro. Por acaso você está commitando alguma transação sem abrir transação? Verifique a possibilidade de trabalhar com blocos de Try Catch, podem te ajudar no tratamento de problemas na execução.

    Se possível coloque o código da trigger aqui.

     


    Att, Bruno Silva.

    quarta-feira, 18 de novembro de 2015 00:12
  • Bom dia Bruno, realmente era um commit na trigger, também a trigger era apenas com finalidade de TESTE.

    Quanto a opção "Enalbe XA Transactions" alguém sabe me dizer um pouco sobre esse recurso posso deixar habilitado?

    quarta-feira, 18 de novembro de 2015 10:05
  • Boa Tarde,

    Infelizmente não conheço esse recurso, mas encontrei um material feito por um desenvolvedor do time da Microsoft que parece ser bem esclarecedor.

    Verifica se pode ajudar:

    http://blogs.msdn.com/b/dataaccesstechnologies/archive/2011/10/27/unable-to-do-remote-sql-stored-procedure-debugging-from-vs2010.aspx


    Att, Bruno Silva.

    quarta-feira, 18 de novembro de 2015 16:42
  • Lpiza,

    Então cara colega, realmente vai funcionar mas o problema esta justamente em que o Trigger esta sendo chamado e você esta trabalhando em outro bloco de transação, neste caso, o trigger fica totalmente perdido da sua tabelha de origem, desta forma, o SQL Server não consegui gerenciar e identificar com disparou ou solicitou o trigger.

    Talvez uma alternativa seria não utilizar o trigger da forma que esta, ou então dentro deste mesmo trigger, colocar o código fonte dentro de uma Stored Procedure e ai dependendo da condição o trigger vai ser disparado, mas na verdade quem será executado será a stored procedure dentro de bloco de transação.

    Uma outra possibilidade seria dentro do trigger dependendo da sua implementação fazer uso dos comandos Begin Transaction/Commit Transaction ou Rollback Transaction, fazendo que você determine de forma explícita quando começa e quando termina a transação.


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    • Marcado como Resposta Lpiza terça-feira, 8 de dezembro de 2015 16:52
    • Não Marcado como Resposta Lpiza terça-feira, 8 de dezembro de 2015 16:52
    • Sugerido como Resposta Junior Galvão - MVPMVP domingo, 29 de maio de 2016 01:26
    sexta-feira, 20 de novembro de 2015 17:53
  • Obrigado Junior pela ajuda, eu consegui resolver o problema de comunicação entre o linked server a agora vamos utilizar a procedure com a trigger.

    Obrigado a todos pela ajuda.

     
    terça-feira, 8 de dezembro de 2015 16:56