Utiliser une méthode en ligne pour migrer vers Azure SQL Database
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.
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.
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.
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é :
Agent de lecture du journal :
État de la synchronisation :
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.