Problemas com transações distribuidas no Sql Server 2000
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
Clique aqui para fazer login e interagir na Comunidade :)