Uso de un método en línea para migrar a Azure SQL Database

Completado

Si necesita que una base de datos siga estando en línea para los usuarios durante el proceso de migración, puede usar la replicación transaccional para mover los datos. La replicación transaccional es el único método en línea disponible para migrar a Azure SQL Database.

En nuestro escenario del fabricante de bicicletas, los almacenes trabajan las 24 horas del día, los 7 días de la semana, y no hay períodos de inactividad. La junta directiva quiere asegurarse de que la base de datos del inventario esté disponible sin interrupciones, incluso durante la migración a Azure SQL Database.

Diagrama que muestra la topología de replicación relacionada con SQL Server y Azure SQL Database.

¿Qué es la replicación transaccional?

La replicación transaccional es una manera de mover datos entre servidores de bases de datos conectados continuamente.

El proceso comienza con una instantánea de los objetos y datos de la base de datos de publicación. Una vez realizada la instantánea inicial, los cambios posteriores en los datos o esquemas del publicador se entregan a Azure SQL Database, por lo general, casi en tiempo real a medida que se producen.

Diagrama que muestra los componentes clave en una replicación transaccional.

Azure SQL Database admite la replicación transaccional y de instantáneas como suscriptor de inserción. Esto significa que Azure SQL Database puede recibir y aplicar cambios de un publicador mediante una replicación transaccional o de instantáneas.

El publicador o distribuidor puede ser una instancia de SQL Server que se ejecuta localmente, en una máquina virtual de Azure en la nube, o como una instancia de Azure SQL Managed Instance.

Puede configurar la replicación transaccional a través de SQL Server Management Studio o mediante la ejecución de instrucciones de Transact-SQL en el publicador. La replicación transaccional no se puede configurar desde Azure Portal.

La replicación transaccional requiere los siguientes componentes:

Rol Definición
Publicador Una instancia de base de datos que hospeda los datos que se van a replicar (origen).
Suscriptor Recibe los datos replicados por el publicador (destino).
Distribuidor Recopila los cambios en los artículos de un publicador y los distribuye a los suscriptores.
Artículo Un objeto de base de datos; por ejemplo, una tabla que se incluye en la publicación.
Publicación Un conjunto de uno o más artículos de la base de datos que se está replicando.
Suscripción Una solicitud de un suscriptor para una publicación.

Configuración de una replicación transaccional

Siga los pasos siguientes para migrar la tabla [Person].[Person] de la base de datos AdventureWorks a Azure SQL Database sin tiempo de inactividad. La replicación transaccional solo puede usar inicios de sesión de autenticación de SQL Server para conectarse a una instancia de Azure SQL Database.

Parámetro Definición
@distributor Nombre de instancia de origen.
@publisher Nombre de instancia de origen.
@subscriber Azure SQL Database en el formato: <server>.database.windows.net. La instancia de Azure SQL Database debe existir antes de ejecutar el script.
@dbname Nombre de la base de datos en el origen.
@publisher_login Usuario SQL con permisos necesarios en el origen.
@publisher_password Contraseña para el usuario de SQL.
@destination_db Nombre de la base de datos en el destino.
@subscriber_login Usuario SQL con permisos necesarios en el destino.
@subscriber_password Contraseña para el usuario de SQL.
@working_directory Directorio de trabajo de replicación, cambie esta ubicación según corresponda.

Ajuste los parámetros anteriores según su propio entorno al ejecutar el script.

Creación del distribuidor

El siguiente script crea la base de datos del distribuidor, los publicadores del distribuidor y los agentes.

USE [master]
GO

EXEC sp_adddistributor @distributor = N'CONTOSO-SRV', @password = N''
GO

EXEC sp_adddistributiondb 
		@database = N'distribution', 
		@data_folder = N'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Data', 
		@data_file = N'distribution.MDF', 
		@data_file_size = 13, 
		@log_folder = N'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Data', 
		@log_file = N'distribution.LDF', 
		@log_file_size = 9, 
		@min_distretention = 0, 
		@max_distretention = 72, 
		@history_retention = 48, 
		@deletebatchsize_xact = 5000, 
		@deletebatchsize_cmd = 2000, 
		@security_mode = 1
GO

-- Adding the distribution publishers
exec sp_adddistpublisher 
	@publisher = N'CONTOSO-SRV', 
	@distribution_db = N'distribution',
	@security_mode = 1, 
	@working_directory = N'C:\REPL', 
	@trusted = N'false', 
	@thirdparty_flag = 0, 
	@publisher_type = N'MSSQLSERVER'
GO

exec sp_addsubscriber 
	@subscriber = N'contoso.database.windows.net', 
	@type = 0, 
	@description = N'Azure SQL Database (target)'
GO

-- Enabling the replication database
use master
exec sp_replicationdboption 
	@dbname = N'AdventureWorks', 
	@optname = N'publish', 
	@value = N'true'
GO

--Adds a Log Reader agent for the AdventureWorks database. 
exec [AdventureWorks].sys.sp_addlogreader_agent 
	@publisher_security_mode = 1
GO

--Adds a Queue Reader agent for the distributor.
exec [AdventureWorks].sys.sp_addqreader_agent 
	@frompublisher = 1
GO

Creación de la publicación transaccional

El siguiente script crea la publicación transaccional de la base de datos AdventureWorks desde el publicador.

USE [AdventureWorks]
GO

EXEC sp_addpublication 
	@publication = N'REPL-AdventureWorks', 
	@description = N'Transactional publication of database ''AdventureWorks'' from Publisher ''CONTOSO-SRV''.', 
	@sync_method = N'concurrent', 
	@retention = 0, 
	@allow_push = N'true', 
	@allow_pull = N'true', 
	@allow_anonymous = N'true', 
	@enabled_for_internet = N'false', 
	@snapshot_in_defaultfolder = N'false', 
	@alt_snapshot_folder = N'C:\REPL', 
	@compress_snapshot = N'true', 
	@ftp_port = 21,
	@ftp_login = N'anonymous', 
	@allow_subscription_copy = N'false', 
	@add_to_active_directory = N'false', 
	@repl_freq = N'continuous', 
	@status = N'active', 
	@independent_agent = N'true', 
	@immediate_sync = N'true', 
	@allow_sync_tran = N'false',
	@autogen_sync_procs = N'false', 
	@allow_queued_tran = N'false', 
	@allow_dts = N'false', 
	@replicate_ddl = 1, 
	@allow_initialize_from_backup = N'false', 
	@enabled_for_p2p = N'false',
	@enabled_for_het_sub = N'false'
GO

exec sp_addpublication_snapshot 
	@publication = N'REPL-AdventureWorks', 
	@frequency_type = 1, 
	@frequency_interval = 0, 
	@frequency_relative_interval = 0, 
	@frequency_recurrence_factor = 0, 
	@frequency_subday = 0, 
	@frequency_subday_interval = 0,
	@active_start_time_of_day = 0, 
	@active_end_time_of_day = 235959, 
	@active_start_date = 0,
	@active_end_date = 0, 
	@publisher_security_mode = 0,
	@publisher_login = N'sqladmin', 
	@publisher_password = N'<pwd>'

Creación del artículo para la publicación

El siguiente script crea el artículo para la tabla [Person].[Person].

USE [AdventureWorks]
GO

EXEC sp_addarticle 
	@publication = N'REPL-AdventureWorks', 
	@article = N'Person', 
	@source_owner = N'Person', 
	@source_object = N'Person',
	@type = N'logbased', 
	@description = N'', 
	@creation_script = N'',
	@pre_creation_cmd = N'drop', 
	@schema_option = 0x000000000803509F, 
	@identityrangemanagementoption = N'none', 
	@destination_table = N'Person',
	@destination_owner = N'Person',
	@status = 24, 
	@vertical_partition = N'false', 
	@ins_cmd = N'CALL [sp_MSins_PersonPerson]', 
	@del_cmd = N'CALL [sp_MSdel_PersonPerson]', 
	@upd_cmd = N'SCALL [sp_MSupd_PersonPerson]'
GO

Creación de la suscripción y el agente de suscripción

El siguiente script crea la suscripción de inserción al suscriptor de Azure SQL Database.

USE [AdventureWorks]
GO

EXEC sp_addsubscription 
	@publication = N'REPL-AdventureWorks', 
	@subscriber = N'contoso.database.windows.net', 
	@destination_db = N'my-db',
	@subscription_type = N'Push',
	@sync_type = N'automatic',
	@article = N'all',
	@update_mode = N'read only', 
	@subscriber_type = 0

exec sp_addpushsubscription_agent 
	@publication = N'REPL-AdventureWorks', 
	@subscriber = N'contoso.database.windows.net', 
	@subscriber_db = N'my-db',
	@job_login = null, 
	@job_password = null, 
	@subscriber_security_mode = 0, 
	@subscriber_login = N'sqladmin',
	@subscriber_password = '<pwd>', 
	@frequency_type = 64, 
	@frequency_interval = 1, 
	@frequency_relative_interval = 1, 
	@frequency_recurrence_factor = 0,
	@frequency_subday = 4, 
	@frequency_subday_interval = 5,
	@active_start_time_of_day = 0, 
	@active_end_time_of_day = 235959, 
	@active_start_date = 0, 
	@active_end_date = 0, 
	@dts_package_location = N'Distributor'
GO

Inicio y supervisión de la replicación

La administración y supervisión de la replicación no se admiten en Azure SQL Database. En su lugar, realice estas actividades desde SQL Server. Para iniciar la replicación, inicie el trabajo de instantánea, el trabajo del lector de registros y el trabajo del distribuidor.

Puede supervisar el agente de instantáneas y el agente de registro del LOG al hacer clic con el botón derecho en la publicación y seleccionar la opción adecuada. Si los agentes no se están ejecutando, inícielos.

Captura de pantalla que muestra cómo iniciar el agente de instantánea.

Para ver el estado de sincronización, haga clic con el botón derecho en la suscripción, seleccione Ver estado de sincronización y, después, inicie el agente. Si encuentra algún mensaje de error, compruebe el historial de trabajos del agente en el Agente SQL Server. Si los agentes se ejecutan según lo previsto, debería ver los resultados siguientes.

Agente de instantáneas:

Captura de pantalla que muestra el estado de agente de instantáneas en una replicación transaccional.

Agente de registro del LOG:

Captura de pantalla que muestra el estado de lector de registros en una replicación transaccional.

Estado de sincronización:

Diagrama que muestra el estado de sincronización en una replicación transaccional.

Una vez que los datos se replican completamente en Azure SQL Database, puede dirigir las conexiones a la base de datos del suscriptor y, después, detener y quitar la replicación.

Para obtener más información sobre las configuraciones admitidas, consulte Replicación en Azure SQL Database.