Uso de un método en línea para migrar a Azure SQL Database
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.
¿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.
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.
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:
Agente de registro del LOG:
Estado de sincronización:
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.