Estou com um problema e não sei como resolver. Já olhei vários sites e não consegui achar o erro. Aqui consegui chegar mais proximo de resolver. Pessoal tenho a seguinte situação: Existe um servidor servidor A que vai passar dados para outro sevidor B que não estão na mesma rede. O servidor A tem winXp e o servidor B (que receberá os dados) é win server 2003. Ambos estão com o sql-server 2000 sp4. O servidor A vai realizar os inserts, updates e delete e o mesmo vai ser passado para o servidor B. Para acontecer isso eu criei um linked server no servidor A (com winXp/sqlserver2000). Pelo query analyser eu consigo fazer essas operações normalmente. Só que quando faço isso através de trigger me dá o erro abaixo:
Server: Msg 7391, Level 16, State 1, Procedure trg_ai_Operadores, Line 10 The operation could not be performed because the OLE DB provider 'SQLOLEDB' was unable to begin a distributed transaction. [OLE/DB provider returned message: A nova transação não pode ser inscrita no coordenador de transação especificado. ] OLE DB error trace [OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a].
Já olhei vários tópicos para configurar o MSDTC e ativa-lo nos 2 nós. Segue 2 tópicos que verifiquei:
Verifiquei também o firewall dos 2 nós. Estão desabilitados e depois habilitei-os e fiz os procedimentos conforme link acima e mesmo assim não consegui.
Fazendo o seguinte select no query analyser eu consigo trazer os resultados: select * from linkedserver.banco.dbo.Tabela
Se eu realizar o select dessa forma o erro citado acontece: begin distributed transaction
select * from linkedserver.banco.dbo.Tabela
commit tran
Segue abaixo o modelo da minha trigger:
create trigger trg_ai_Operadores on TblOperadores after insert as if exists(select * from inserted) begin set xact_abort on begin distributed transaction
insert into <Campos> select <Campos> from inserted
commit tran set xact_abort off end
Alguém poderia me ajudar a resolver o erro ou enxergar uma melhor forma para atualizar os dados no servidor B?
Com relação ao Begin Distributed Transaction no comando select não estou utilizando ele pra realizar o select. É que no site da microsoft onde eu achei uma explicação sobre o erro, o mesmo pede para fazer algumas configurações no servidor e realizar um select, como teste, usando o Begin Distributed Transaction. Se retornasse o resultado estaria correta a configuração senão ainda tinha problema. Eu só uso o Begin Distributed Transaction na trigger, quando vou faze o insert no outro servidor SQL-Server.
Eu estou tentando fazer acesso aos dados em outro servidor SQL-Server, inclusive estão em redes diferentes com outra faixa de IP. Pelo Query Analyzer eu consigo fazer qualquer tipo de operação, select, update, delete, sem o uso do Begin Distributed Transaction.
Pelo sistema que não estou conseguindo pois existe uma trigger, na tabela, que dispara um insert em outro servidor (citado acima). Segue o Modelo da minha trigger usada:
create trigger trg_ai_Operadores on TblOperadores after insert as if exists(select * from inserted) begin set xact_abort on begin distributed transaction
insert into <Campos> select <Campos> from inserted