none
Conexão entre servidores. RRS feed

  • Pergunta

  • Por favor,

    Tenho o seguinte cenário:

    Windows Server 2003 com SQL 2000
    Windows Server 2008 com SQL 2005

    Os servidores estão dentro do mesmo domínio.

    O banco principal está no SQL 2000, porém necessito fazer atualização em uma tabela específica no SQL 2005.

    A solução que encontrei foi criar a seguinte trigger:

    CREATE TRIGGER ILSAPPURCHASE

    ON MOVIMENTO

    FOR DELETE

    AS

    DECLARE @DOCENTRY int

    BEGIN

      SET XACT_ABORT ON

      SET @DOCENTRY = (SELECT DOCENTRY FROM "SERVIDOR4".SBO_BANCO.dbo.PURCHASEORDER

                       WHERE DOCENTRY = (SELECT ID FROM DELETED))

      IF (@DOCENTRY > 0)

      BEGIN

        UPDATE "SERVIDOR4".SBO_BANCO.dbo.PURCHASEORDER SET TransType = 'D' WHERE DOCENTRY = @DOCENTRY

      END

    END

    GO

    Para efetuar a conexão entre os servidores utilizei o comando:

    USE MASTER

     

    EXEC sp_addlinkedserver @server='SERVIDOR4', 
                                        @srvproduct='',
     
                                        @provider='SQLOLEDB'
    ,
                                        @datasrc='SERVIDOR4'

    Utilizei a documentação KB839279 para configuração do MSDTC.

    Caso tire o comando da trigger SET XACT_ABORT ON, ocorre o erro:

    "Cannot start more transactions on this session" SQL SERVER LINKED SERVER

    Se deixo o erro não ocorre, porém não funciona a atualização...

    O que poderia estar ocorrendo?

    O caminho que estou trilhando é o correto ou teria outra forma de fazer essa atualização?

    Desde de já agradeço sugestões.

    Pascoal.

    sexta-feira, 27 de fevereiro de 2009 21:40

Respostas

  • O SET XACT_ABORT ON é necessário para a transação distribuida.

    E precisa ser colocado no inicio da Trigger, não consigo afirmar que o local que esse comando está no momento faz diferença. Eu já fi problemas dessa forma, mas existia um TSQL antes do XACT_ABORT.

    Experimente coloca-lo mais acima, senão resolver coloque a mensagem de erro completa que você está recebendo, pois a que foi publicada é somente uma parte da mensagem de erro.
    Alex Rosa, visite também http://www.keep-learning.com (Forum e Artigos interessantes)
    • Marcado como Resposta Richard Juhasz quinta-feira, 22 de dezembro de 2011 19:36
    sábado, 28 de fevereiro de 2009 03:14

Todas as Respostas

  • O SET XACT_ABORT ON é necessário para a transação distribuida.

    E precisa ser colocado no inicio da Trigger, não consigo afirmar que o local que esse comando está no momento faz diferença. Eu já fi problemas dessa forma, mas existia um TSQL antes do XACT_ABORT.

    Experimente coloca-lo mais acima, senão resolver coloque a mensagem de erro completa que você está recebendo, pois a que foi publicada é somente uma parte da mensagem de erro.
    Alex Rosa, visite também http://www.keep-learning.com (Forum e Artigos interessantes)
    • Marcado como Resposta Richard Juhasz quinta-feira, 22 de dezembro de 2011 19:36
    sábado, 28 de fevereiro de 2009 03:14
  • Alex,

    Concordo com você.
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    segunda-feira, 2 de março de 2009 18:00
    Moderador