Использование 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
  • Перенос нескольких баз данных в большом масштабе
  • Сценарии для повторяемых процессов миграции

Предпосылки

Прежде чем начать миграцию, убедитесь, что у вас есть следующее:

  1. Установленный Azure CLI с расширением datamigration
  2. Azure Database Migration Service, созданная в вашей подписке
  3. Целевая база данных SQL Azure , подготовленная с помощью схемы, уже развернутой
  4. Локальная среда выполнения интеграции, настроенная для подключения к исходному 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. Как только вы найдете службу, вы можете просмотреть её обзор экземпляра. Выберите "Отслеживать миграцию" , чтобы получить подробные сведения о текущей миграции базы данных.

Снимок экрана страницы мониторинга в Azure Database Migration Services в портале Azure.

После успешного выполнения миграции перейдите на целевой сервер и проверьте целевую базу данных. Проверьте схему и данные базы данных.

Соображения по производительности

Скорость миграции сильно зависит от целевого 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 для миграции данных.