Cross-Database Query – AzureSQL Database


Por Oberdan Schaider e Rodrigo Crespi

Fala Pessoal! 

Atualmente em alguns cenários, nos deparamos com situações em que precisamos acessar e gerar informações a partir de várias fontes de dados.

Imagine a seguinte situação: em um servidor de SQL Server existem duas instâncias, onde você precisa realizar uma query da instância A para a instância B. Possivelmente pensará em utilizar um Linked Server para realizar o acesso.
Agora vamos pensar que na instância A, você precisa gerar informações através de uma query referente informações do banco de dados X e do banco Y. Nesse cenário, você DBA fica mais tranquilo, pois não existirá a camada de Linked Server para fazer a ponte entre as instâncias, só será necessário utilizar o formato de banco.schema.tabela. 

Assim: 
select Y.*, X.* from BancoY.dbo.person as Y  
inner join BancoX.[SalesLT].[Customer] as X on X.CustomerID = Y 

Agora imagine um cenário em cloud, especificamente em um serviço AzureSQL. É possível realizar esse tipo de conexão entre dois bancos de dados localizados na mesma instância? Sim, porém não é tão intuitivo quanto em um ambiente On-Premises

Então, vamos pensar no seguinte cenário: 
1 serviço de AzureSQL com 2 databases (BancoX e BancoY).
Através do BancoY vamos precisar acessar informações do BancoX.

No cenário On-Premises (como descrito inicialmente no post), conseguiríamos utilizar o script sem nenhum problema. 
Porém, utilizando a mesma query em um AzureSQL, ocorreria o seguinte erro: 
Msg 40515, Level 15, State 1, Line 25 
Reference to database and/or server name in ‘BancoX.SalesLT.Customer’ is not supported in this version of SQL Server. 

Então, “entra na jogada” as External Tables. 
Vamos precisar seguir alguns passos. São eles:

1- Criar login na origem e destino: 
CREATE LOGIN sqluser with password = ‘d’ 
CREATE USER sqluser for login sqluser 

2- Criar a Master Key para criptografar a credencial utilizada posteriormente: 
CREATE MASTER KEY ENCRYPTION BY PASSWORD = ‘1senhaforte.’ –rodar comando no banco destino (bancoY) 

3- Criar a credencial no banco destino (BancoY): 
CREATE DATABASE SCOPED CREDENTIAL ElasticDBQueryTeste  
WITH IDENTITY = ‘sqluser’, 
SECRET = ‘1senhaforte.’;

4- Verificar se as credenciais foram criadas com sucesso: 
select * from sys.database_scoped_credentials 
SELECT * from sys.symmetric_keys 

5-Criar um Data Source, referenciado ao servidor que deseja se conectar: 
CREATE EXTERNAL DATA SOURCE DS_ElasticDBQueryTeste WITH
(TYPE = RDBMS, 
LOCATION = ‘srvsqlcrespidb.database.windows.net’, 
DATABASE_NAME = ‘BancoX’,
CREDENTIAL = ElasticDBQueryTeste,
) ;

Existem vários parâmetros que podem ser fornecidos na cláusula TYPE, mas como queremos conectar em um AzureSQL precisaremos utilizar o valor “RDBMS”. 

6- Criar a External Table: 
CREATE EXTERNAL TABLE [dbo].[BuildVersion] 

[SystemInformationID] tinyint,
[Database Version] nvarchar(25),
[VersionDate] datetime 
)
WITH 
( DATA_SOURCE = DS_ElasticDBQueryTeste) 

7- Conceder permissão para o usuário criado no passo 1: 
grant select on [dbo].[BuildVersion] to sqluser 

8- Realizar o teste de leitura na External Table criada anteriormente:
select systeminformationid, [database Version] from [dbo].[BuildVersion] 

Para concluir, é importante salientar que o External Table é uma nova abordagem para uma feature antiga que gera melhor eficiência, segurança e velocidade. 

Saiba mais sobre como fazer cross database com haddop, mongodb, etc. em:
 https://docs.microsoft.com/pt-br/sql/t-sql/statements/create-external-table-transact-sql?view=sql-server-ver15&tabs=dedicated?WT.mc_id=DP-MVP-5002511 

Esperamos que este post seja útil para você!

Generic selectors
Exact matches only
Search in title
Search in content
Post Type Selectors

Artigos Recentes

Conheça as Ferramentas de High Availability e Disaster Recovery para Ambientes Cloud

Fale Conosco

Converse com nossos especialistas e descubra como transformar seus dados em informações seguras, disponíveis e acessíveis.

Endereço

Rua Angelo Antonello, 93 – Sala 62, Centro – Farroupilha/RS – CEP: 95170-492

Contato Comercial

Email: contato@cdbdatasolutions.com.br
Telefone: (54) 3401-1471

Abrir bate-papo
Olá
Podemos ajudar?