Usare Servizio Migrazione del database di Azure per eseguire la migrazione al database SQL di Azure

Completato

Se è possibile portare offline il database durante la migrazione ad Azure, ci sono vari strumenti utilizzabili.

Nello scenario di produzione di biciclette, il database delle risorse umane è considerato critico per l'azienda, ma viene usato raramente nei fine settimana. È stata pianificata l'esecuzione di una migrazione offline tra venerdì sera e lunedì mattina e si vuole valutare il metodo di migrazione migliore.

Si presuppone che tutti i controlli di pre-migrazione siano stati eseguiti con Azure Migrate. Questo processo assicura che i problemi di funzionalità e compatibilità siano stati risolti.

Eseguire la migrazione con il Servizio Migrazione del database di Azure con l'interfaccia della riga di comando di Azure

Servizio Migrazione del database di Azure è un servizio completamente gestito progettato per consentire migrazioni senza problemi da più origini di database a piattaforme dati di Azure con tempi di inattività minimi. È possibile usare l'interfaccia della riga di comando di Azure o PowerShell per automatizzare le migrazioni di database, rendendola ideale per la migrazione di database su larga scala.

L'estensione dell'interfaccia della riga di comando di Azure az datamigration fornisce comandi per creare e gestire le migrazioni di database al database SQL di Azure. Questo approccio è particolarmente utile per:

  • Automazione delle migrazioni come parte delle pipeline CI/CD
  • Migrazione di più database su larga scala
  • Processi di migrazione ripetibili tramite script

Prerequisiti

Prima di avviare la migrazione, assicurarsi di disporre di:

  1. Interfaccia della riga di comando di Azure installata con l'estensione datamigration
  2. Servizio Migrazione del database di Azure creato nella sottoscrizione
  3. Provisionare il database SQL di Azure di destinazione con lo schema già implementato
  4. Runtime di integrazione self-hosted configurato per la connettività a SQL Server di origine

Per installare l'estensione data-migration della CLI di Azure, eseguire:

az extension add --name datamigration

Creare il Servizio Migrazione del database

Creare prima di tutto un Servizio Migrazione del database di Azure per orchestrare le attività di migrazione:

# 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)

Eseguire la migrazione dello schema del database

Prima di eseguire la migrazione dei dati, è necessario eseguire la migrazione dello schema del database dall'origine alla destinazione. Usare il 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>"

Avviare la migrazione del database

Creare una nuova migrazione del database per copiare i dati dall'origine alla destinazione:

# 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>"

Eseguire la migrazione di tabelle specifiche

Per eseguire la migrazione solo di tabelle specifiche, usare il --table-list parametro :

# 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>"

Il Servizio Migrazione del database ottimizza il processo di migrazione ignorando le tabelle vuote, anche se vengono selezionate.

Stato della migrazione

Esistono alcuni stati che mantengono aggiornato lo stato di avanzamento della migrazione.

  • Preparazione per la copia: il servizio è in fase di disabilitazione degli stati automatici, i trigger e gli indici nella tabella di destinazione.

  • Copia: è in corso la copia dei dati dal database di origine al database di destinazione.

  • Copia completata: la copia dei dati è stata completata e il servizio è in attesa di altre tabelle per completare la copia.

  • Ricompilazione degli indici: il servizio sta ricompilando gli indici nelle tabelle di destinazione.

  • Operazione completata: tutti i dati vengono copiati e gli indici vengono ricompilati.

Monitorare la migrazione tramite l'interfaccia della riga di comando di Azure

È possibile controllare lo stato della migrazione usando il 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

Questo comando restituisce informazioni dettagliate sulla migrazione, inclusi lo stato corrente ed eventuali errori rilevati.

Attendere il completamento della migrazione

È possibile usare il comando per sospendere l'esecuzione wait dello script fino al completamento della migrazione:

# 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

Annullare una migrazione

Se è necessario arrestare una migrazione in corso:

# 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

Monitorare la migrazione dal portale di Azure

È anche possibile monitorare l'attività di migrazione usando servizio Migrazione del database di Azure nel portale di Azure.

Per monitorare la migrazione del database, passare al portale di Azure e trovare la propria istanza del Servizio Migrazione del Database. Dopo aver individuato il servizio, è possibile visualizzarne la panoramica dell'istanza. Selezionare Monitora migrazioni per accedere a informazioni dettagliate sulla migrazione del database in corso.

Screenshot che mostra la pagina di monitoraggio in Servizi Migrazione del database di Azure nel portale di Azure.

Una volta che lo stato della migrazione è Operazione completata, passare al server di destinazione e convalidare il database di destinazione. Controllare lo schema del database e i dati.

Considerazioni sulle prestazioni

La velocità di migrazione dipende in larga parte dall'SKU del database SQL di Azure di destinazione e dall'host del runtime di integrazione self-hosted. È consigliabile aumentare le prestazioni delle risorse di calcolo del database SQL di Azure prima di avviare il processo di migrazione per un'esperienza ottimale.

Quando si decide quale server usare per installare il runtime di integrazione auto-ospitato, assicurarsi che questo server possa gestire il carico su CPU e memoria dell'operazione di copia dei dati.

La migrazione del database SQL di Azure può essere lenta con un volume elevato di tabelle a causa del tempo impiegato da Azure Data Factory (ADF) per avviare le attività, anche per le tabelle di piccole dimensioni.

Le tabelle con colonne BLOB di grandi dimensioni potrebbero non riuscire nella migrazione a causa del timeout.

È consigliabile eseguire fino a 10 migrazioni di database simultanee per ogni runtime di integrazione self-hosted in un singolo computer. Aumentare il numero di istanze del runtime self-hosted o creare istanze separate in computer diversi per aumentare le migrazioni simultanee del database.

Eseguire la migrazione su larga scala con PowerShell

È anche possibile eseguire una migrazione offline del database da SQL Server locale a un database SQL di Azure usando PowerShell.

Nell'esempio seguente viene eseguita la migrazione del database AdventureWorks nel database SQL di 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>"

Nell'esempio seguente viene eseguita la migrazione di un subset di tabelle dal database 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>"

Per ulteriori informazioni sui comandi di migrazione del database, vedere i collegamenti seguenti: modulo PowerShell per la migrazione dei dati e interfaccia a riga di comando di Azure per la migrazione dei dati.