Linked Server pra que serve e quando utilizar?

Linked Server pra que serve e quando utilizar?

13:00 08 September in Gestão de Infraestrutura, Implantação de Soluções
0 Comments

O Linked Server é uma funcionalidade do SQL Server muito útil para estabelecer conexão segura entre dois ou mais servidores. Administradores de banco de dados e desenvolvedores utilizam muito esse recurso para realizarem consultas em outros servidores. Um exemplo da utilização dessa funcionalidade seria, em que o servidor de produção utiliza dados de CEP que está em outro servidor, com isso, é criado um Linked Server para consultar a base de CEP que está fisicamente em outro ambiente.

Também é muito utilizado em softwares que consultam dados na internet, por exemplo, aplicativos que verificam dados climáticos, informações sobre vôos, trânsito… Essas informações nem sempre estão no mesmo servidor e sim em outro que pode ser acessado via Linked Server.

Essa “ponte” de comunicação é possível entre fontes OLE DB, como Excel, Access, servidores SQL Server e até servidores com outros SGBDs como Oracle, MySQL, Sybase.

As principais vantagens de se utilizar Linked Server é a facilidade de executar consultas distribuídas, comandos de atualizações que envolvem diversas bases em servidores diferentes.

Pra simular o Linked Server em ação, será necessário no mínimo duas instâncias, pois elas podem estar ou não no mesmo servidor. Vamos criar um banco de dados e uma tabela, que será utilizada para realizar consultas e manipulação através do Linked Server.

A imagem abaixo ilustra a “topologia” dos testes:

artigo

 

A instância SERVER1\SQL2008 conterá o banco de dados DB_LK, que será acessado pela instância SERVER2\SQL2012.

O script abaixo cria o banco de dados na instância SERVER1\SQL2008.

[sql]

Create Database DB_LK
GO

Use DB_LK
GO

 

Create Table Table1
(
Id INT IDENTITY NOT NULL,
Nome VARCHAR(50) NULL,
Constraint pkTable1 Primary Key Clustered (Id)
)
GO

Insert Table1 (Nome)
Values (‘João Eduardo’),(‘Jeremias’), (‘Dante’), (‘Lucas’), (Luiz Henrique’)[/sql]

Com banco e tabela criados, vamos criar o Linked Server na segunda instância (SERVER2\SQL2012), cujo propósito é consultar os dados do banco DB_LK que está na primeira instância (SERVER1\SQL2008).

Abaixo, segue o código de criação:

[sql]

EXEC master.dbo.sp_addlinkedserver
@server = N’LK2008′,
@srvproduct=N”,
@provider=N’SQLNCLI’,
@datasrc=N’SERVER1\SQL2008′

EXEC master.dbo.sp_addlinkedsrvlogin
@rmtsrvname=N’LK2008′,
@useself=N’True’,
@locallogin=’sa’,
@rmtuser=NULL,
@rmtpassword=’sa'[/sql]

Importante: Observe que o usuário informado é o “SA”. Utilizei-o de propósito para demonstrar esse erro que comentemos. Por boas práticas não é aconselhável utilizar o SA no Linked Server por motivos de segurança. O correto é criar um usuário com as permissões necessária,s que será utilizado somente pelo Linked Server. Além de garantir a segurança, também podemos auditar as ações executadas por esse usuário.

O script acima cria um Linked Server, em que o parâmetro @datasrc recebe como valor a instância SERVER1\SQL2008. Com essa configuração, criamos um canal de comunicação entre os servidores SERVER1\SQL2008 e SERVER2\SQL2012.

Após criar o ambiente, vamos executar alguns scripts com o propósito de simular a utilização do Linked Server.

A sintaxe correta do Linked Server é:

[sql]Select * From [LinkedServer].[RemoteDatabase].[Owner].[Table]
Exemplo:
Select * From LK2008.DB_LK.dbo.Table1[/sql]

A figura abaixo representa um SELECT utilizando Linked Server para retornar dados do banco DB_LK que está na outra instância:

artigo2

 

O Select está sendo executado na instância SERVER2\SQL2012 e busca as informações na instância SERVER1\SQL2008.

Outro exemplo é representado abaixo, em que a query está sendo executada na instância SERVER2\SQL2012, porém realizando UPDATE na tabela Table 1 do DB_LK que está alocado no servidor SERVER1\SQL2008.

artigo3

Com esse artigo, pretendo demonstrar o conceito de Linked Server e o quanto isso pode ser útil no desenvolvimento do dia a dia. Espero ter replicado a informação de forma simples e objetiva.

Caso tenha ficado alguma dúvida ou deseje mais material sobre o assunto, me envie e-mail (luizh.rosario@gmail.com) ou deixe um comentário.

 

**Este texto é uma produção independente e, portanto, de inteira responsabilidade do autor, não refletindo a opinião da Infobase.

Luiz Henrique Garetti Rosário

luizh.rosario@gmail.com

Graduado em Ciência da Computação pela Universidade Paulista e Pós-graduando em Business Intelligence pelo instituto Brasileiro de Tecnologia Avançada (IBTA). Especialista SQL Server atuando como DBA/Consultor em projetos de diversos portes, focando em arquiteturas de Alta Disponibilidade utilizando ambientes em Failover Cluster, Database Mirror, AlwaysOn e Administração de Banco de Dados em geral. Contribui para a comunidade com artigos técnicos publicados em grandes eventos na área de Banco de Dados com foco em Alta Disponibilidade e distribuição geográfica dos dados.