Použití online metody k migraci do služby Azure SQL Database
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.
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.
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.
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:
Agent Čtenář protokolů:
Stav synchronizace:
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.