Fórum Problemas com transações distribuidas no Sql Server 2000 #368674
25/02/2009
0
Estou tentando faze uma atualização online entre 2 bancos de dados remotos. Eu criei um linked server no servidor1 para um outro servidor, servidor 2, ambos usando a versão 2000. Pelo query analyzer eu consigo faze todas as operações como select, insert e update dos dados do servidor 2. O teste que eu preciso é: assim que eu fizer um insert, update ou delete no servidor 1 o mesmo ira acontecer no servidor 2. Para isso eu criei uma trigger after insert (para teste). Fazendo o insert, pelo query analyzer, na tabela do servidor 1 o mesmo também é inserido na tabela do servidor 2.
Até aqui dando tudo certo nos testes.
O erro abaixo acontece quando eu executo o insert pela minha aplicação.
´Project XXX.exe raise exception class EOleException with message [OLE DB provider returned message: Não é possivel iniciar mais transações nesta sessão.]´
Segue abaixo o script da minha trigger:
create trigger trgXXX
on TblXXX
after insert
as
if exists(select * from inserted)
begin
set xact_abort on
begin distributed transaction
insert into linkedserver.banco.dbo.TblXXX(Ope_DataCadastro,
Ope_DataUltAtu,
Ope_Nome,
Ope_Login,
Ope_Senha,
Ope_HR_Inicio,
Ope_HR_Fim,
Ope_PHR_Inicio,
Ope_PHR_Fim,
Ope_Tipo,
Ope_Usr_Cadastro,
Ope_Usr_AltCad)
select Ope_DataCadastro,
Ope_DataUltAtu,
Ope_Nome,
Ope_Login,
Ope_Senha,
Ope_HR_Inicio,
Ope_HR_Fim,
Ope_PHR_Inicio,
Ope_PHR_Fim,
Ope_Tipo,
Ope_Usr_Cadastro,
Ope_Usr_AltCad from inserted
commit tran
set xact_abort off
end
Segue agora abaixo o codigo da aplicação em Delphi 7:
procedure TFrmXXX.ActSalvarExecute(Sender: TObject);
begin
inherited;
Dm.minhaqry.Post;
end;
OBS: Uso Delphi7/Sql Server 2000
Até aqui dando tudo certo nos testes.
O erro abaixo acontece quando eu executo o insert pela minha aplicação.
´Project XXX.exe raise exception class EOleException with message [OLE DB provider returned message: Não é possivel iniciar mais transações nesta sessão.]´
Segue abaixo o script da minha trigger:
create trigger trgXXX
on TblXXX
after insert
as
if exists(select * from inserted)
begin
set xact_abort on
begin distributed transaction
insert into linkedserver.banco.dbo.TblXXX(Ope_DataCadastro,
Ope_DataUltAtu,
Ope_Nome,
Ope_Login,
Ope_Senha,
Ope_HR_Inicio,
Ope_HR_Fim,
Ope_PHR_Inicio,
Ope_PHR_Fim,
Ope_Tipo,
Ope_Usr_Cadastro,
Ope_Usr_AltCad)
select Ope_DataCadastro,
Ope_DataUltAtu,
Ope_Nome,
Ope_Login,
Ope_Senha,
Ope_HR_Inicio,
Ope_HR_Fim,
Ope_PHR_Inicio,
Ope_PHR_Fim,
Ope_Tipo,
Ope_Usr_Cadastro,
Ope_Usr_AltCad from inserted
commit tran
set xact_abort off
end
Segue agora abaixo o codigo da aplicação em Delphi 7:
procedure TFrmXXX.ActSalvarExecute(Sender: TObject);
begin
inherited;
Dm.minhaqry.Post;
end;
OBS: Uso Delphi7/Sql Server 2000
Rssampaio
Curtir tópico
+ 0
Responder
Posts
27/02/2009
Rssampaio
O problema acima eu consegui resolver. Tinha uma outra transação disparando (trigger) ao mesmo tempo.
Só que esbarrei em outro problema, que segue 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].
O servidor 1 é uma maquina winXP que é onde está mandando os dados. O servidor 2 tem o win server 2003 e está em uma outra faixa de IP.
Alguem já teve algum problema parecido ou tem alguma ideia para a solução?
Só que esbarrei em outro problema, que segue 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].
O servidor 1 é uma maquina winXP que é onde está mandando os dados. O servidor 2 tem o win server 2003 e está em uma outra faixa de IP.
Alguem já teve algum problema parecido ou tem alguma ideia para a solução?
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)