Použití online metody k migraci do služby Azure SQL Database

Dokončeno

Pokud potřebujete, aby databáze zůstala online pro uživatele v průběhu procesu migrace, můžete data přesunout pomocí transakční replikace. Transakční replikace je jediná online metoda, která je k dispozici pro migraci do služby Azure SQL Database.

V našem scénáři výrobce jízdních kol běží sklady 24 hodin, 7 dní v týdnu a neexistují žádná období nečinnosti. Vaše správní rada chce mít jistotu, že databáze inventáře je neustále dostupná, a to i během migrace do služby Azure SQL Database.

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

Co je transakční replikace?

Transakční replikace je způsob, jak přesouvat data mezi nepřetržitě připojenými databázovými servery.

Proces začíná snímkem databázových objektů a dat publikace. Po pořízení počátečního snímku se všechny následné změny dat nebo schématu v Publisheru obvykle doručí do služby Azure SQL Database téměř v reálném čase, jak k nim dojde.

Diagram showing the key components in a transactional replication.

Azure SQL Database podporuje transakční i snímkovou replikaci jako odběratele nabízených oznámení. To znamená, že Azure SQL Database může přijímat a používat změny od vydavatele pomocí transakční nebo snímkové replikace.

Vydavatelem nebo distributorem může být instance SQL Serveru, která běží místně, na virtuálním počítači Azure v cloudu nebo jako spravovaná instance Azure SQL.

Transakční replikaci můžete nakonfigurovat prostřednictvím aplikace SQL Server Management Studio nebo spuštěním příkazů jazyka Transact-SQL na vydavateli. Transakční replikaci nejde nakonfigurovat na webu Azure Portal.

Transakční replikace vyžaduje následující komponenty:

Role Definice
Vydavatel Instance databáze, která hostuje data, která se mají replikovat (zdroj).
Odběratel Přijímá data replikovaná vydavatelem (cílem).
Distributor Shromažďuje změny v článcích od Publisheru a distribuuje je odběratelům.
Článek Databázový objekt; Například tabulka, která je součástí publikace.
Publikace Kolekce jednoho nebo více článků z replikované databáze.
Předplatné Žádost od odběratelepublikace

Nastavení transakční replikace

Pomocí následujícího postupu migrujte tabulku [Person].[Person] z databáze AdventureWorks do služby Azure SQL Database bez výpadků. Transakční replikace může pro připojení ke službě Azure SQL Database používat pouze přihlášení k ověřování SQL Serveru.

Parametr Definice
@distributor Název zdrojové instance
@publisher Název zdrojové instance
@subscriber Azure SQL Database ve formátu: <server>.database.windows.net. Před spuštěním skriptu musí existovat azure SQL Database.
@dbname Název databáze ve zdroji
@publisher_login Uživatel SQL s požadovanými oprávněními ve zdroji
@publisher_password Heslo pro uživatele SQL
@destination_db Název databáze v cíli
@subscriber_login Uživatel SQL s požadovanými oprávněními v cíli
@subscriber_password Heslo pro uživatele SQL
@working_directory Pracovní adresář replikace, podle potřeby změňte toto umístění.

Při spuštění skriptu upravte výše uvedené parametry podle vlastního prostředí.

Vytvoření distributora

Následující skript vytvoří databázi distributorů, vydavatele distributorů a agenty.

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

Vytvoření transakční publikace

Následující skript vytvoří transakční publikaci AdventureWorks databáze od vydavatele.

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

Vytvoření článku pro publikaci

Následující skript vytvoří článek pro [Person].[Person] tabulku.

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

Vytvoření předplatného a agenta předplatného

Následující skript vytvoří předplatné nabízených oznámení předplatiteli služby 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

Zahájení a monitorování replikace

Správa a monitorování replikace se ze služby Azure SQL Database nepodporuje. Místo toho proveďte tyto aktivity z SQL Serveru. Pokud chcete zahájit replikaci, spusťte úlohu snímku, úlohu čtenáře protokolu a úlohu distributora.

Snímek agenta a agenta Log Reader můžete monitorovat tak, že kliknete pravým tlačítkem myši na publikaci a vyberete příslušnou možnost. Pokud agenti nejsou spuštěni, spusťte je.

Screenshot showing how to launch the snapshot agent.

Pokud chcete zobrazit stav synchronizace, klikněte pravým tlačítkem na předplatné, vyberte Zobrazit stav synchronizace a spusťte agenta. Pokud narazíte na nějaké chybové zprávy, zkontrolujte historii úloh agenta na agentu SQL Serveru. Pokud agenti běží podle očekávání, měli byste vidět následující výsledky.

Snapshot Agent:

Screenshot showing the snapshot agent status in a transactional replication.

Agent Čtenář protokolů:

Screenshot showing the log reader status in a transactional replication.

Stav synchronizace:

Diagram showing the synchronization status in a transactional replication.

Po úplné replikaci dat do služby Azure SQL Database můžete nasměrovat připojení k databázi odběratele a pak replikaci zastavit a odebrat.

Další informace o podporovaných konfiguracích najdete v tématu Replikace do služby Azure SQL Database.