Utiliser une méthode en ligne pour migrer vers Azure SQL Database

Effectué

Si vous avez besoin d’une base de données pour rester en ligne pour les utilisateurs tout au long du processus de migration, vous pouvez utiliser la réplication transactionnelle pour déplacer les données. La réplication transactionnelle est la seule méthode en ligne disponible pour la migration vers Azure SQL Database.

Dans notre scénario de fabricant de bicyclettes, les entrepôts fonctionnent 24 heures sur 24, 7 jours sur 7 et il n’y a aucune période d’inactivité. Votre conseil d’administration souhaite s’assurer que la base de données d’inventaire est constamment disponible, même lors de la migration vers Azure SQL Database.

Diagram showing the replication topology involving SQL Server and Azure SQL Database.

Qu’est-ce que la réplication transactionnelle ?

La réplication transactionnelle est un moyen de déplacer des données entre des serveurs de base de données connectés en continu.

Le processus commence par un instantané des objets et des données de base de données. Une fois l’instantané initial pris, toutes les modifications ultérieures apportées aux données ou au schéma sur le serveur de publication sont généralement remises à Azure SQL Database en quasi-temps réel à mesure qu’elles se produisent.

Diagram showing the key components in a transactional replication.

Azure SQL Database prend en charge la réplication transactionnelle et la réplication de capture instantanée en tant qu’abonné aux transmissions de type push. En d’autres termes, Azure SQL Database peut recevoir, puis appliquer des modifications d’un serveur de publication à l’aide d’une réplication transactionnelle ou d’une réplication de capture instantanée.

Le serveur de publication et/ou le distributeur peuvent être une instance de SQL Server qui s’exécute localement, sur une machine virtuelle Azure dans le cloud ou en tant qu’instance Azure SQL Managed Instance.

Vous pouvez configurer la réplication transactionnelle via SQL Server Management Studio ou en exécutant des instructions Transact-SQL sur le serveur de publication. Vous ne pouvez pas configurer la réplication transactionnelle depuis le Portail Azure.

La réplication transactionnelle requiert les composants suivants :

Rôle Définition
Éditeur Instance de base de données qui héberge les données à répliquer (source).
Abonné Reçoit les données répliquées par le serveur de publication (cible).
Serveur de distribution Collecte les changements apportés aux articles depuis un serveur de distribution, puis les distribue aux abonnés.
Article Objet de base de données ; par exemple, une table incluse dans la publication.
Publication Collection d’un ou plusieurs articles de la base de données en cours de réplication.
Abonnement Requête d’un abonné pour une publication.

Configurer une réplication transactionnelle

Suivez les étapes ci-dessous pour migrer le tableau [Person].[Person] de la base de données AdventureWorks vers Azure SQL Database sans temps d’arrêt. La réplication transactionnelle peut uniquement utiliser des connexions d’authentification SQL Server pour se connecter à Azure SQL Database.

Paramètre Définition
@distributor Nom de l’instance source.
@publisher Nom de l’instance source.
@subscriber Azure SQL Database au format : <server>.database.windows.net. La base de données Azure SQL Database doit exister avant d’exécuter le script.
@dbname Nom de la base de données à la source.
@publisher_login Utilisateur SQL disposant des autorisations requises à la source.
@publisher_password Mot de passe de l’utilisateur SQL.
@destination_db Nom de la base de données de destination.
@subscriber_login Utilisateur SQL disposant des autorisations requises à destination.
@subscriber_password Mot de passe de l’utilisateur SQL.
@working_directory Répertoire de travail de réplication ; modifiez cet emplacement selon les besoins.

Ajustez les paramètres ci-dessus en fonction de votre propre environnement lors de l’exécution du script.

Créer le distributeur

Le script suivant crée la base de données du distributeur, les serveurs de publication du distributeur et les agents.

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

Créer la publication transactionnelle

Le script suivant crée la publication transactionnelle de la base de données AdventureWorks depuis le serveur de publication.

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>'

Créer l’article pour la publication

Le script suivant crée l’article pour le tableau [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

Créer l’abonnement et l’agent d’abonnement

Le script suivant crée l’abonnement par émission de données pour l’abonné 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

Lancer, puis surveiller la réplication

La gestion et la surveillance de la réplication ne sont pas prises en charge depuis Azure SQL Database. Au lieu de cela, effectuez ces activités depuis SQL Server. Pour lancer la réplication, démarrez le travail instantané, le travail de lecteur de journal et le travail du distributeur.

Vous pouvez surveiller l’Agent d’instantané et l’Agent de lecture du journal en cliquant avec le bouton droit sur la publication, puis en sélectionnant l’option appropriée. Si les agents ne sont pas en cours d’exécution, démarrez-les.

Screenshot showing how to launch the snapshot agent.

Pour afficher l’état de synchronisation, cliquez avec le bouton droit sur l’abonnement, sélectionnez Afficher l’état de synchronisation, puis démarrez l’agent. Si vous rencontrez des messages d’erreur, vérifiez l’historique des travaux de l’agent sur SQL Server Agent. Si les agents s’exécutent comme prévu, les résultats suivants doivent apparaître.

Agent d’instantané :

Screenshot showing the snapshot agent status in a transactional replication.

Agent de lecture du journal :

Screenshot showing the log reader status in a transactional replication.

État de la synchronisation :

Diagram showing the synchronization status in a transactional replication.

Une fois les données entièrement répliquées sur Azure SQL Database, vous pouvez diriger les connexions vers la base de données de l’abonné, puis arrêter, puis supprimer la réplication.

Si vous souhaitez en savoir plus sur les configurations prises en charge, veuillez consulter la rubrique Réplication vers Azure SQL Database.