Verwenden einer Onlinemethode zum Migrieren zu Azure SQL-Datenbank
Wenn eine Datenbank während des gesamten Migrationsprozesses für Benutzer*innen online bleiben muss, können Sie die Daten mithilfe einer Transaktionsreplikation verschieben. Die Transaktionsreplikation ist die einzige Onlinemethode, die für die Migration zu Azure SQL-Datenbank verfügbar ist.
Bei unserem Szenario des Fahrradherstellers sind Lager rund um die Uhr die ganze Woche ohne Stillstandzeiten im Dauerbetrieb. Der Unternehmensvorstand möchte sicher sein, dass die Bestandsdatenbank auch während der Migration zu Azure SQL-Datenbank ständig verfügbar ist.
Was ist Transaktionsreplikation?
Die Transaktionsreplikation ist eine Möglichkeit zum Verschieben von Daten zwischen kontinuierlich verbundenen Datenbankservern.
Der Prozess beginnt mit einer Momentaufnahme des Veröffentlichungsdatenbankobjekts und der Daten. Sobald die anfängliche Momentaufnahme erstellt wurde, werden alle nachfolgenden Änderungen an den Daten oder Schemas auf dem Verleger in der Regel in Quasi-Echtzeit an Azure SQL-Datenbank übermittelt.
Azure SQL-Datenbank unterstützt sowohl die Transaktions- als auch die Momentaufnahmereplikation als Pushabonnent. Das bedeutet, dass Azure SQL-Datenbank Änderungen von einem Verleger mithilfe einer Transaktions- oder Momentaufnahmereplikation empfangen und anwenden kann.
Der Verleger und/oder Verteiler kann eine Instanz von SQL Server sein, die entweder lokal, auf einer Azure-VM in der Cloud oder als Instanz von Azure SQL Managed Instance ausgeführt wird.
Sie können die Transaktionsreplikation über SQL Server Management Studio oder durch Ausführen von Transact-SQL-Anweisungen auf dem Verleger konfigurieren. Die Transaktionsreplikation kann nicht im Azure-Portal konfiguriert werden.
Die Transaktionsreplikation erfordert die folgenden Komponenten:
Rolle | Definition |
---|---|
Herausgeber | Eine Datenbankinstanz, die die zu replizierenden Daten hostet (Quelle). |
Abonnent | Empfängt die Daten, die vom Verleger repliziert werden (Ziel). |
Verteiler | Sammelt Änderungen in den Artikeln von einem Verleger und verteilt sie an die Abonnenten. |
Artikel | Ein Datenbankobjekt wie beispielsweise eine Tabelle, die in der Veröffentlichung enthalten ist. |
Veröffentlichung | Eine Sammlung mit einem oder mehreren Artikeln aus der replizierten Datenbank. |
Abonnement | Eine Anforderung einer Veröffentlichung von einem Abonnenten. |
Einrichten einer Transaktionsreplikation
Führen Sie die folgenden Schritte aus, um die Tabelle [Person].[Person]
aus der AdventureWorks-Datenbank ohne Downtime zu Azure SQL-Datenbank zu migrieren. Bei der Transaktionsreplikation können nur SQL Server-Authentifizierungsanmeldungen verwendet werden, um eine Verbindung mit Azure SQL-Datenbank herzustellen.
Parameter | Definition |
---|---|
@distributor |
Name der Quellinstanz. |
@publisher |
Name der Quellinstanz. |
@subscriber |
Azure SQL-Datenbank im folgenden Format: <server>.database.windows.net . Die Azure SQL-Datenbank muss vorhanden sein, bevor das Skript ausgeführt wird. |
@dbname |
Datenbankname in der Quelle. |
@publisher_login |
SQL-Benutzer*in mit den erforderlichen Berechtigungen in der Quelle. |
@publisher_password |
Kennwort für den*die SQL-Benutzer*in. |
@destination_db |
Datenbankname im Ziel. |
@subscriber_login |
SQL-Benutzer*in mit den erforderlichen Berechtigungen im Ziel. |
@subscriber_password |
Kennwort für den*die SQL-Benutzer*in. |
@working_directory |
Arbeitsverzeichnis der Replikation (ändern Sie diesen Speicherort entsprechend Ihren Anforderungen). |
Passen Sie die obigen Parameter an Ihre Umgebung an, wenn Sie das Skript ausführen.
Erstellen des Verteilers
Das folgende Skript erstellt die Verteilerdatenbank, die Verteilerverleger und die 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
Erstellen der Transaktionsveröffentlichung
Das folgende Skript erstellt die Transaktionsveröffentlichung der AdventureWorks
-Datenbank vom Verleger.
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>'
Erstellen des Artikels für die Veröffentlichung
Das folgende Skript erstellt den Artikel für die Tabelle [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
Erstellen des Abonnements und des Abonnement-Agents
Das folgende Skript erstellt das Pushabonnement für den Azure SQL-Datenbank-Abonnenten.
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
Initiieren und Überwachen der Replikation
Die Replikationsverwaltung und -überwachung werden von Azure SQL-Datenbank nicht unterstützt. Führen Sie stattdessen die folgenden Aktivitäten in SQL Server aus. Um die Replikation zu initiieren, starten Sie den Momentaufnahmeauftrag, den Protokollleserauftrag und den Verteilerauftrag.
Sie können den Momentaufnahmen-Agent und den Protokolllese-Agent überwachen, indem Sie mit der rechten Maustaste auf die Veröffentlichung klicken und die entsprechende Option auswählen. Falls die Agents nicht ausgeführt werden, starten Sie sie.
Klicken Sie zum Anzeigen des Synchronisierungsstatus mit der rechten Maustaste auf das Abonnement, wählen Sie Synchronisierungsstatus anzeigen aus, und starten Sie dann den Agent. Wenn Fehlermeldungen auftreten, überprüfen Sie den Agent-Auftragsverlauf auf dem SQL Server-Agent. Wenn die Agents wie erwartet ausgeführt werden, sollten die folgenden Ergebnisse angezeigt werden.
Momentaufnahmen-Agent:
Protokolllese-Agent:
Synchronisierungsstatus:
Nachdem die Daten vollständig zu Azure SQL-Datenbank repliziert wurden, können Sie die Verbindungen an die Abonnentendatenbank weiterleiten und dann die Replikation beenden und entfernen.
Weitere Informationen zu unterstützten Konfigurationen finden Sie unter Replikation zu Azure SQL-Datenbank.