Linked Server SQL Server
O que é? Qual sua utilidade? Como configurar?
Linked Server como o nome diz, é a forma de linkar, fazer uma ligação entre banco de dados em diferentes servidores.
Quero carregar uma tabela no servidor SQL_1 com registros de uma tabela que está no Servidor SQL_2, por exemplo.
Podemos criar o Linked Server chamando o procedimento sp_addlinkedserver ou utilizando a interface GUI.
Nesse artigo, demostrarei por scripts.
@server – Nome do Linked Server.
@srvproduct – Nome do SGBD. Pode ser o nome que você quiser, mas não pode conter espaços.
@provider – Nome do provider que no caso é o SQL Native Client
* Para verificar todos os forncedores execute o procedimento sys.sp_enum_oledb_providers
@datasrc – Nome e instância do Servidor ao qual quero me conectar.
@location – Local da fonte de dados. No caso do provider SQL Native Client, não é preenchido.
@provstr – Descrição do provider string, que no caso de SQL para SQL não é necessário.
@catalog – Nome da base de dados. É opcional informar.
Exec sp_addlinkedserver @server ='LS_GUIADBA', @srvproduct ='SQLSERVER2014', @provider ='SQLNCLI', @datasrc ='100.50.70.1\DESENV', @location = Null, @provstr = Null, @catalog = Null --Consulta para verificar Select Name, product, provider, data_source, is_linked From sys.servers Where name='LS_GUIADBA' And is_linked = 1
Para fazer uma consulta em uma tabela em outro servidor, usaremos a seguinte sintaxe:
Select * From LS_GUIADBA.[DATABASE].[SCHEMA].[TABELA]
Nome do Linked Server + Nome do banco de dados + Schema + Tabela
Ao executar a consulta, recebi a mensagem de erro:
Acontece que eu criei o Linked Server, não estou logado com a conta SA e não informei o logon remoto.
Irei adicionar chamando o procedimento sp_addlinkedsrvlogin
Exec sp_addlinkedsrvlogin @rmtsrvname = N'LS_GUIADBA', @locallogin = NULL , @useself = N'False', @rmtuser = N'alexandre.curvelo', @rmtpassword = N'123456xyz'
Dessa forma eu sempre irei me conectar no servidor remoto com o usuário alexandre.curvelo.
Esse usuário existe no servidor remoto e possui permissão para consultar a tabela que preciso.
Porém, nem todos os usuários locais farão as mesmas consultas. Então, Eu irei associar apenas o meu usuário local ao usuário remoto.
Exec sp_addlinkedsrvlogin @rmtsrvname ='LS_GUIADBA', @useself = 'false', @locallogin = 'alexandre', @rmtuser = 'alexandre.curvelo', @rmtpassword = '123456xyz'
@locallogin = ‘alexandre’
Para certificar que está Ok, executo o procedimento para testar sp_testlinkedserver
sp_testlinkedserver [LS_GUIADBA]
Link permanente