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 znázorňující topologii replikace zahrnující SQL Server a 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 znázorňující klíčové komponenty v transakční replikaci

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).
Předplatitel 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.

Snímek obrazovky znázorňující, jak spustit agenta snímku

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:

Snímek obrazovky znázorňující stav agenta snímku v transakční replikaci

Agent Čtenář protokolů:

Snímek obrazovky zobrazující stav čtečky protokolů v transakční replikaci

Stav synchronizace:

Diagram znázorňující stav synchronizace v transakční replikaci

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.