Миграция базы данных в Managed Service for SQL Server
Вы можете перенести кластер SQL Server в кластер Managed Service for SQL Server с помощью логического импорта снапшота базы данных или транзакционной репликации. Оба способа имеют свои ограничения:
-
Миграция с помощью логического импорта:
- В процессе создания снапшота используются блокировки таблиц.
- Процесс импорта снапшота проходит медленно по сравнению с транзакционной репликацией.
- Данные в кластере-приемнике будут актуальны только на момент создания снапшота и могут устареть.
- Этот способ не подходит для баз данных с логическими неконсистентностями — например, если в ней удалены зависимости или таблицы, на которые ссылаются представления. Если это ограничение критично, вместо этого вы можете создать моментальный снимок базы данных и направить его в службу поддержки, чтобы наши специалисты восстановили базу из снапшота вручную.
-
Миграция с помощью транзакционной репликации:
- Однонаправленность — изменения на кластере-приемнике не будут реплицироваться в кластер-источник.
- Во время работы публикации нельзя менять схему на кластере-приемнике.
Миграция с помощью логического импорта
Перенести данные из кластера SQL Server в кластер Managed Service for SQL Server можно с помощью программы sqlpackage. Она создаст файл снапшота базы SQL Server со схемой и данными таблиц и других объектов, а затем импортирует его в кластер Managed Service for SQL Server.
Чтобы мигрировать базу данных из кластера-источника SQL Server в кластер-приемник Managed Service for SQL Server с помощью логического импорта:
- Настройте кластер-источник.
- Настройте кластер-приемник.
- Создайте снапшот базы данных из кластера-источника.
- Импортируйте снапшот базы данных в кластер-приемник.
Перед началом работы
-
Создайте кластер Managed Service for SQL Server. При этом:
- Хост-мастер кластера-приемника должен находиться в публичном доступе для подключения к нему программы sqlpackage.
- В кластере-приемнике должен использоваться тот же SQL Server Collation, что и в кластере-источнике.
-
Проверьте, что вы можете подключиться к кластеру-приемнику и к кластеру-источнику с помощью SQL Server Management Studio.
Настройте кластер-источник
-
Удалите в базе-источнике всех пользователей, использующих Windows Authentication, оставив только пользователей с SQL Server Authentication.
-
Выдайте пользователю
sa
рольdb_owner
в той базе, которую собираетесь переносить, с помощью запроса:ALTER AUTHORIZATION ON DATABASE::<имя базы> TO sa;
-
Включите в базе-источнике компонент Service Broker и переключите ее модель восстановления в режим Full:
- Откройте SQL Server Management Studio.
- Откройте контекстное меню нужной базы данных и выберите пункт Properties.
- Перейдите на вкладку Options.
- Поменяйте значение опции Recovery model на Full.
- В блоке Service Broker поменяйте значение Broker Enabled на True.
Настройте кластер-приемник
Добавьте в кластере Managed Service for SQL Server всех пользователей, которые есть в базе-источнике, с теми же именами и паролями.
Создайте снапшот базы данных
Чтобы экспортировать базу данных в файл .dacpac, запустите PowerShell, перейдите в директорию с программой sqlpackage и выполните команду:
.\sqlpackage.exe `
/a:Extract `
/ssn:"<адрес кластера-источника SQL Server>" `
/sdn:"<имя базы данных>" `
/tf:"<локальный путь к файлу .dacpac>" `
/p:ExtractAllTableData=True `
/p:ExtractReferencedServerScopedElements=False
Примечание
Чтобы экспортировать только схему таблиц без самих данных, уберите из команды параметр /p:ExtractAllTableData=False
. Если нужно экспортировать только определенные таблицы, укажите параметр /p:TableData=<имя таблицы>
(этот параметр можно указывать несколько раз).
Подробнее см. в документации SQL Server.
Импортируйте снапшот базы данных в кластер-приемник
Чтобы импортировать снапшот в кластер Managed Service for SQL Server, запустите PowerShell, перейдите в директорию с программой sqlpackage и выполните команду:
.\sqlpackage.exe `
/a:Publish `
/sf:"<локальный путь к файлу .dacpac>" `
/tsn:"<FQDN хоста-мастера в кластере Managed Service for SQL Server>,1433" `
/tdn:"<имя целевой базы данных>" `
/tec:True `
/ttsc:True `
/tu:"<имя пользователя целевой БД с ролью db_owner>" `
/tp:"<пароль>" `
/p:AllowIncompatiblePlatform=True `
/p:IgnoreCryptographicProviderFilePath=True `
/p:IgnoreExtendedProperties=True `
/p:IgnoreFileAndLogFilePath=True `
/p:IgnoreFilegroupPlacement=True `
/p:IgnoreFileSize=True `
/p:IgnoreFullTextCatalogFilePath=True `
/p:IgnoreLoginSids=True `
/p:ScriptRefreshModule=False
Подробнее см. в документации SQL Server.
Миграция с помощью транзакционной репликации
Перенести данные из кластера SQL Server в кластер Managed Service for SQL Server с минимальным временем простоя можно с помощью репликации транзакций (transactional replication). Такой тип репликации поддерживается с 2016-й версии SQL Server и позволяет мигрировать данные на более поздние версии SQL Server в кластере Managed Service for SQL Server.
При репликации транзакций:
-
При инициализации агент моментальных снимков создает снапшот базы данных со схемой и файлами данных таблиц и других объектов и копирует его с издателя (publisher) на распространителя (distributor), который управляет переносом данных.
Примечание
Так как при создании снапшота используются блокировки таблиц, то рекомендуется выполнять инициализацию в период минимальных нагрузок на базу.
-
Агент чтения журнала (Log Reader Agent) переносит транзакции из лога транзакций на распространителя.
-
Снапшот и транзакции из распространителя переносятся с помощью агента распространителя (Distribution Agent) к подписчику (subscriber).
В такой схеме издатель, распространитель и оба агента располагаются в кластере-источнике, а подписчик — в кластере-приемнике. Возможны и другие варианты распределения ролей, например выделенные сервера для распространителя.
Примечание
Выполнение объемных транзакций на кластере-источнике может замедлить репликацию.
Чтобы мигрировать базу данных из кластера-источника SQL Server в кластер-приемник Managed Service for SQL Server с помощью транзакционной репликации:
- Создайте публикацию на кластере-источнике.
- Создайте подписку на кластере-источнике.
- Остановите процесс репликации и перенесите нагрузку.
Если созданные ресурсы вам больше не нужны, удалите их.
Перед началом работы
-
Создайте кластер Managed Service for SQL Server любой подходящей конфигурации. При этом:
- Укажите то же имя базы данных, что и на кластере-источнике.
- Хост-мастер кластера-приемника должен находиться в публичном доступе для подключения к нему кластера-источника.
- Версия SQL Server должна быть не ниже, чем на кластере-источнике.
-
Проверьте, что вы можете подключиться к кластеру-приемнику и к кластеру-источнику с помощью SQL Server Management Studio.
Создайте публикацию на кластере-источнике
-
Подключитесь к кластеру-источнику из SQL Server Management Studio.
-
Разверните список объектов сервера в Object Explorer.
-
Откройте контекстное меню для директории Replication и выберите New → Publication.
-
Пройдите все шаги мастера создания публикации, в том числе:
- Укажите, что сам сервер будет выступать в качестве распространителя.
- Укажите директорию для снапшота базы данных.
- Выберите базу данных, которую необходимо мигрировать.
- Выберите тип публикации Transactional replication.
- Выберите в списке статей для публикации все сущности базы данных, которые требуется реплицировать (таблицы, представления, хранимые процедуры).
- Выберите время создания снапшота базы данных.
Подробнее см. в документации SQL Server.
-
Нажмите кнопку Finish.
Примечание
-
При переносе нескольких баз для каждой из них создайте отдельную публикацию.
-
Вам потребуются права привилегированного пользователя на все таблицы, выбранные для публикации.
Создайте подписку на кластере-источнике
-
Подключитесь к кластеру-источнику из SQL Server Management Studio.
-
Разверните список объектов сервера в Object Explorer.
-
Откройте контекстное меню для директории Replication и выберите New → Subscription.
-
Пройдите все шаги мастера создания подписки, в том числе:
- Для агента-распространителя выберите Run all agents at the Distributor (запуск на кластере-источнике).
- Добавьте подписчика и укажите данные для подключения к хосту-мастеру кластера-приемника.
- Выберите для подписчика базу данных кластера-приемника.
- В параметрах безопасности Distribution Agent Security в блоке Connect to the Subscriber укажите имя и пароль учетной записи владельца базы данных на кластере-приемнике.
Подробнее см. в документации SQL Server.
-
Нажмите кнопку Finish.
Запустится процесс репликации. Чтобы следить за его статусом, запустите монитор и добавьте подписку для отслеживания.
Остановите процесс репликации и перенесите нагрузку
- Проверьте, что на кластере-приемнике доступны все перенесенные данные с кластера-источника.
- Переведите кластер-источник в режим
только чтение
:- Откройте SQL Server Management Studio.
- Откройте контекстное меню для реплицируемой базы данных, затем выберите пункт Properties.
- Выберите Database Properties → Options и в блоке State поменяйте значение Database Read Only на True.
- Остановите репликацию на кластере-источнике.
- Удалите подписку и публикацию на кластере-источнике. Подтвердите разрешение SQL Server Management Studio удалить подписчика на кластере-приемнике.
- Перенесите нагрузку на кластер-приемник.
Как удалить созданные ресурсы
Чтобы перестать платить за созданные ресурсы, удалите их.
Если вы зарезервировали статический публичный IP-адрес, удалите его.