Migrowanie do usługi Azure SQL Database przy użyciu metody online

Ukończone

Jeśli potrzebujesz bazy danych, aby pozostać w trybie online dla użytkowników w całym procesie migracji, możesz użyć replikacji transakcyjnej, aby przenieść dane. Replikacja transakcyjna jest jedyną metodą online dostępną do migracji do usługi Azure SQL Database.

W naszym scenariuszu producenta rowerów magazyny działają przez 24 godziny, 7 dni w tygodniu i nie ma okresów braku aktywności. Zarząd chce mieć pewność, że baza danych spisu jest stale dostępna, nawet podczas migracji do usługi Azure SQL Database.

Diagram przedstawiający topologię replikacji obejmującą program SQL Server i usługę Azure SQL Database.

Co to jest replikacja transakcyjna?

Replikacja transakcyjna to sposób przenoszenia danych między stale połączonymi serwerami baz danych.

Proces rozpoczyna się od migawki obiektów i danych bazy danych publikacji. Po utworzeniu początkowej migawki wszelkie kolejne zmiany danych lub schematu w programie Publisher są zwykle dostarczane do usługi Azure SQL Database niemal w czasie rzeczywistym w miarę ich występowania.

Diagram przedstawiający kluczowe składniki replikacji transakcyjnej.

Usługa Azure SQL Database obsługuje zarówno replikację transakcyjną, jak i migawkę jako subskrybent wypychania. Oznacza to, że usługa Azure SQL Database może odbierać i stosować zmiany od wydawcy przy użyciu replikacji transakcyjnej lub migawki.

Wydawca i/lub dystrybutor może być wystąpieniem programu SQL Server, które działa lokalnie, na maszynie wirtualnej platformy Azure w chmurze lub jako wystąpienie zarządzane usługi Azure SQL.

Replikację transakcyjną można skonfigurować za pomocą programu SQL Server Management Studio lub wykonując instrukcje Języka Transact-SQL dla wydawcy. Nie można skonfigurować replikacji transakcyjnej w witrynie Azure Portal.

Replikacja transakcyjna wymaga następujących składników:

Rola Definicja
Wydawca Wystąpienie bazy danych, które hostuje dane do replikacji (źródło).
Abonent Odbiera dane replikowane przez program Publisher (element docelowy).
Dystrybutor Zbiera zmiany w artykułach z programu Publisher i dystrybuuje je do subskrybentów.
Artykuł Obiekt bazy danych; na przykład tabela zawarta w publikacji.
Publikacja Kolekcja co najmniej jednego artykułu z replikowanej bazy danych.
Subskrypcja Żądanie od subskrybenta publikacji.

Konfigurowanie replikacji transakcyjnej

Wykonaj poniższe kroki, aby przeprowadzić migrację tabeli [Person].[Person] z bazy danych AdventureWorks do usługi Azure SQL Database bez przestojów. Replikacja transakcyjna może używać tylko identyfikatorów logowania uwierzytelniania programu SQL Server do nawiązywania połączenia z usługą Azure SQL Database.

Parametr Definicja
@distributor Nazwa wystąpienia źródłowego.
@publisher Nazwa wystąpienia źródłowego.
@subscriber Usługa Azure SQL Database w formacie: <server>.database.windows.net. Usługa Azure SQL Database musi istnieć przed uruchomieniem skryptu.
@dbname Nazwa bazy danych w źródle.
@publisher_login Użytkownik SQL z wymaganymi uprawnieniami w źródle.
@publisher_password Hasło użytkownika SQL.
@destination_db Nazwa bazy danych w miejscu docelowym.
@subscriber_login Użytkownik SQL z wymaganymi uprawnieniami w miejscu docelowym.
@subscriber_password Hasło użytkownika SQL.
@working_directory Katalog roboczy replikacji, zmień tę lokalizację odpowiednio.

Dostosuj powyższe parametry zgodnie z własnym środowiskiem podczas uruchamiania skryptu.

Tworzenie dystrybutora

Poniższy skrypt tworzy bazę danych dystrybutora, wydawców dystrybutorów i agentów.

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

Tworzenie publikacji transakcyjnej

Poniższy skrypt tworzy transakcyjną publikację AdventureWorks bazy danych od wydawcy.

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

Tworzenie artykułu dla publikacji

Poniższy skrypt tworzy artykuł dla [Person].[Person] tabeli.

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

Tworzenie subskrypcji i agenta subskrypcji

Poniższy skrypt tworzy subskrypcję wypychaną do subskrybenta usługi 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

Inicjowanie i monitorowanie replikacji

Zarządzanie replikacją i monitorowanie nie są obsługiwane w usłudze Azure SQL Database. Zamiast tego wykonaj te działania z programu SQL Server. Aby zainicjować replikację, uruchom zadanie migawki, zadanie czytnika dzienników i zadanie dystrybutora.

Agent migawek i agent czytelnika dzienników można monitorować, klikając publikację prawym przyciskiem myszy i wybierając odpowiednią opcję. Jeśli agenci nie są uruchomioni, uruchom je.

Zrzut ekranu przedstawiający sposób uruchamiania agenta migawek.

Aby wyświetlić stan synchronizacji, kliknij prawym przyciskiem myszy subskrypcję, wybierz pozycję Wyświetl stan synchronizacji, a następnie uruchom agenta. Jeśli wystąpią jakiekolwiek komunikaty o błędach, sprawdź historię zadań agenta w agencie programu SQL Server. Jeśli agenci działają zgodnie z oczekiwaniami, powinny zostać wyświetlone następujące wyniki.

Agent migawki:

Zrzut ekranu przedstawiający stan agenta migawki w replikacji transakcyjnej.

Agent czytnika dzienników:

Zrzut ekranu przedstawiający stan czytnika dzienników w replikacji transakcyjnej.

Stan synchronizacji:

Diagram przedstawiający stan synchronizacji w replikacji transakcyjnej.

Po pełnej replikacji danych do usługi Azure SQL Database można kierować połączenia z bazą danych subskrybentów, a następnie zatrzymać i usunąć replikację.

Aby dowiedzieć się więcej na temat obsługiwanych konfiguracji, zobacz Replikacja do usługi Azure SQL Database.