Servidor sendo usado: SQL Server 2012 SP3
Acabei de receber um erro estranho (estranho porque funcionou antes)
could not connect to server LNK_SRV because sa is not defined as a remote login
Não tenho certeza por que estamos recebendo o erro.
O sys.servers diz is_linked = 0 para LNK_SRV - não sei por quê. O seguinte retorna resultados
select top 10 * from LNK_SRV.DBName.dbo.TblName
Mas os procedimentos estão falhando
exec LNK_SRV.DBName.dbo.ProcName
Ele estava funcionando bem antes de descartarmos o servidor vinculado e adicioná-lo novamente.
Além disso, o LNK_SRV também está sendo usado para replicação.
Nota: estou ciente de que sa é ruim. Será cuidado em breve.
O servidor vinculado também foi usado para replicação.
A ordem do servidor vinculado Assinar e Criar foi o problema.
Reproduza o erro:
1. Elimine a assinatura
2. Elimine o servidor vinculado
3. Configure a assinatura primeiro
4. Servidor vinculado em seguida
5. Testando
- a. Select retornará resultados
- b. Exec proc resulta em erro
Correção:
1. Elimine a assinatura
2. Elimine o servidor vinculado
3. Crie o servidor vinculado primeiro
4. Configure a assinatura em seguida
5. Teste
- a. Select retornará resultados
- b. Exec proc terá sucesso
Além disso, a execução do seguinte no Linked Server também funcionou.
De acordo com a documentação para sys.servers , is_linked :
O fato de seu servidor vinculado estar retornando 0 para is_linked indica que o servidor vinculado foi criado usando o estilo antigo
sp_addserver
(o que não é recomendado).Eu sugiro criar um 'novo' servidor vinculado (para fins de teste) por meio de script de um existente que NÃO foi criado usando
sp_addserver
ou criando um novo servidor vinculado a partir da GUI do SSMS. Certifique-se de visitar a página Segurança do servidor vinculado recém-criado e ajuste conforme necessário.Tente usar o novo servidor vinculado para executar o procedimento armazenado remoto e também as seleções normais, etc. Se isso funcionar, elimine o servidor vinculado atual que está falhando e substitua-o pelo novo que funciona.
Este parece um erro complicado. De acordo com a pergunta, você pode fazer,
SELECT
mas recebendo uma mensagem de erro para o arquivoexec
. Você pode tentar as opções abaixo se elas ainda não tiverem sido atendidas:O DTC é usado pelo SQL Server quando duas ou mais máquinas estão envolvidas e deseja fazer uma transação distribuída entre elas. Mais informações podem ser encontradas nos links abaixo.
Blog do MSDN para DTC
Microsoft DOCs para Sintaxe de Transação Distribuída
Como habilitar a opção DTC no SQL Server : Há uma resposta útil fornecida por "Shiv Sing" no estouro de pilha.
Para habilitar a entrada e saída de RPC , abra a janela de propriedades do servidor vinculado no SQL Server Management Studio. Selecione
Server Options
, lá você encontrará os parâmetros RPC e RPC out. Marque-os como sim.Feito isso, tente executar o mesmo comando no formato abaixo.