Bienvenido nuevamente a una nueva demostración. El día de hoy aprenderemos a realizar consultas elásticas entre 2 bases de datos en Azure SQL Database. Para ello, primero te indicaré cuales son los requisitos:
Sin más preámbulos ¡Iniciemos!
Como primer paso debemos dirigirnos al portal de Azure y crear una base de datos llamada PEDIDOS. Así mismo, debemos crear un servidor para la base de datos, que en mi caso se llamará “elasticqueryserver”. No olvides que debes guardar los datos de usuario y contraseña del servidor.
La configuración de precios para esta base de datos llamada PEDIDOS debe ser de nivel Estándar. Para ello daremos clic en la opción de “Configurar base de datos”.
A continuación, seleccionaremos el nivel Estándar, con 20 DTU y 2 GB, finalmente daremos clic en “Aplicar”.
Una vez validado todo, daremos clic en “Revisar y crear”.
Una vez finalizada la implementación, Azure nos notificará que la creación de nuestra primera base de datos llamada PEDIDOS se creó exitosamente. Ahora, daremos clic en la “X”.
Ahora, nos dirigimos al grupo de recurso, que en mi caso se llama “ElasticQuerySQL” y daremos clic en “Agregar”.
En el Marketplace de Azure, seleccionaremos “SQL Database”.
Y crearemos una segunda base de datos llamada “CLIENTES”. Recuerda, debe estar en el mismo grupo de recursos, también debe estar bajo el mismo servidor de base de datos que previamente creamos en los primeros pasos y finalmente bajo el mismo nivel Estándar con 20 DTU y 2 GB. Ahora sí, daremos clic en “Revisar y crear”.
Una vez finalizada la implementación, Azure nos notificará que la creación de nuestra primera base de datos llamada CLIENTES se creó exitosamente. Ahora, daremos clic en la “X”.
Si vamos al grupo de recursos, debemos contar con una estructura similar la cual mostrará solo un servidor de base de datos, en mi caso llamado “elasticqueryserver” y dos bases de datos, llamadas PEDIDOS y CLIENTES.
Mucha atención a lo siguiente...
No hay que olvidarse de agregar nuestra IP en el servidor, para ello, en ambas bases de datos dale clic a la opción “Agregar la IP a la lista de elementos permitidos del servidor”.
Esto lo que hará es agregar nuestra IP bajo una regla de firewall con la finalidad de que podamos trabajar con estas dos bases de datos. Para ello en la ventana de Configuración de firewall debes dar clic en “Agregar IP de cliente”, veras como en la sección de Dirección IP de cliente se agregará una nueva regla y acto final, daremos clic en “Guardar”.
Ahora sí, antes de ir al SSMG nos vamos a la base de datos PEDIDOS y copiamos el “Nombre del Servidor”.
En nuestro SSMG, conectarse a una base de datos de Azure SQL es súper sencillo. En el nombre del servidor pegamos el nombre del servidor que hemos copiado en el paso anterior, acto seguido en el modo de autenticación seleccionamos SQL Server Auth y finalmente colocamos el usuario y la contraseña que colocamos al servidor en Azure.
Una vez conectamos se puede apreciar que bajo el mismo servidor de base de datos contamos con nuestras 2 bases de datos llamadas CLIENTES y PEDIDOS.
Ahora viene lo bueno. Primero daremos clic a “NewQuery”, luego nos aseguramos de utilizar la base de datos llamada PEDIDOS y ejecutaremos el siguiente comando que nos creará una tabla llamada “PedidoInformation” y la llenará con 5 filas de datos:
CREATE TABLE [dbo].[PedidoInformation](
[PedidoID] [int] NOT NULL,
[ClienteID] [int] NOT NULL
)
INSERT INTO [dbo].[PedidoInformation] ([PedidoID], [ClienteID]) VALUES (123, 1)
INSERT INTO [dbo].[PedidoInformation] ([PedidoID], [ClienteID]) VALUES (149, 2)
INSERT INTO [dbo].[PedidoInformation] ([PedidoID], [ClienteID]) VALUES (857, 2)
INSERT INTO [dbo].[PedidoInformation] ([PedidoID], [ClienteID]) VALUES (321, 1)
INSERT INTO [dbo].[PedidoInformation] ([PedidoID], [ClienteID]) VALUES (564, 8)
Ahora ejecutaremos otro comando, pero esta vez en la base de datos de CLIENTES. Este comando nos creará una tabla llamada “ClienteInformation” y la llenará con 3 filas de datos:
CREATE TABLE [dbo].[ClienteInformation](
[ClienteID] [int] NOT NULL,
[ClienteName] [varchar](50) NULL,
[Empresa] [varchar](50) NULL
CONSTRAINT [CustID] PRIMARY KEY CLUSTERED ([ClienteID] ASC)
)
INSERT INTO [dbo].[ClienteInformation] ([ClienteID], [ClienteName], [Empresa]) VALUES (1, 'Elton', 'Contoso SA')
INSERT INTO [dbo].[ClienteInformation] ([ClienteID], [ClienteName], [Empresa]) VALUES (2, 'Maria', 'Adventure Works SAC')
INSERT INTO [dbo].[ClienteInformation] ([ClienteID], [ClienteName], [Empresa]) VALUES (3, 'Alfredo', 'World Wide Importers SRL')
Ahora sí, volvemos a la base de datos PEDIDOS y ejecutaremos el siguiente comando que creará una clave maestra que se utiliza para proteger las claves privadas de los certificados y las claves asimétricas que están presentes.
Aquí un par de aclaraciones:
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '';
CREATE DATABASE SCOPED CREDENTIAL ElasticDBQueryCred
WITH IDENTITY = '',
SECRET = '';
En la misma base de datos PEDIDOS nos toca ejecutar un comando que le permita a esta base de datos obtener información de orígenes de datos externos.
Aquí un par de aclaraciones:
CREATE EXTERNAL DATA SOURCE MyElasticDBQueryDataSrc WITH
(TYPE = RDBMS,
LOCATION = '.database.windows.net',
DATABASE_NAME = 'Clientes',
CREDENTIAL = ElasticDBQueryCred,
) ;
Como paso final, en la base de datos PEDIDOS ejecutaremos el siguiente comando que nos permitirá crear una tabla externa. Recordemos que esta tabla debe de coincidir en esquema con la tabla de “ClientesInformation” creada en la base de datos llamada CLIENTES.
CREATE EXTERNAL TABLE [dbo].[ClienteInformation]
( [ClienteID] [int] NOT NULL,
[ClienteName] [varchar](50) NOT NULL,
[Empresa] [varchar](50) NOT NULL)
WITH
( DATA_SOURCE = MyElasticDBQueryDataSrc)
¡YA TENEMOS TODO LISTO!
Ahora sigue ejecutar nuestra consulta elástica. Para ello desde la misma base de datos PEDIDOS ejecutaremos el siguiente comando.
SELECT PedidoInformation.ClienteID, PedidoInformation.PedidoId, ClienteInformation.ClienteName, ClienteInformation.Empresa
FROM PedidoInformation
INNER JOIN ClienteInformation
ON ClienteInformation.ClienteID = PedidoInformation.ClienteID
¡Oh no!
¿Qué paso? Al parecer nuestro SQL nos indica que existe una IP que no está permitida para acceder en nuestro servidor. Lo mejor de todo es que dentro del error nos brindará la IP, la cual debemos copiarla y agregarla en el Servidor bajo una regla de firewall.
En nuestro servidor nos vamos a la sección se seguridad y seleccionamos “Firewalls y redes virtuales”. Ahora manualmente agregamos primero un nombre a la regla y la misma IP del error como IP inicial e IP final. Finalmente daremos clic en “Guardar”.
Volvemos a ejecutar nuestra consulta elástica en la base de datos PEDIDOS y nos asombraremos con el resultado.
En conclusión, hoy hemos aprendido a cómo configurar y usar una base de datos de Azure SQL para realizar consultas de solo lectura en bases de datos remotas. Así mismo hemos visto que esta solución solo está disponible en los niveles de servicio Estándar y Premium. Finalmente al realizarlo bajo un modelo de Plataforma como Servicio obtenemos todos los beneficios de la gestión administrada por parte del proveedor de nube como la seguridad, disponibilidad y escalabilidad. Sin más que añadir, no te olvides de compartir para así ayudar a otros.