Использование Azure Database Migration Service для миграции в базу данных SQL Azure
Если вы можете позволить себе отключить базу данных во время миграции в Azure, вы можете использовать несколько средств.
В нашем сценарии производства велосипедов база данных hr считается критически важной для бизнеса, но редко используется в выходные дни. Вы планируете выполнить автономную миграцию между вечером пятницы и утром понедельника, но вам нужно оценить наилучший метод миграции.
Предполагается, что все проверки перед миграцией были выполнены с помощью Azure Migrate. Этот процесс гарантирует, что проблемы с функциями и совместимостью устраняются.
Миграция с помощью Azure Database Migration Service с помощью Azure CLI
Azure Database Migration Service — это полностью управляемая служба, предназначенная для обеспечения бесперебойной миграции с нескольких источников баз данных на платформы данных Azure с минимальными простоями. Azure CLI или PowerShell можно использовать для автоматизации миграции баз данных, что идеально подходит для переноса баз данных в большом масштабе.
Расширение Azure CLI az datamigration предоставляет команды для создания и управления миграцией баз данных в базу данных SQL Azure. Этот подход особенно полезен для:
- Автоматизация миграций в рамках конвейеров CI/CD
- Перенос нескольких баз данных в большом масштабе
- Сценарии для повторяемых процессов миграции
Предпосылки
Прежде чем начать миграцию, убедитесь, что у вас есть следующее:
-
Установленный Azure CLI с расширением
datamigration - Azure Database Migration Service, созданная в вашей подписке
- Целевая база данных SQL Azure , подготовленная с помощью схемы, уже развернутой
- Локальная среда выполнения интеграции, настроенная для подключения к исходному SQL Server
Чтобы установить расширение Azure CLI для миграции данных, выполните следующую команду:
az extension add --name datamigration
Создание Службы миграции базы данных
Сначала создайте Службу Azure Database Migration Service для оркестрации действий по миграции:
# Create the Azure Database Migration Service
az datamigration sql-service create \
--resource-group "<YourResourceGroup>" \ # Name of your Azure resource group
--sql-migration-service-name "<YourMigrationService>" \ # Name for the migration service
--location "<YourLocation>" # Azure region (e.g., eastus2, westus)
Перенос схемы базы данных
Перед переносом данных необходимо перенести схему базы данных из источника в целевой объект. Используйте команду az datamigration sql-server-schema:
# Migrate schema from source to target database
az datamigration sql-server-schema \
--action "MigrateSchema" \
--src-sql-connection-str "Server=<YourSourceServer>;Initial Catalog=<YourSourceDB>;User ID=<YourSourceUser>;Password=<YourSourcePassword>" \
--tgt-sql-connection-str "Server=<YourTargetServer>.database.windows.net;Initial Catalog=<YourTargetDB>;User ID=<YourTargetUser>;Password=<YourTargetPassword>"
Запуск миграции базы данных
Создайте новую миграцию базы данных для копирования данных из источника в целевой объект:
# Create a database migration to Azure SQL Database
az datamigration sql-db create \
--resource-group "<YourResourceGroup>" \ # Name of your Azure resource group
--sqldb-instance-name "<YourTargetServer>" \ # Name of the target Azure SQL Database server
--target-db-name "<YourTargetDB>" \ # Name of the target database
--source-database-name "<YourSourceDB>" \ # Name of the source database
--source-sql-connection authentication="SqlAuthentication" \
data-source="<YourSourceServer>" \ # Source SQL Server hostname or IP
user-name="<YourSourceUser>" \ # Source SQL Server username
password="<YourSourcePassword>" \ # Source SQL Server password
encrypt-connection=true \
trust-server-certificate=true \
--target-sql-connection authentication="SqlAuthentication" \
data-source="<YourTargetServer>.database.windows.net" \ # Target Azure SQL Database server
user-name="<YourTargetUser>" \ # Target database username
password="<YourTargetPassword>" \ # Target database password
encrypt-connection=true \
trust-server-certificate=true \
--scope "/subscriptions/<YourSubscription>/resourceGroups/<YourResourceGroup>/providers/Microsoft.Sql/servers/<YourTargetServer>" \
--migration-service "/subscriptions/<YourSubscription>/resourceGroups/<YourResourceGroup>/providers/Microsoft.DataMigration/sqlMigrationServices/<YourMigrationService>"
Перенос определенных таблиц
Чтобы перенести только определенные таблицы, используйте --table-list параметр:
# Create a database migration for specific tables
az datamigration sql-db create \
--resource-group "<YourResourceGroup>" \
--sqldb-instance-name "<YourTargetServer>" \
--target-db-name "<YourTargetDB>" \
--source-database-name "<YourSourceDB>" \
--source-sql-connection authentication="SqlAuthentication" \
data-source="<YourSourceServer>" \
user-name="<YourSourceUser>" \
password="<YourSourcePassword>" \
encrypt-connection=true \
trust-server-certificate=true \
--target-sql-connection authentication="SqlAuthentication" \
data-source="<YourTargetServer>.database.windows.net" \
user-name="<YourTargetUser>" \
password="<YourTargetPassword>" \
encrypt-connection=true \
trust-server-certificate=true \
--table-list "[Person].[Person]" "[Person].[EmailAddress]" "[Sales].[Customer]" \ # Specify tables to migrate
--scope "/subscriptions/<YourSubscription>/resourceGroups/<YourResourceGroup>/providers/Microsoft.Sql/servers/<YourTargetServer>" \
--migration-service "/subscriptions/<YourSubscription>/resourceGroups/<YourResourceGroup>/providers/Microsoft.DataMigration/sqlMigrationServices/<YourMigrationService>"
Служба Database Migration Service оптимизирует процесс миграции, пропуская пустые таблицы, даже если вы выберете их.
Состояние миграции
Есть несколько статусов, которые держат вас в курсе хода выполнения миграции.
Подготовка к копированию: служба находится в процессе отключения автостатов, триггеров и индексов в целевой таблице.
Копирование: выполняется копирование данных из исходной базы данных в целевую базу данных.
Копирование завершено: копирование данных завершено, и служба ожидает завершения копирования других таблиц.
Перестроение индексов: служба перестраивает индексы в целевых таблицах.
Выполнено успешно. Все данные копируются и индексы перестроены.
Мониторинг миграции с помощью Azure CLI
Вы можете проверить состояние миграции с помощью az datamigration sql-db show команды:
# Check the status of the database migration
az datamigration sql-db show \
--resource-group "<YourResourceGroup>" \
--sqldb-instance-name "<YourTargetServer>" \
--target-db-name "<YourTargetDB>" \
--expand "MigrationStatusDetails" # Include detailed migration status
Эта команда возвращает подробные сведения о миграции, включая текущее состояние и возникающие ошибки.
Дождитесь завершения миграции
Команду можно использовать wait для приостановки выполнения скрипта до завершения миграции:
# Wait for the migration to complete before continuing
az datamigration sql-db wait \
--resource-group "<YourResourceGroup>" \
--sqldb-instance-name "<YourTargetServer>" \
--target-db-name "<YourTargetDB>" \
--created # Wait until migration is created/completed
Отмена миграции
Если необходимо остановить миграцию на стадии выполнения:
# Cancel an in-progress migration
az datamigration sql-db cancel \
--resource-group "<YourResourceGroup>" \
--sqldb-instance-name "<YourTargetServer>" \
--target-db-name "<YourTargetDB>" \
--migration-operation-id "<YourMigrationOperationId>" # ID from the migration operation
Мониторинг миграции из портал Azure
Вы также можете отслеживать действие миграции с помощью Azure Database Migration Service на портале Azure.
Чтобы отслеживать миграцию базы данных, перейдите на портал Azure и найдите экземпляр Database Migration Service. Как только вы найдете службу, вы можете просмотреть её обзор экземпляра. Выберите "Отслеживать миграцию" , чтобы получить подробные сведения о текущей миграции базы данных.
После успешного выполнения миграции перейдите на целевой сервер и проверьте целевую базу данных. Проверьте схему и данные базы данных.
Соображения по производительности
Скорость миграции сильно зависит от целевого SKU базы данных SQL Azure и узла самостоятельно размещенной среды выполнения интеграции. Мы настоятельно рекомендуем увеличить вычислительные ресурсы вашей базы данных Azure SQL перед началом процесса миграции для достижения оптимальной миграции.
При принятии решения на сервере установить локальную среду выполнения интеграции убедитесь, что этот компьютер может обрабатывать загрузку ЦП и памяти операции копирования данных.
Миграция базы данных Azure SQL может быть медленной при большом количестве таблиц из-за времени, которое уходит на запуск действий Фабрики данных Azure (ADF), даже в случае с небольшими таблицами.
Таблицы с большими BLOB-столбцами могут не выполнить миграцию из-за превышения времени ожидания.
Рекомендуется выполнять до 10 одновременных миграций баз данных на одну локально размещённую среду выполнения интеграции на одном компьютере. Масштабируйте локальную среду выполнения или создайте отдельные экземпляры на разных компьютерах, чтобы увеличить одновременные миграции баз данных.
Масштабная миграция с помощью PowerShell
Вы также можете выполнить автономную миграцию базы данных из локальной среды SQL Server в базу данных SQL Azure с помощью PowerShell.
В следующем примере база данных AdventureWorks переносится в База данных SQL Azure.
# Set up secure credentials for source and target connections
$sourcePass = ConvertTo-SecureString "<YourSourcePassword>" -AsPlainText -Force
$targetPass = ConvertTo-SecureString "<YourTargetPassword>" -AsPlainText -Force
# Start the database migration to Azure SQL Database
New-AzDataMigrationToSqlDb `
-ResourceGroupName "<YourResourceGroup>" ` # Name of your Azure resource group
-SqlDbInstanceName "<YourTargetServer>" ` # Name of the target Azure SQL Database server
-Kind "SqlDb" `
-TargetDbName "<YourTargetDB>" ` # Name of the target database
-SourceDatabaseName "<YourSourceDB>" ` # Name of the source database
-SourceSqlConnectionAuthentication SQLAuthentication `
-SourceSqlConnectionDataSource "<YourSourceServer>" ` # Source SQL Server hostname or IP
-SourceSqlConnectionUserName "<YourSourceUser>" ` # Source SQL Server username
-SourceSqlConnectionPassword $sourcePass `
-Scope "/subscriptions/<YourSubscription>/resourceGroups/<YourResourceGroup>/providers/Microsoft.Sql/servers/<YourTargetServer>" `
-TargetSqlConnectionAuthentication SQLAuthentication `
-TargetSqlConnectionDataSource "<YourTargetServer>.database.windows.net" `
-TargetSqlConnectionUserName "<YourTargetUser>" ` # Target database username
-TargetSqlConnectionPassword $targetPass `
-MigrationService "/subscriptions/<YourSubscription>/resourceGroups/<YourResourceGroup>/providers/Microsoft.DataMigration/SqlMigrationServices/<YourMigrationService>"
В следующем примере выполняется перенос подмножества таблиц из базы данных AdventureWorks .
# Migrate specific tables from source to target database
New-AzDataMigrationToSqlDb `
-ResourceGroupName "<YourResourceGroup>" `
-SqlDbInstanceName "<YourTargetServer>" `
-Kind "SqlDb" `
-TargetDbName "<YourTargetDB>" `
-SourceDatabaseName "<YourSourceDB>" `
-SourceSqlConnectionAuthentication SQLAuthentication `
-SourceSqlConnectionDataSource "<YourSourceServer>" `
-SourceSqlConnectionUserName "<YourSourceUser>" `
-SourceSqlConnectionPassword $sourcePass `
-Scope "/subscriptions/<YourSubscription>/resourceGroups/<YourResourceGroup>/providers/Microsoft.Sql/servers/<YourTargetServer>" `
-TargetSqlConnectionAuthentication SQLAuthentication `
-TargetSqlConnectionDataSource "<YourTargetServer>.database.windows.net" `
-TargetSqlConnectionUserName "<YourTargetUser>" `
-TargetSqlConnectionPassword $targetPass `
-TableList "[Person].[Person]", "[Person].[EmailAddress]" ` # Specify tables to migrate
-MigrationService "/subscriptions/<YourSubscription>/resourceGroups/<YourResourceGroup>/providers/Microsoft.DataMigration/SqlMigrationServices/<YourMigrationService>"
Дополнительные сведения о командах миграции баз данных см. по следующим ссылкам: модуль PowerShell для миграции данных и Azure CLI для миграции данных.