Uso de Azure Database Migration Service para migrar a Azure SQL Database
Si tiene la opción de dejar la base de datos sin conexión durante la migración a Azure, hay algunas herramientas que puede usar.
En el escenario de fabricación de bicicletas, la base de datos de recursos humanos se considera crítica para la empresa, pero se usa muy poco durante los fines de semana. Ha previsto ejecutar una migración sin conexión entre el viernes por la noche y el lunes por la mañana, pero quiere evaluar el mejor método de migración.
Se supone que todas las comprobaciones previas a la migración se han realizado con Azure Migrate. Este proceso garantiza que se solucionen los problemas de características y de compatibilidad.
Migración mediante Azure Database Migration Service con la CLI de Azure
Azure Database Migration Service es un servicio totalmente administrado diseñado para habilitar migraciones sin problemas desde varios orígenes de base de datos a plataformas de datos de Azure con un tiempo de inactividad mínimo. Puede usar la CLI de Azure o PowerShell para automatizar las migraciones de bases de datos, lo que lo convierte en ideal para migrar bases de datos a escala.
La extensión de la CLI az datamigration de Azure proporciona comandos para crear y administrar migraciones de bases de datos a Azure SQL Database. Este enfoque es especialmente útil para:
- Automatización de migraciones como parte de las canalizaciones de CI/CD
- Migración de varias bases de datos a escala
- Creación de scripts para procesos de migración repetibles
Prerrequisitos
Antes de iniciar la migración, asegúrese de que tiene:
-
CLI de Azure instalada con la
datamigrationextensión - Azure Database Migration Service creado en tu suscripción
- Azure SQL Database de destino aprovisionado con el esquema ya implementado
- Entorno de ejecución de integración autohospedado configurado para la conectividad con sql Server de origen
Para instalar la extensión datamigration de la CLI de Azure, ejecute:
az extension add --name datamigration
Creación de una instancia de Database Migration Service
En primer lugar, cree una instancia de Azure Database Migration Service para organizar las actividades de migración:
# 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)
Migración del esquema de la base de datos
Antes de migrar los datos, debe migrar el esquema de base de datos del origen al destino. Use el comando 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>"
Inicio de la migración de la base de datos
Cree una nueva migración de base de datos para copiar datos del origen al destino:
# 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>"
Migración de tablas específicas
Para migrar solo tablas específicas, use el --table-list parámetro :
# 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 optimiza el proceso de migración omitiendo tablas vacías, incluso si las selecciona.
Estado de migración
Hay algunos estados que le mantienen actualizado en el progreso de la migración.
Preparación para la copia: el servicio está en proceso de deshabilitar estadísticas automáticas, desencadenadores e índices en la tabla de destino.
Copiando: la copia de datos de la base de datos de origen a la base de datos de destino está en curso.
Copia finalizada: la copia de datos está finalizada y el servicio está esperando que otras tablas terminen de copiarse.
Volver a generar índices: El servicio vuelve a generar índices en tablas de destino.
Correcto: Todos los datos se copian y se vuelven a generar los índices.
Supervisión de la migración mediante la CLI de Azure
Puede comprobar el estado de la migración mediante el az datamigration sql-db show comando :
# 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
Este comando devuelve información detallada sobre la migración, incluido el estado actual y los errores detectados.
Esperar a la finalización de la migración
Puede usar el comando para pausar la wait ejecución del script hasta que se complete la migración:
# 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
Cancelar una migración
Si necesita detener una migración en curso:
# 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
Supervisión de la migración desde Azure Portal
También puede supervisar la actividad de migración mediante Azure Database Migration Service en Azure Portal.
Para supervisar la migración de la base de datos, vaya a Azure Portal y busque la instancia de Database Migration Service. Una vez que haya localizado el servicio, puede ver la información general de la instancia. Seleccione Supervisar migraciones para acceder a la información detallada sobre la migración de bases de datos en curso.
Después de que el estado de migración sea Correcto, vaya al servidor de destino y valide la base de datos de destino. Compruebe el esquema y los datos de la base de datos.
Consideraciones de rendimiento
La velocidad de migración depende en gran medida del SKU de Azure SQL Database de destino y del host de entorno de ejecución de integración autohospedado. Recomendamos encarecidamente ampliar los recursos de cálculo de Azure SQL Database antes de iniciar el proceso de migración para garantizar una experiencia de migración óptima.
Al decidir qué servidor usar para instalar el entorno de ejecución de integración autoalojado, asegúrese de que esta máquina pueda soportar la carga de CPU y memoria de la operación de copia de datos.
La migración a Azure SQL Database puede ser lenta cuando hay un gran volumen de tablas debido al tiempo que tarda Azure Data Factory (ADF) en iniciar actividades, incluso con tablas pequeñas.
Es posible que las tablas con columnas de blobs grandes no se migren debido al tiempo de espera.
Se recomienda llevar a cabo un máximo de 10 migraciones de bases de datos simultáneas por entorno de ejecución de integración autohospedado en un solo equipo. Amplíe el runtime autohospedado o cree instancias independientes en distintos equipos para aumentar las migraciones simultáneas de bases de datos.
Migración a escala mediante PowerShell
También puede realizar una migración sin conexión de la base de datos desde SQL Server local a una instancia de Azure SQL Database mediante PowerShell.
En el ejemplo siguiente, se migra la base de datos AdventureWorks a Azure SQL Database.
# 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>"
En el ejemplo siguiente, se migra un subconjunto de tablas de la base de datos 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>"
Para más información sobre los comandos de migración de bases de datos, consulte los vínculos siguientes: Módulo de PowerShell para la migración de datos y la CLI de Azure para la migración de datos.