Использование онлайн-метода для миграции в База данных SQL Azure
Если необходимо, чтобы база данных оставалась в сети для пользователей во время миграции, можно использовать репликацию транзакций для перемещения данных. Репликация транзакций — это единственный онлайн-метод, доступный для миграции в База данных SQL Azure.
В нашем сценарии производителя велосипедов склады работают на 24 часа, 7 дней в неделю, и нет периодов бездействия. Ваш совет директоров хочет убедиться, что база данных инвентаризации постоянно доступна, даже во время миграции на База данных 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".