TRANSFERIR DADOS ENTRE SERVIDORES

LUISNET10 29/11/2013 10:00:29
#431607

Preciso enviar as vendas locais para um servidor externo.

Consegui fazer isso usando o linkedserver.

insert openquery([srv], .... o srv e o link do outro servidor.

Problema:

Quando coloco dentro de uma transaction da erro:

[txt-color=#0000f0]set xact_abort ON
BEGIN TRANSACTION TR_ENVIA
BEGIN TRY
[/txt-color]

O problema e o serviço MSDTC... ja fiz o possível e impossível e não consigo liberar isso... segui milhares de tutoriais, até funciona quando estou na rede local, mas externo não funciona. (Ja coloquei o dmz para o servidor que vai receber a conexao)

Ja estou desistindo de usar o LinkedServer.

Alguém conhece alguma outra alternativa ou ja conseguiu fazer Transacton entre servidores externo (Inserido ou atualizando o servidor externo.)


Obrigado.
AJSO 30/11/2013 01:30:09
#431631
Caro LUISNET10

Qual a versão do S.O. e do Banco de dados?
Qual SPK do seu servidor?


Boa Sorte
LUISNET10 30/11/2013 08:04:36
#431632

Bom dia Alessandro..

Estou com dois servidores na locaweb..

um com server 2003 data center SPK 2 e SQL 2008 r2 10.50.1600

outro com server 2008 r2 Data Center SPK 1 e SQL 2008 r2 10.50.1600

e tb estou com um servidor no Azure (mas pelo que li não aceita operações coordenadas)


Fazendo um teste interno eu consigo usar a Transaction, mas quanto tento externo não permite, ainda acredito que seja alguma porta do MSDTC que não atribui no firewall ou outro tipo de permissão.

Valeu Alessandro.

AJSO 01/12/2013 23:20:18
#431655
Caro LUISNET10


Veja bem, quando você utiliza transação distribuída entre dois servidores SQL Server você precisa configurar e ativar o MSDTC em ambos os nós. você já fez isso?

Tem um procedimento para essa configuração....... onde até o firewall é feito de forma manual por causa do server 2003.....

Passo a Passo

Etapas para habilitar o acesso MSDTC da rede
1.Clique em Iniciar, aponte para Painel de controle e clique em Adicionar ou remover programas.
2.Clique em Adicionar/remover componentes do Windows.
3.Selecione Servidor de aplicativo e clique em Detalhes.
4.Selecione Ativar acesso ao MSDTC da rede e depois clique em OK.
5.Clique em Avançar.
6.Clique em Concluir.
7.Pare e reinicie o serviço do Distributed Transaction Coordinator.
8.Pare e reinicie o Microsoft SQL Server e os outros serviços de gerenciamento de recursos que fazem parte da transação distribuída, tais como o Microsoft Message Queuing........

O 8º passo é o mais importante pois cada servidor tem algum serviço associado ao SGBD...... terá que ser todos para não gerar erros...........




Essa configuração é bem genérica do Linked Server:

EXEC sp_addlinkedserver
@server=’NomeDoLinkedServer’,
@srvproduct=”,
@provider=’SQLNCLI’,
@datasrc=’tcp:xxx.xxx.xxx.xxx,Porta’

Porem, essa empresa remota iria bloquear a sua porta 1433 do SQL Server e colocar a instancia em outra porta.....


Boa sorte

LUISNET10 06/12/2013 13:49:21
#431873

Boa Tarde Alessandro..

Amigo realmente esta complicado, olha o cenário, tenho dentro do escritorio dos netvirtua, coloquei o gateway de uma maquina em um virtua e no meu notebook coloquei o outro gateway.

Fiz o link server usando o ddns, sendo assim o link estava com o ip externo, funcionou, a transação foi feita com sucesso.

Fui em um cliente meu que também tem virtua, e mesmo com o meu notebook não funcionou.

O roteador está com o DMZ e a maquina está com o firewall desativado.

Não gostaria de me passar um valor para fazer isso remotamente, passo o orcamento para o escritorio, dependendo do valor eles aceitam, posso te auxiliar.

Abaixo está o codigo que crio linkserver. e a consulta de teste.

EXEC master.dbo.sp_addlinkedserver @server=[ô]srv[ô] ,@srvproduct=[ô]SQLNCLI10[ô]
,@provider =[ô]SQLNCLI10[ô]
,@datasrc = @serv
,@location = [ô][ô]
,@provstr = [ô][ô]
,@catalog = @catalog

EXEC master.dbo.sp_serveroption @server=N[ô]srv[ô], @optname=N[ô]collation compatible[ô], @optvalue=N[ô]true[ô]
EXEC master.dbo.sp_serveroption @server=N[ô]srv[ô], @optname=N[ô]data access[ô], @optvalue=N[ô]true[ô]
EXEC master.dbo.sp_serveroption @server=N[ô]srv[ô], @optname=N[ô]dist[ô], @optvalue=N[ô]false[ô]
EXEC master.dbo.sp_serveroption @server=N[ô]srv[ô], @optname=N[ô]pub[ô], @optvalue=N[ô]false[ô]
EXEC master.dbo.sp_serveroption @server=N[ô]srv[ô], @optname=N[ô]rpc[ô], @optvalue=N[ô]true[ô]
EXEC master.dbo.sp_serveroption @server=N[ô]srv[ô], @optname=N[ô]rpc out[ô], @optvalue=N[ô]true[ô]
EXEC master.dbo.sp_serveroption @server=N[ô]srv[ô], @optname=N[ô]sub[ô], @optvalue=N[ô]false[ô]
EXEC master.dbo.sp_serveroption @server=N[ô]srv[ô], @optname=N[ô]connect timeout[ô], @optvalue=N[ô]0[ô]
EXEC master.dbo.sp_serveroption @server=N[ô]srv[ô], @optname=N[ô]collation name[ô], @optvalue=null
EXEC master.dbo.sp_serveroption @server=N[ô]srv[ô], @optname=N[ô]lazy schema validation[ô], @optvalue=N[ô]false[ô]
EXEC master.dbo.sp_serveroption @server=N[ô]srv[ô], @optname=N[ô]query timeout[ô], @optvalue=N[ô]0[ô]
EXEC master.dbo.sp_serveroption @server=N[ô]srv[ô], @optname=N[ô]use remote collation[ô], @optvalue=N[ô]false[ô]
EXEC master.dbo.sp_serveroption @server=N[ô]srv[ô], @optname=N[ô]remote proc transaction promotion[ô], @optvalue=N[ô]true[ô]




--– Configura um login para acessar o Linked Server
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = [ô]srv[ô],
@locallogin =NULL , @useself = [ô]false[ô],
@rmtuser = @user, @rmtpassword = @password


--------- CONSULTA

set xact_abort ON
BEGIN TRANSACTION TR_ENVIA
BEGIN TRY

INSERT INTO openquery([srv], [ô]select
[id],[nome],[endereco] from tb_cliente_dados where 1=0[ô])
select id, nome, endereco from tb_cliente_dados

-- select * from openquery([srv], [ô]select * from tb_cliente_dados[ô])
COMMIT TRANSACTION TR_ENVIA
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION TR_ENVIA
PRINT [ô]Erro: [ô] + ERROR_MESSAGE()
END CATCH
AJSO 08/12/2013 17:14:23
#431914
Caro LUISNET10

Posso realizar esta processo, talvez seu problema esta nas configurações do servidor, e teria que verificar todos os serviços do servidor que recebe estes dados pelo entre o SO e o Banco de dados......

aparentemente seus scripts não são problemáticos e muito simples

Posso passar valore/hora para este serviço pelo e-mail para essa sua consulta (--------- CONSULTA) apenas para fazer as configurações dos processos necessários para utilizar o Server S.O. e o SQL Server........

SQL server 2005/2008/2012
Criar o Linked Server
Configurar Linked Server
Aplicar segurança

Configurar serviços (Windows Server 2003/2008/2012) TCP/IP
Processos Firewall
Configurar Roteador


alessandromidi@hotmail.com

Passo também uma orientação para ajustar as plataformas para uso entre server 2003/2008/2012 e SQL 2000/2005/2008/2012.........

Ótimas rotinas para integração entre as diferenças de versões e serviços.....


Boa sorte
RO.DRIGOSG 20/01/2014 14:03:38
#433275
Resposta escolhida
LUISNET10,

Faça as configurações que nosso amigo AJSO te disse e depois faça o seguinte também:

1 - Verifique se o serviço está ativo no SQL, a opção [Ô]value_in_use[Ô] tem estar como [Ô]1[Ô]:

SELECT * FROM SYS.CONFIGURATIONS
WHERE NAME = [ô]remote proc trans[ô];


2 - Se não estiver habilitado, execute o script abaixo:

EXEC SP_CONFIGURE [ô]remote proc trans[ô],[ô]1[ô]
RECONFIGURE ;
GO


3 - No seu script utilize o begin transaction da seguinte maneira:

BEGIN DISTRIBUTED TRANSACTION;
...
COMMIT TRANSACTION;


Vê se isso ai te ajuda.



Tópico encerrado , respostas não são mais permitidas