Использование онлайн-метода для миграции в База данных SQL Azure

Завершено

Если необходимо, чтобы база данных оставалась в сети для пользователей во время миграции, можно использовать репликацию транзакций для перемещения данных. Репликация транзакций — это единственный онлайн-метод, доступный для миграции в База данных SQL Azure.

В нашем сценарии производителя велосипедов склады работают на 24 часа, 7 дней в неделю, и нет периодов бездействия. Ваш совет директоров хочет убедиться, что база данных инвентаризации постоянно доступна, даже во время миграции на База данных SQL Azure.

Схема топологии репликации с использованием SQL Server и База данных SQL Azure.

Что такое репликация транзакций?

Репликация транзакций — это способ перемещения данных между постоянно подключенными серверами баз данных.

Процесс начинается с моментального снимка объектов и данных базы данных публикации. После создания начального моментального снимка все последующие изменения данных или схемы на издателе обычно доставляются в База данных SQL Azure практически в режиме реального времени.

Схема, показывающая ключевые компоненты в репликации транзакций.

База данных SQL Azure поддерживает репликацию транзакций и моментальных снимков в качестве push-подписчика. Это означает, что База данных SQL Azure может получать и применять изменения от издателя с помощью репликации транзакций или моментальных снимков.

Издатель или распространитель может быть экземпляром SQL Server, работающим локально, на виртуальной машине Azure в облаке или как Управляемый экземпляр SQL Azure.

Вы можете настроить репликацию транзакций с помощью SQL Server Management Studio или выполнить инструкции Transact-SQL на издателе. Репликация транзакций не может быть настроена из портал Azure.

Для репликации транзакций требуются следующие компоненты.

Роль Определение
Издатель Экземпляр базы данных, на котором размещаются данные для репликации (источник).
Подписчик Получает данные, реплицируемые издателем (целевым объектом).
Распространитель Собирает изменения в статьях издателя и распределяет их подписчикам.
Статья Объект базы данных; Например, таблица, включенная в публикацию.
Публикация Коллекция одной или нескольких статей из реплицируемой базы данных.
Подписка Запрос от подписчика для публикации.

Настройка репликации транзакций

Выполните приведенные ниже действия, чтобы перенести таблицу [Person].[Person] из базы данных AdventureWorks в База данных SQL Azure без простоя. Репликация транзакций может использовать только имена входа проверки подлинности SQL Server для подключения к База данных SQL Azure.

Параметр Определение
@distributor Имя исходного экземпляра.
@publisher Имя исходного экземпляра.
@subscriber База данных SQL Azure в формате: <server>.database.windows.net Перед запуском скрипта необходимо существовать База данных SQL Azure.
@dbname Имя базы данных в источнике.
@publisher_login Пользователь SQL с необходимыми разрешениями в источнике.
@publisher_password Пароль для пользователя SQL.
@destination_db Имя базы данных в месте назначения.
@subscriber_login Пользователь SQL с необходимыми разрешениями в назначении.
@subscriber_password Пароль для пользователя SQL.
@working_directory Рабочий каталог репликации измените это расположение соответствующим образом.

Настройте указанные выше параметры в соответствии с собственной средой при запуске скрипта.

Создание распространителя

Следующий сценарий создает базу данных распространителя, издателей распространителя и агентов.

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

Создание публикации транзакций

Следующий скрипт создает публикацию транзакций AdventureWorks базы данных из издателя.

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

Создание статьи для публикации

Следующий скрипт создает статью для [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

Создание подписки и агента подписки

Следующий сценарий создает push-подписку на подписчик База данных SQL Azure.

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

Запуск и мониторинг репликации

Управление репликацией и мониторинг не поддерживаются в База данных SQL Azure. Вместо этого выполните эти действия из SQL Server. Чтобы инициировать репликацию, запустите задание моментального снимка, задание чтения журналов и задание распространителя.

Вы можете отслеживать агент чтения агент моментальных снимков и журналов, щелкнув правой кнопкой мыши публикацию и выбрав соответствующий параметр. Если агенты не выполняются, запустите их.

Снимок экрана: запуск агента моментального снимка.

Чтобы просмотреть состояние синхронизации, щелкните правой кнопкой мыши подписку, выберите "Просмотреть состояние синхронизации" и запустите агент. Если возникают сообщения об ошибках, проверьте журнал заданий агента в агент SQL Server. Если агенты выполняются должным образом, вы увидите следующие результаты.

агент моментальных снимков:

Снимок экрана: состояние агента моментальных снимков в репликации транзакций.

Агент чтения журналов:

Снимок экрана: состояние чтения журнала в репликации транзакций.

Состояние синхронизации:

Схема, показывающая состояние синхронизации в репликации транзакций.

После полной репликации данных в База данных SQL Azure можно направить подключения к базе данных подписчика, а затем остановить и удалить репликацию.

Дополнительные сведения о поддерживаемых конфигурациях см. в статье "Репликация для База данных SQL Azure".