Cursos
Módulo
Migración de cargas de trabajo de SQL Server a Azure SQL Managed Instance - Training
Migración de cargas de trabajo de SQL Server a Azure SQL Managed Instance
Este explorador ya no se admite.
Actualice a Microsoft Edge para aprovechar las características y actualizaciones de seguridad más recientes, y disponer de soporte técnico.
Se aplica a: Azure SQL Managed Instance
La replicación transaccional es una característica de Azure SQL Managed Instance y SQL Server que permite replicar datos de una tabla de Azure SQL Managed Instance o de una instancia de SQL Server en tablas colocadas en bases de datos remotas. Esta característica permite sincronizar varias tablas en bases de datos diferentes.
La replicación transaccional se puede usar para insertar los cambios realizados en una instancia administrada de Azure SQL en:
Nota
Para usar todas las características de Azure SQL Managed Instance es preciso tener las versiones más recientes de SQL Server Management Studio (SSMS) y SQL Server Data Tools (SSDT).
Los componentes clave de la replicación transaccional son el publicador, el distribuidor y el suscriptor, como se muestra en la siguiente imagen:
Role | Azure SQL Database | Instancia administrada de Azure SQL |
---|---|---|
Publicador | No | Sí |
Distribuidor | No | Sí |
Suscriptor de extracción | No | Sí |
Suscriptor de inserción | Sí | Sí |
El publicador publica los cambios realizados en algunas tablas (artículos) mediante el envío de las actualizaciones al distribuidor. El publicador puede ser una instancia administrada de Azure SQL o una instancia de SQL Server.
El distribuidor recopila los cambios en los artículos de un publicador y los distribuye a los suscriptores. El distribuidor puede ser una instancia administrada de Azure SQL o una instancia de SQL Server (cualquier versión, siempre que sea igual o superior a la del publicador).
El suscriptor recibe los cambios realizados en el publicador. Tanto una instancia de SQL Server como una instancia administrada de Azure SQL pueden ser suscriptores de inserción y de extracción, aunque las suscripciones de extracción no se admiten si el distribuidor es una instancia de administrada de Azure SQL y el suscriptor no. Una base de datos de Azure SQL Database solo puede ser un suscriptor de inserción.
Instancia administrada de Azure SQL puede ser un suscriptor de las siguientes versiones de SQL Server:
Nota
En el caso de las versiones de SQL Server que no admiten la publicación en los objetos de Azure, se puede utilizar el método de volver a publicar datos para mover datos a versiones más recientes de SQL Server.
El intento de configuración de la replicación mediante una versión anterior puede provocar los errores MSSQL_REPL20084
(El proceso no pudo conectarse al suscriptor) y MSSQL_REPL40532
(No se puede abrir el <nombre> de servidor solicitado por el inicio de sesión. No se pudo iniciar la sesión).
Existen distintos tipos de replicación:
Replicación | Azure SQL Database | Instancia administrada de Azure SQL |
---|---|---|
Transaccional estándar | Sí (solo como suscriptor) | Sí |
Instantánea | Sí (solo como suscriptor) | Sí |
Replicación de mezcla | No | No |
Punto a punto | No | No |
Bidireccional | No | Sí |
Suscripciones actualizables | No | No |
La matriz de compatibilidad de la replicación transaccional con Instancia administrada de Azure SQL es la misma que con SQL Server.
Publicador | Distribuidor | Suscriptor |
---|---|---|
SQL Server 2022 | SQL Server 2022 | SQL Server 2022 SQL Server 2019 SQL Server 2017 |
SQL Server 2019 | SQL Server 2022 SQL Server 2019 |
SQL Server 2022 SQL Server 2019 SQL Server 2017 SQL Server 2016 |
SQL Server 2017 | SQL Server 2022 SQL Server 2019 SQL Server 2017 |
SQL Server 2022 SQL Server 2019 SQL Server 2017 SQL Server 2016 SQL Server 2014 |
SQL Server 2016 | SQL Server 2022 SQL Server 2019 SQL Server 2017 SQL Server 2016 |
SQL Server 2019 SQL Server 2017 SQL Server 2016 SQL Server 2014 SQL Server 2012 |
SQL Server 2014 | SQL Server 2022 SQL Server 2019 SQL Server 2017 SQL Server 2016 SQL Server 2014 |
SQL Server 2017 SQL Server 2016 SQL Server 2014 SQL Server 2012 SQL Server 2008 R2 SQL Server 2008 |
SQL Server 2012 | SQL Server 2022 SQL Server 2019 SQL Server 2017 SQL Server 2016 SQL Server 2014 SQL Server 2012 |
SQL Server 2016 SQL Server 2014 SQL Server 2012 SQL Server 2008 R2 SQL Server 2008 |
SQL Server 2008 R2 SQL Server 2008 |
SQL Server 2022 SQL Server 2019 SQL Server 2017 SQL Server 2016 SQL Server 2014 SQL Server 2012 SQL Server 2008 R2 SQL Server 2008 |
SQL Server 2014 SQL Server 2012 SQL Server 2008 R2 SQL Server 2008 |
La replicación transaccional resulta útil en los siguientes escenarios:
Category | Sincronización de datos | Replicación transaccional |
---|---|---|
Ventajas | - Compatibilidad activo-activo - Bidireccional entre el entorno local y Azure SQL Database |
- Menor latencia - Coherencia transaccional - Reutilización de la topología existente después de la migración |
Inconvenientes | - Sin coherencia transaccional - Mayor impacto en el rendimiento |
- No se puede publicar desde Azure SQL Database - Alto costo de mantenimiento |
En general, el publicador y el distribuidor deben estar en la nube o en el entorno local. Se admiten las siguientes configuraciones:
El publicador y el distribuidor se configuran en una sola instancia administrada de SQL y los cambios se distribuyen a otra instancia administrada de SQL, base de datos de SQL Database o instancia de SQL Server.
En esta configuración, una instancia administrada de SQL publica los cambios en un distribuidor que se encuentra en otra instancia administrada de SQL que puede atender a muchas instancias administradas de SQL de origen y distribuir los cambios a uno o varios destinos de Azure SQL Database, Azure SQL Managed Instance o SQL Server.
El publicador y el distribuidor se configuran en dos Instancias administradas. Esta configuración presenta algunas restricciones:
En esta configuración, una base de datos de Azure SQL Database o Instancia administrada de Azure SQL es un suscriptor. Esta configuración admite la migración desde el entorno local a Azure. Si un suscriptor es una base de datos de Azure SQL Database, debe estar en modo de inserción.
allow_linkedserver_outbound
de la Etiqueta de servicio de destino del puerto 1433 de virtualnetwork
a internet
.Nota
Podría producirse el error 53 al conectarse a un archivo de Azure Storage si el puerto 445 del grupo de seguridad de red (NSG) de salida está bloqueado cuando el distribuidor es una base de datos de Instancia administrada de Azure SQL y el suscriptor es local. Actualice el NSG de la red virtual para resolver este problema.
Para la replicación transaccional, una instancia administrada de SQL tiene un inicio de sesión creado previamente con el nombre replAgentUser
. Este inicio de sesión es miembro del rol de servidor sysadmin
y lo usan los agentes de replicación que necesitan conectarse a una instancia administrada de SQL que participa en la configuración de replicación transaccional.
Si no se usa la replicación transaccional, se puede deshabilitar el inicio de sesión replAgentUser
. Se puede volver a habilitar más adelante si decide empezar a usar la replicación transaccional.
La replicación transaccional tiene algunas limitaciones específicas de Azure SQL Managed Instance. En esta sección, obtendrá más información sobre estas limitaciones.
Azure SQL Managed Instance usa la cuenta de Azure Storage configurada por el usuario para los archivos de instantánea que se usan para la replicación transaccional. A diferencia de SQL Server en el entorno local, Azure SQL Managed Instance no elimina los archivos de instantáneas de la cuenta de Azure Storage. Una vez que los archivos no se necesiten, debe eliminarlos, lo que se puede hacer a través de la interfaz de Azure Storage en Azure Portal, Explorador de Microsoft Azure Storage, o bien a través de clientes de línea de comandos (Azure PowerShell o CLI) o la API REST de Azure Storage Management.
Este es un ejemplo de cómo eliminar un archivo y cómo eliminar una carpeta vacía.
az storage file delete-batch --source <file_path> --account-key <account_key> --account-name <account_name>
az storage directory delete --name <directory_name> --share-name <share_name> --account-key <account_key> --account-name <account_name>
En Azure SQL Managed Instance, el número de agentes de distribución configurados para ejecutarse continuamente está limitado a 30. Para tener más agentes de distribución, es preciso que se ejecuten a petición o con una programación definida. La programación se puede definir con una frecuencia diaria y una repetición de cada 10 segundos (o más), por lo que aunque no sea continua, se puede tener un distribuidor que introduce latencia que es solo varios segundos. Cuando se necesita un gran número de distribuidores, se recomienda usar la configuración programada, en lugar de la continua.
Se admite el uso de la replicación transaccional con instancias que se encuentran en un grupo de conmutación por error. Sin embargo, si configura la replicación antes de agregar una instancia administrada de SQL a un grupo de conmutación por error, la replicación se detiene temporalmente cuando empiece a crear el grupo de conmutación por error y el monitor de replicación muestra el estado Replicated transactions are waiting for the next log backup or for mirroring partner to catch up
. La replicación se reanuda una vez que el grupo de conmutación por error se crea correctamente.
Si una instancia administrada de SQL de un publicador o distribuidor se encuentra en un grupo de conmutación por error, el administrador de la instancia administrada de SQL debe limpiar todas las publicaciones de la instancia principal anterior y volver a configurarlas en la nueva instancia principal después de una conmutación por error. En este escenario, debe llevar a cabo las siguientes acciones:
Detenga todos los trabajos de replicación que se ejecutan en la base de datos, si hay alguno.
Quite los metadatos de suscripción del publicador. Para ello, ejecute el siguiente script en la base de datos del publicador. Reemplace los valores <name of publication>
y <name of subscriber>
:
EXEC sp_dropsubscription @publication = '<name of publication>',
@article = 'all',
@subscriber = '<name of subscriber>'
Quite los metadatos de suscripción del suscriptor. Ejecute el siguiente script en la base de datos de suscripciones de la instancia administrada de SQL de suscriptor. Reemplace el valor <full DNS of publisher>
. Por ejemplo, example.ac2d23028af5.database.windows.net
:
EXEC sp_subscription_cleanup
@publisher = N'<full DNS of publisher>',
@publisher_db = N'<publisher database>',
@publication = N'<name of publication>';
Quite forzosamente todos los objetos de replicación del publicador. Para ello, ejecute el siguiente script en la base de datos publicada:
EXEC sp_removedbreplication;
Fuerce la eliminación del distribuidor anterior de la instancia administrada de SQL principal original (si realiza la conmutación por recuperación a una instancia principal anterior que tenía un distribuidor). Ejecute el siguiente script en la base de datos master
de la instancia administrada de SQL de distribuidor anterior:
EXEC sp_dropdistributor 1, 1;
Si la instancia administrada de SQL de un suscriptor se encuentra en un grupo de conmutación por error, la publicación debe configurarse para conectarse al punto de conexión del cliente de escucha del grupo de conmutación por error para la instancia administrada de SQL del suscriptor. En el caso de una conmutación por error, la acción posterior por parte del administrador de instancia administrada de SQL depende del tipo de conmutación por error que se produjo:
En circunstancias habituales, el registro de transacción se usa para registrar los cambios de los datos dentro de una base de datos. Los cambios se registran en el registro de transacciones y esto hace que el consumo de almacenamiento de registros aumente. También hay un proceso automático que permite el truncamiento seguro del registro de transacciones y este proceso reduce el espacio de almacenamiento usado para el registro. Cuando se configura la publicación para la replicación transaccional, se impide el truncamiento del registro de transacciones hasta que el trabajo del lector del registro procesa los cambios en el registro. En algunas circunstancias, el procesamiento del registro de transacciones se bloquea eficazmente y ese estado puede dar lugar a llenar todo el almacenamiento reservado para el registro de transacciones. Cuando no hay espacio disponible para el registro de transacciones y no hay más espacio para que crezca el registro de transacciones, tenemos un registro de transacciones completo. En este estado, la base de datos ya no puede procesar ninguna carga de trabajo de escritura y, de hecho, se convierte en una base de datos de solo lectura.
A veces, la publicación de replicación transaccional está configurada para una base de datos, pero el agente de registro del log no está configurado para ejecutarse. En ese caso, los cambios se acumulan en el registro de transacciones y no se procesan. Esto conduce al crecimiento constante del registro transaccional y, finalmente, al registro de transacción completo. El usuario debe asegurarse de que el trabajo del lector de registros existe y está activo. La alternativa sería deshabilitar la replicación transaccional, si no es necesaria.
A veces, el trabajo del lector de registros no puede realizar un progreso efectivo debido a tiempos de espera de consulta repetidos. Una manera de corregir los tiempos de espera de consulta es aumentar la configuración de tiempo de espera de consulta para el trabajo del agente de registro del log.
Es posible incrementar el tiempo de espera de consulta para el trabajo del lector de registros a través de SSMS. En el explorador de objetos, en Agente SQL Server, busque el trabajo que desea modificar. En primer lugar, deténgalo y, a continuación, abra sus propiedades. Busque step 2
y edítelo. Anexe el valor del comando con -QueryTimeout <timeout_in_seconds>
. Como valor de tiempo de espera de consulta, pruebe 21600
o superior. Por último, vuelva a iniciar el trabajo.
Cuando el tamaño de almacenamiento del registro de transacciones alcanza el límite máximo, que es de 2 TB, el registro no puede crecer más que eso físicamente. En este caso, la única mitigación disponible es marcar todas las transacciones que se van a replicar como procesadas, para permitir que se trunque el registro de transacciones. En la práctica, esto significa que las transacciones restantes del registro no se replicarán y deberá reinicializar la replicación.
Nota
Después de realizar la mitigación, tendrá que reinicializar la replicación, lo que significa volver a replicar todo el conjunto de datos. Se trata de una operación que se aplica al tamaño completo de los datos y puede tomar mucho tiempo, en función de la cantidad de datos que se deban replicar.
Para realizar la mitigación, primero debe detener el agente lector de registros en el distribuidor. A continuación, debe ejecutar el procedimiento almacenado sp_repldone
con la marca reset
establecida en 1
en la base de datos del publicador para permitir el truncamiento del registro de transacciones. Este comando debe asemejarse a: EXEC sp_repldone @xactid = NULL, @xact_seqno = NULL, @numtrans = 0, @time = 0, @reset = 1
. Después de esto, deberá reinicializar la replicación.
Para obtener más información sobre la configuración de la replicación transaccional, vea los siguientes tutoriales:
N'azuresqldbdns.database.windows.net
) y el nombre de la base de datos de Azure SQL Database como base de datos de destino (por ejemplo, Adventureworks
).Cursos
Módulo
Migración de cargas de trabajo de SQL Server a Azure SQL Managed Instance - Training
Migración de cargas de trabajo de SQL Server a Azure SQL Managed Instance
Documentación
Replicación en Azure SQL Database - Azure SQL Database
Puede configurar una base de datos en base de datos de Azure SQL como suscriptor de inserción en una topología de replicación transaccional o de instantáneas unidireccional desde SQL Server o Azure SQL Managed Instance.
En este tutorial se configura la replicación entre una instancia administrada del publicador, una instancia administrada del distribuidor y un suscriptor de SQL Server en una máquina virtual de Azure, junto con los componentes de redes necesarios, como el emparejamiento de red virtual y la zona DNS privada.
Configuración de la replicación entre instancias administradas - Azure SQL Managed Instance
En este tutorial aprenderá a configurar una replicación transaccional entre un publicador o distribuidor de Instancia administrada de Azure SQL y un suscriptor de Instancia administrada de SQL.