En el mundo DevOps, existen situaciones en las que necesitas una forma de transferir datos entre diferentes bases de datos Azure SQL: Azure SQL databases.
Por ejemplo, imagina que un cliente borró accidentalmente una gran cantidad de registros de una tabla en la base de datos de producción. Con las copias de seguridad Point in Time backups, podríamos restaurar la base de datos a un punto anterior en el que esos registros todavía existían. Este proceso creará una nueva base de datos restaurada, y después podríamos intercambiar los nombres de las bases de datos renombrándolas. Sin embargo, existe un inconveniente: la base de datos restaurada perderá todo el historial Point in Time de la base de datos original.
Una mejor solución sería restaurar los registros eliminados en la base de datos original. Pero esto no es tan simple como en SQL Server tradicional. Las bases de datos no pueden verse entre sí, incluso si están en el mismo servidor, y por ejemplo, no puedes usar Linked servers en Azure SQL para conectarlas.
Podrías exportar esos registros a scripts SQL, pero en algunos casos el volumen de datos es tan grande que crear esos scripts no sería la mejor opción.
Aquí es donde entran en juego las Elastic Queries:
¿Qué son las Elastic Queries?

Con esta tecnología, podemos gestionar fácilmente datos entre bases de datos en Azure SQL, permitiendo consultar y mover información entre instancias con gran flexibilidad.
Requisitos:
Paso a paso en Azure
maginemos que el cliente truncó todos los registros del año 2016 de la tabla Estimates en nuestra base de datos invoices.
El primer paso es conectarnos al Azure Portal y realizar una restauración Point In Time de la base de datos cloudinvoices en una fecha en la que esos registros aún existían. Restauraremos esta copia en una base de datos llamada invoices2016.
Pasos para restaurar los registros
1. Crear Master Key y Credenciales Scopeadas
La master key funciona como un “bóveda” para guardar credenciales en la base de datos. Las scoped credentials son las credenciales que se usarán para conectarse a la base de datos restaurada.
Syntax:
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password';
CREATE DATABASE SCOPED CREDENTIAL <credential_name> WITH IDENTITY = '<username>', SECRET = '<password>'
Ejemplo:
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'p@ssw0rd';
CREATE DATABASE SCOPED CREDENTIAL dbCredential WITH IDENTITY = 'user01', SECRET = 'p@ssw0rd';
2. Crear el External Data Source
El external data source define la conexión entre las bases de datos utilizando la credencial creada.
Syntax:
CREATE EXTERNAL DATA SOURCE <data_source_name> WITH
(
TYPE = RDBMS,
LOCATION = '<fully_qualified_server_name>',
DATABASE_NAME = '<remote_database_name>',
CREDENTIAL = <credential_name>
)
Ejemplo:
CREATE EXTERNAL DATA SOURCE restoredDatabase WITH
(
TYPE=RDBMS,
LOCATION='cloudinvoices.database.windows.net',
DATABASE_NAME='invoices2016',
CREDENTIAL= dbCredential
);
3. Crear las External Tables
Las external tables son extensiones de tablas en otra base de datos. Funciona como si fueran tablas vinculadas. Ten en cuenta que no puedes tener dos tablas con el mismo nombre en tu base de datos, aunque una sea externa y otra local.
En este caso, renombraremos la tabla Estimates en la base de datos restaurada para evitar conflictos:
Syntax:
sp_rename ‘object_name’, 'new_name';
Ejemplo en la base de datos restaurada:
sp_rename 'Estimates', 'Estimates2016';
Ahora podemos crear la tabla externa:
Syntax:
CREATE EXTERNAL TABLE [table_name] (
{ <column_definition> } [ ,...n ]
)
{ WITH ( <rdbms_external_table_options> ) }
)
Ejemplo:
CREATE EXTERNAL TABLE [Estimates2016] (
[EstimateId] uniqueidentifier NOT NULL,
[ClientId] int NOT NULL,
[Year] int NOT NULL,
[Amount] decimal NOT NULL
)
WITH (
DATA_SOURCE = restoredDatabase
);
4. Restaurar los registros eliminados
Una vez creada la conexión, podemos copiar los registros faltantes:
INSERT INTO ESTIMATES
SELECT * FROM ESTIMATES2016 WHERE YEAR = 2016;
Limpieza final (cleanup):
Al terminar, elimina los objetos creados:
DROP EXTERNAL TABLE Estimates2016;
DROP EXTERNAL DATA SOURCE restoredDatabase;
DROP DATABASE SCOPED CREDENTIAL dbCredential;
DROP MASTER KEY;
¡Eso es todo! Las Elastic Queries son una herramienta muy útil para estos escenarios. Además, pueden ayudarte en muchos otros casos como:
-
Consultas cross-database para particionado horizontal ( sharding )
-
Consultas para reporting en PowerBI
-
Integración entre bases de datos con esquemas diferentes
Más información:
¡Nos vemos en el siguiente post!