top of page

Como executar um SELECT em duas bases de dados diferentes ao mesmo tempo #Parte2

Fala galera, no post anterior eu mostrei como realizar um select em duas bases em um único comando dentro de uma mesma instância, agora nós vamos complicar um pouco mais o cenário.


Seguindo o cenário montado no primeiro post, "Uma rede de escolas do Brasil utiliza o mesmo sistema para cada uma das suas unidades, cada escola da rede tem o seu próprio banco de dados (SQL Server, claro). Para reduzir custos, algo muito comum, algumas dessas unidades compartilham um mesmo servidor de banco de dados, sendo apenas um instância com vários bancos dentro sendo cada banco de uma escola.". Nessa nova etapa do projeto dessa rede de escolas, foi necessário criar novos servidores de bancos de dados em outras localidades para armazenar o banco de dados de outras unidades como a de São Paulo, por exemplo.


O diretor da rede de escolas solicita novamente um relatório de contendo todos os alunos de cada uma das unidades, o desafio é você como DBA auxiliar na montagem desse relatório reunindo dados agora não apenas de bancos na mesma instância mas também com dados de outras instâncias que estão inclusive em outros servidores.


Uma alternativa para esse cenário novo é a utilização de linked server. Como o próprio nome já diz é criar um link entre as instâncias para poder juntar dados dos dois lados.


Vamos por a mão na massa!

No meu ambiente de estudos tenho duas instâncias, a SQL2017 contém as bases db_escola_indaiatuba e db_escola_itu, já a instância TPSYSTEM2017 contem a base db_escola_sp. Preciso juntar dados das 3 bases para atender o que o diretor solicitou.


Como a maioria das bases estão na instância SQL2017 vou criar o linked server partindo dela para acessar os dados da escola de São Paulo. Para criar um linked server vá em 'objetos do servidor' > botão direito > Novo servidor vinculado.




A primeira tela de configuração deve ser preenchida com

Nome do servidor vinculado: coloque sempre um nome de fácil identificação

Nome do produto: pode repetir o nome acima

Fonte de dados: caminho da instância onde esta o outro banco de dados (nesse caso, se o servidor estiver em outra rede, será necessário usar o acesso externo - IP externo)

Catálogo: nome da base que deseja acessar (deixar em branco caso seja mais de uma)



Após preencher todos os campos clique em segurança (menu lateral a esquerda).


Selecione a última opção e informe o login e senha para se conectar na instância (recomendo não usar um sysadmin por segurança)



Após preencher todos os campos clique em Opções do servidor (menu lateral a esquerda).


Habilite as opções RPC e RPC Out


Clique em OK, se você fez tudo certo o linked server será criado.

A partir de agora você consegue visualizar as bases de dados no mesmo contexto de conexão conforme a imagem abaixo.



Estamos quase lá! Um ponto a se destacar é que apesar de ser útil nesses casos o linked server, ele nem sempre deve ser usado, lembre-se que existe um caminho a percorrer entre uma instância e outra, se estivermos falando de instâncias em servidores que estão em locais físicos diferentes, esse link esta se baseando em uma conexão de internet, portanto quando a quantidade de dados for muito grande, esse processo de leitura "remota" pode demorar muito e inviabilizar um relatório, por exemplo. Avalie caso a caso a possibilidade de usar o linked server no seu projeto.


No post 1 desse assunto havíamos criado a VW_LISTA_ALUNOS que retornava os dados dos alunos das escolas de Indaiatuba e Itu que estavam na mesma instância, vamos utilizar a própria view para acrescentar os alunos de SP.



Para isso, basta incluir mais um Union e iremos alterar o código logo após o FROM.

Nos dois primeiros selects bastava indicar o nome da base, ponto ponto e o nome da tabela, agora para ler a tabela da base de São Paulo, precisamos acrescentar no inicio o Linked server, veja:

[LinkedServer].[NomeBase].[schema].[Tabela]

Executo o ALTER da view e isso já é suficiente para entregar o que precisamos.



Agora estamos lendo dados de 3 bancos diferentes: Indaiatuba e Itu (do servidor "1") e São Paulo (do servidor "2").


Tenha sempre sabedoria para usar essa funcionalidade, mas como você pode ver, ela facilita várias ações, ao invés de entregar 2 , 3 relatórios para o "diretor", com essa view é possível entregar apenas 1.


Gostou do post? Compartilha com seus colegas que querem ser um DBA SQL Server!


Nos acompanhe em nossas redes sociais!

Grupo VIP Telegram: DBA On boarding

Youtube(vídeos novos todas as quartas): DBA On boarding

Face & Instagram(conteúdo diário): DBA On boarding


Até a próxima, tchau!


9.653 visualizações0 comentário
bottom of page