Menu

Transferencia de datos entre Azure SQL Databases con Elastic Queries

Transferencia de datos entre Azure SQL Databases con Elastic Queries

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 backupspodrí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?

 

Diagrama con dos iconos de base de datos de Azure SQL conectados por una flecha bidireccional etiquetada “T‑SQL 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!

Categorías

Posts relacionados
Escalado automático en Azure: qué es, cómo implementarlo y beneficios que nos ofrece
Publicado por Carolina César Piepenburg  |  03 abril 2024

Examinaremos en las herramientas específicas de Azure que permiten el escalado automático, cómo se realiza en cada una de ellas y los beneficios que nos aportan.

Leer más
Cómo desarrollar modelos de IA en menos tiempo
Publicado por Carolina César Piepenburg  |  05 enero 2024

Descubre cómo crear modelos de inteligencia artificial en menos tiempo con Azure Cloud Platform y Azure Machine Learning

Leer más
HTAP y Azure SQL para el ahorro de costos en la gestión energética
Publicado por Intelequia  |  02 junio 2022

HTAP y Azure SQL permiten ofrecer a los proveedores energéticos una solución para el análisis y administración de redes eléctricas inteligentes.

Leer más