Tutorial: Configuración de la replicación entre dos instancias administradas
Se aplica a: Azure SQL Managed Instance
La replicación transaccional permite replicar datos de una base de datos a otra hospedada tanto en SQL Server como en Azure SQL Managed Instance. Instancia administrada de SQL puede ser un publicador, un distribuidor o un suscriptor en la topología de replicación. Consulte las configuraciones de la replicación transaccional para ver las opciones disponibles.
En este tutorial, aprenderá a:
- Configurar una instancia administrada como publicador y distribuidor de replicación.
- Configurar una instancia administrada como suscriptor de replicación.
Este tutorial va dirigido a un público experimentado, así que se da por hecho que el usuario está familiarizado con la implementación y la conexión a ambas instancias administradas, y con máquinas virtuales con SQL Server en Azure.
Nota:
- En este artículo se describe el uso de la replicación transaccional en la Instancia administrada de Azure SQL Database. Esto no está relacionado con los grupos de conmutación por error, una característica de Instancia administrada de Azure SQL que permite crear réplicas completas legibles de instancias individuales. Hay consideraciones adicionales al configurar la replicación transaccional con grupos de conmutación por error.
Requisitos
Para configurar Instancia administrada de SQL de forma que funcione como un publicador o distribuidor, deben darse las siguientes condiciones:
- Que la instancia administrada del publicador se encuentre en la misma red virtual que el distribuidor y el suscriptor o se hayan configurado emparejamiento de VNET o puertas de enlace de VPN entre las redes virtuales de las tres entidades.
- La conectividad usa la autenticación de SQL entre los participantes de la replicación.
- Un recurso compartido de cuenta de Azure Storage para el directorio de trabajo de replicación.
- El puerto 445 (salida TCP) está abierto en las reglas de seguridad del grupo de seguridad de red de la instancia administrada para tener acceso al recurso compartido de archivos de Azure. Si aparece el error
failed to connect to azure storage <storage account name> with os error 53
, deberá agregar una regla de salida al grupo de seguridad de red de la subred de Instancia administrada de SQL adecuada.
1 - Creación de un grupo de recursos
Use Azure Portal para crear un grupo de recursos denominado SQLMI-Repl
.
2 - Creación de instancias administradas
Use Azure Portal para crear dos Instancias administradas de SQL en las mismas red virtual y subred. Por ejemplo, asigne un nombre a las dos instancias administradas:
sql-mi-pub
(junto con algunos caracteres para la selección aleatoria)sql-mi-sub
(junto con algunos caracteres para la selección aleatoria)
También deberá configurar una máquina virtual de Azure para la conexión a las instancias administradas.
3\. Creación de una cuenta de Azure Storage
Cree una cuenta de Azure Storage para el directorio de trabajo y, después, cree un recurso compartido de archivos dentro de la cuenta de almacenamiento.
Copie la ruta de acceso del recurso compartido de archivos en el formato \\storage-account-name.file.core.windows.net\file-share-name
.
Ejemplo: \\replstorage.file.core.windows.net\replshare
Copie las claves de acceso de almacenamiento en el formato DefaultEndpointsProtocol=https;AccountName=<Storage-Account-Name>;AccountKey=****;EndpointSuffix=core.windows.net
.
Ejemplo: DefaultEndpointsProtocol=https;AccountName=replstorage;AccountKey=dYT5hHZVu9aTgIteGfpYE64cfis0mpKTmmc8+EP53GxuRg6TCwe5eTYWrQM4AmQSG5lb3OBskhg==;EndpointSuffix=core.windows.net
Para obtener más información, consulte Administración de las claves de acceso de la cuenta de almacenamiento.
4 - Creación de una base de datos del publicador
Conéctese a la instancia administrada de sql-mi-pub
mediante SQL Server Management Studio y ejecute el siguiente código de Transact-SQL (T-SQL) para crear la base de datos del publicador:
USE [master]
GO
CREATE DATABASE [ReplTran_PUB]
GO
USE [ReplTran_PUB]
GO
CREATE TABLE ReplTest (
ID INT NOT NULL PRIMARY KEY,
c1 VARCHAR(100) NOT NULL,
dt1 DATETIME NOT NULL DEFAULT getdate()
)
GO
USE [ReplTran_PUB]
GO
INSERT INTO ReplTest (ID, c1) VALUES (6, 'pub')
INSERT INTO ReplTest (ID, c1) VALUES (2, 'pub')
INSERT INTO ReplTest (ID, c1) VALUES (3, 'pub')
INSERT INTO ReplTest (ID, c1) VALUES (4, 'pub')
INSERT INTO ReplTest (ID, c1) VALUES (5, 'pub')
GO
SELECT * FROM ReplTest
GO
5 - Creación de una base de datos del suscriptor
Conéctese a la instancia administrada de sql-mi-sub
mediante SQL Server Management Studio y ejecute el siguiente código de T-SQL para crear la base de datos del suscriptor vacía:
USE [master]
GO
CREATE DATABASE [ReplTran_SUB]
GO
USE [ReplTran_SUB]
GO
CREATE TABLE ReplTest (
ID INT NOT NULL PRIMARY KEY,
c1 VARCHAR(100) NOT NULL,
dt1 DATETIME NOT NULL DEFAULT getdate()
)
GO
6 - Configuración de la distribución
Conéctese a la instancia administrada de sql-mi-pub
mediante SQL Server Management Studio y ejecute el siguiente código de T-SQL para configurar la base de datos de distribución.
USE [master]
GO
EXEC sp_adddistributor @distributor = @@ServerName;
EXEC sp_adddistributiondb @database = N'distribution';
GO
7 - Configuración del publicador para usar el distribuidor
En la Instancia administrada de SQL sql-mi-pub
del publicador, cambie la ejecución de consultas al modo SQLCMD y ejecute el código siguiente para registrar el distribuidor nuevo con el publicador.
:setvar username loginUsedToAccessSourceManagedInstance
:setvar password passwordUsedToAccessSourceManagedInstance
:setvar file_storage "\\storage-account-name.file.core.windows.net\file-share-name"
-- example: file_storage "\\replstorage.file.core.windows.net\replshare"
:setvar file_storage_key "DefaultEndpointsProtocol=https;AccountName=<Storage-Account-Name>;AccountKey=****;EndpointSuffix=core.windows.net"
-- example: file_storage_key "DefaultEndpointsProtocol=https;AccountName=replstorage;AccountKey=dYT5hHZVu9aTgIteGfpYE64cfis0mpKTmmc8+EP53GxuRg6TCwe5eTYWrQM4AmQSG5lb3OBskhg==;EndpointSuffix=core.windows.net"
USE [master]
EXEC sp_adddistpublisher
@publisher = @@ServerName,
@distribution_db = N'distribution',
@security_mode = 0,
@login = N'$(username)',
@password = N'$(password)',
@working_directory = N'$(file_storage)',
@storage_connection_string = N'$(file_storage_key)'; -- Remove this parameter for on-premises publishers
Nota:
Asegúrese de usar solo barras diagonales inversas (\
) para el parámetro file_storage. El uso de una barra diagonal (/
) puede producir un error al conectarse al recurso compartido de archivos.
Este script configura un publicador local en la instancia administrada, agrega un servidor vinculado y crea un conjunto de trabajos del Agente SQL Server.
8 - Creación de la publicación y el suscriptor
A través del modo SQLCMD, ejecute el siguiente script de T-SQL para habilitar la replicación de la base de datos y configure la replicación entre el publicador, el distribuidor y el suscriptor.
-- Set variables
:setvar username sourceLogin
:setvar password sourcePassword
:setvar source_db ReplTran_PUB
:setvar publication_name PublishData
:setvar object ReplTest
:setvar schema dbo
:setvar target_server "sql-mi-sub.wdec33262scj9dr27.database.windows.net"
:setvar target_username targetLogin
:setvar target_password targetPassword
:setvar target_db ReplTran_SUB
-- Enable replication for your source database
USE [$(source_db)]
EXEC sp_replicationdboption
@dbname = N'$(source_db)',
@optname = N'publish',
@value = N'true';
-- Create your publication
EXEC sp_addpublication
@publication = N'$(publication_name)',
@status = N'active';
-- Configure your log reader agent
EXEC sp_changelogreader_agent
@publisher_security_mode = 0,
@publisher_login = N'$(username)',
@publisher_password = N'$(password)',
@job_login = N'$(username)',
@job_password = N'$(password)';
-- Add the publication snapshot
EXEC sp_addpublication_snapshot
@publication = N'$(publication_name)',
@frequency_type = 1,
@publisher_security_mode = 0,
@publisher_login = N'$(username)',
@publisher_password = N'$(password)',
@job_login = N'$(username)',
@job_password = N'$(password)';
-- Add the ReplTest table to the publication
EXEC sp_addarticle
@publication = N'$(publication_name)',
@type = N'logbased',
@article = N'$(object)',
@source_object = N'$(object)',
@source_owner = N'$(schema)';
-- Add the subscriber
EXEC sp_addsubscription
@publication = N'$(publication_name)',
@subscriber = N'$(target_server)',
@destination_db = N'$(target_db)',
@subscription_type = N'Push';
-- Create the push subscription agent
EXEC sp_addpushsubscription_agent
@publication = N'$(publication_name)',
@subscriber = N'$(target_server)',
@subscriber_db = N'$(target_db)',
@subscriber_security_mode = 0,
@subscriber_login = N'$(target_username)',
@subscriber_password = N'$(target_password)',
@job_login = N'$(username)',
@job_password = N'$(password)';
-- Initialize the snapshot
EXEC sp_startpublication_snapshot
@publication = N'$(publication_name)';
9 - Modificación de los parámetros del agente
Instancia administrada de Azure SQL está experimentando algunos problemas de back-end con la conectividad con los agentes de replicación. Mientras se aborda este problema, la solución consiste en aumentar el valor de tiempo de espera de inicio de sesión para los agentes de replicación.
Ejecute el siguiente comando de T-SQL en el publicador para aumentar el tiempo de espera de inicio de sesión:
-- Increase login timeout to 150s
update msdb..sysjobsteps set command = command + N' -LoginTimeout 150'
where subsystem in ('Distribution','LogReader','Snapshot') and command not like '%-LoginTimeout %'
Ejecute de nuevo el siguiente comando de T-SQL para volver a establecer el tiempo de espera de inicio de sesión en el valor predeterminado, en caso de que lo necesite:
-- Increase login timeout to 30
update msdb..sysjobsteps set command = command + N' -LoginTimeout 30'
where subsystem in ('Distribution','LogReader','Snapshot') and command not like '%-LoginTimeout %'
Reinicie los tres agentes para aplicar estos cambios.
10 - Prueba de la replicación
Una vez que se ha configurado la replicación, puede probarla mediante la inserción de nuevos elementos en el publicador y la observación de los cambios que se propagan al suscriptor.
Ejecute el siguiente fragmento de código de T-SQL para ver las filas en el suscriptor:
select * from dbo.ReplTest
Ejecute el siguiente fragmento de código de T-SQL para insertar filas adicionales en el publicador y, a continuación, compruebe las filas de nuevo en el suscriptor.
INSERT INTO ReplTest (ID, c1) VALUES (15, 'pub')
Limpieza de recursos
Para anular la publicación, ejecute el siguiente comando de T-SQL:
-- Drops the publication
USE [ReplTran_PUB]
EXEC sp_droppublication @publication = N'PublishData'
GO
Para quitar la opción de replicación de la base de datos, ejecute el siguiente comando de T-SQL:
-- Disables publishing of the database
USE [ReplTran_PUB]
EXEC sp_removedbreplication
GO
Para deshabilitar la publicación y la distribución, ejecute el siguiente comando de T-SQL:
-- Drops the distributor
USE [master]
EXEC sp_dropdistributor @no_checks = 1
GO
Para limpiar los recursos de Azure, elimine los recursos de Instancia administrada de SQL del grupo de recursos y, después, elimine el grupo de recursos SQLMI-Repl
.
Pasos siguientes
También puede obtener más información sobre la replicación transaccional con Instancia administrada de Azure SQL o aprender a configurar la replicación entre un publicador/distribuidor de Instancia administrada de SQL y un suscriptor de SQL Server en una máquina virtual de Azure.