Verwenden einer Onlinemethode zum Migrieren zu Azure SQL-Datenbank

Abgeschlossen

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.

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

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.

Diagram showing the key components in a transactional replication.

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.

Screenshot showing how to launch the snapshot agent.

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:

Screenshot showing the snapshot agent status in a transactional replication.

Protokolllese-Agent:

Screenshot showing the log reader status in a transactional replication.

Synchronisierungsstatus:

Diagram showing the synchronization status in a transactional replication.

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.