Linked Server para que server e quando utilizar?

Beleza galera, esse é um assunto sobre o qual recebo vários e-mails de duvida, suporte… Com isso resolvi escrever um pouco sobre o tema, compartilhando um pouco sobre o assunto…

Linked Server é uma funcionalidade do SQL Server muito útil para estabelecer conexão segura entre dois ou mais servidores. Administradores de Banco de dados, desenvolvedores utilizam muito esse recurso para realizarem consultas em outros servidores. Um exemplo da utilização dessa funcionalidade seria, onde 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, informações sobre 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 outro 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.

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

A Imagem abaixo ilustra a “topologia” dos testes.

LK

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

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

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’)
GO

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

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

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’

Importante: Observe que o usuário informado é o “SA”, o utilizei de proposito para demonstrar esse erro que comentemos. Por boas praticas 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árias 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 onde 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 propósito de simular a utilização do Linked Server.

A sintaxe correta do Linked Server é:
Select * From [LinkedServer].[RemoteDatabase].[Owner].[Table]

Exemplo:
Select * From LK2008.DB_LK.dbo.Table1

A Figura abaixo representa um SELECT utilizando Linked Server para retorna dados do banco de dados DB_LK que está não outra instância:

1

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

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

2

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

Caso ficou alguma dúvida ou deseja mais material sobre o assunto, me enviem e-mail (luizh.rosario@gmail.com) que retorno o mais rápido possível.

Grande abraço e bons estudos!

Luiz Henrique Garetti

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s