Condividi tramite


Importare un file bacpac in un database in Database SQL di Azure o in Istanza gestita di SQL di Azure

Si applica a: Database SQL di Azure Istanza gestita di SQL di Azure

È possibile importare un database SQL Server in Database SQL di Azure o in Istanza gestita di SQL usando un file .bacpac. È possibile importare i dati da un file bacpac archiviato in un archiviazione BLOB di Azure (solo archiviazione Standard) o da una risorsa di archiviazione locale in una posizione locale. Per ottimizzare la velocità di importazione fornendo un maggior numero di risorse più veloci, ridimensionare il database a un livello di servizio e dimensioni di calcolo superiori durante il processo di importazione. Al termine dell'importazione, sarà quindi possibile ridurre le caratteristiche.

Nota

Importa ed esporta tramite collegamento privato è disponibile in anteprima.

Usare il portale di Azure

Guardare questo video per informazioni su come eseguire l'importazione da un file bacpac nel portale di Azure oppure continuare a leggere:

Il Portale di Azure supporta solo la creazione di un database singolo nel database SQL di Azure e solo da un file bacpac salvato nell'archiviazione BLOB di Azure.

Avviso

I file bacpac generati da SqlPackage su 4 GB potrebbero non riuscire a eseguire l’importazione dal portale di Azure o da Azure PowerShell con un messaggio di errore che indica File contains corrupted data.. Questo è il risultato di un problema noto e la soluzione alternativa consiste nell'usare l'utilità SqlPackage della riga di comando per importare il file .bacpac. Per altre informazioni, vedere SqlPackage e il registro dei problemi.

Per eseguire la migrazione di un database in un'istanza gestita di SQL di Azure da un file bacpac, usare SQL Server Management Studio o SQLPackage. L'uso del portale di Azure o di Azure PowerShell non è attualmente supportato.

Nota

Nei computer che elaborano le richieste di importazione ed esportazione inviate tramite il portale di Azure o PowerShell deve essere archiviato il file bacpac, oltre ai file temporanei generati da Data-Tier Application Framework (DacFX). Lo spazio su disco necessario varia significativamente tra i database con le stesse dimensioni. Potrebbe essere necessario spazio su disco fino a tre volte la dimensione del database. I computer che eseguono le richieste di importazione ed esportazione hanno solo 450 GB di spazio su disco locale. Di conseguenza, alcune richieste potrebbero non riuscire restituendo l'errore There is not enough space on the disk. È possibile ovviare a questo problema eseguendo SqlPackage in un computer con spazio su disco locale sufficiente. Per evitare il problema, è consigliabile usare SqlPackage per importare/esportare database di dimensioni superiori a 150 GB.

  1. Per eseguire l'importazione da un file bacpac in un nuovo database singolo usando il portale di Azure, aprire la pagina del server appropriato, quindi selezionare Importa database sulla barra degli strumenti.

    Screenshot della pagina di panoramica del server logico portale di Azure con l'importazione del database selezionata.

  2. Scegliere Seleziona backup. Scegliere l'account di archiviazione che ospita il database, quindi selezionare il file bacpac da cui eseguire l’importazione.

  3. Specificare la nuova dimensione del database (generalmente uguale all'origine) e specificare le credenziali dell'istanza SQL Server di destinazione. Per un elenco di valori possibili per un nuovo database in Database SQL di Azure, vedere CREATE DATABASE.

    Screenshot del portale di Azure, pagina Database SQL.

  4. Seleziona OK.

  5. Per monitorare lo stato di avanzamento dell'importazione, aprire la pagina del server del database e in Impostazioni selezionare Cronologia importazioni/esportazioni. Se l'operazione ha esito positivo, l'importazione visualizzerà lo stato Completato.

    Screenshot del portale di Azure, pagina di panoramica del server che mostra lo stato di importazione del database.

  6. Per verificare che il database sia attivo sul server, selezionare Database SQL e verificare che il nuovo database sia Online.

Utilizzo di SqlPackage

Per importare un database SQL Server tramite l'utilità della riga di comando SqlPackage, vedere la sezione relativa a parametri e proprietà dell'importazione. È possibile scaricare la versione più recente di SqlPackage per Windows, macOS o Linux.

Per la scalabilità e le prestazioni, è consigliabile usare SqlPackage, anziché il portale di Azure, nella maggior parte degli ambienti di produzione. Per informazioni da parte del team di consulenza clienti di SQL Server sull'uso di file BACPAC per la migrazione, vedere l'articolo Migrating from SQL Server to Azure SQL Database using BACPAC Files (Migrazione da SQL Server al database SQL di Azure con file BACPAC) del blog del Customer Advisory Team di SQL Server.

Il modello di provisioning basato su unità di elaborazione di database supporta valori per le dimensioni massime del database specifici per ogni livello. Quando si importa un database usare uno di questi valori supportati.

Il comando SqlPackage seguente importa il database AdventureWorks2008R2 dall'archivio locale in un server SQL logico denominato mynewserver20170403. Crea un nuovo database chiamato myMigratedDatabase con un livello di servizio Premium e un obiettivo di servizio P6. Modificare questi valori in base alle esigenze specifiche dell'ambiente.

SqlPackage /a:import /tcs:"Data Source=<serverName>.database.windows.net;Initial Catalog=<migratedDatabase>;User Id=<userId>;Password=<password>" /sf:AdventureWorks2008R2.bacpac /p:DatabaseEdition=Premium /p:DatabaseServiceObjective=P6

Importante

Per connettersi a un database SQL di Azure protetto da un firewall aziendale, è necessario che nel firewall sia aperta la porta 1433. Per connettersi a un'istanza gestita di SQL, è necessario disporre di una connessione da punto a sito o una connessione ExpressRoute.

In alternativa a nome utente e password, è possibile usare Microsoft Entra ID (in precedenza, Azure Active Directory). Attualmente, il servizio di importazione/esportazione non supporta l'autenticazione con ID Entra Microsoft quando è necessaria l'autenticazione MFA. Sostituire i parametri nome utente e password per /ua:true e /tid:"yourdomain.onmicrosoft.com". Questo esempio illustra come importare un database usando SqlPackage con l'autenticazione Microsoft Entra:

SqlPackage /a:Import /sf:testExport.bacpac /tdn:NewDacFX /tsn:apptestserver.database.windows.net /ua:True /tid:"apptest.onmicrosoft.com"

Azure Data Studio

Azure Data Studio è uno strumento gratuito open source disponibile per Windows, macOS e Linux. L'estensione "SQL Server dacpac" fornisce un'interfaccia guidata per le operazioni SqlPackage, tra cui l'esportazione e l'importazione. Per altre informazioni sull'installazione e l'uso dell'estensione vedere la documentazione dell'estensione dacpac di SQL Server.

Utilizzare PowerShell

Nota

Un'istanza gestita di SQL di Azure non supporta attualmente la migrazione di un database in un database dell'istanza da un file bacpac tramite Azure PowerShell. Per eseguire l'importazione in un'istanza gestita di SQL, usare SQL Server Management Studio o SQLPackage.

Nota

Nei computer che elaborano le richieste di importazione ed esportazione inviate tramite il portale o PowerShell deve essere archiviato il file bacpac, oltre ai file temporanei generati da Data-Tier Application Framework (DacFX). Lo spazio su disco necessario varia notevolmente tra i database con le stesse dimensioni. Potrebbe essere necessario spazio su disco fino a tre volte la dimensione del database. I computer che eseguono le richieste di importazione ed esportazione hanno solo 450 GB di spazio su disco locale. Di conseguenza, alcune richieste potrebbero non riuscire restituendo l'errore "Lo spazio su disco non è sufficiente". È possibile ovviare a questo problema eseguendo SqlPackage in un computer con spazio su disco locale sufficiente. Se occorre importare o esportare database di dimensioni superiori a 150 GB, usare SqlPackage per evitare questo problema.

Importante

Il modulo Azure Resource Manager di PowerShell è ancora supportato, ma tutte le attività di sviluppo future sono incentrate sul modulo Az.Sql. Il modulo AzureRM continuerà a ricevere correzioni di bug almeno fino a dicembre 2020. Gli argomenti per i comandi nei moduli Az e AzureRm sono sostanzialmente identici. Per altre informazioni sulla compatibilità, vedere Introduzione del nuovo modulo Az di Azure PowerShell.

Usare il cmdlet New-AzSqlDatabaseImport per inviare una richiesta di importazione database ad Azure. A seconda delle dimensioni del database, l'importazione può richiedere del tempo. Il modello di provisioning basato su unità di elaborazione di database supporta valori per le dimensioni massime del database specifici per ogni livello. Quando si importa un database usare uno di questi valori supportati.

$importRequest = New-AzSqlDatabaseImport -ResourceGroupName "<resourceGroupName>" `
    -ServerName "<serverName>" -DatabaseName "<databaseName>" `
    -DatabaseMaxSizeBytes "<databaseSizeInBytes>" -StorageKeyType "StorageAccessKey" `
    -StorageKey $(Get-AzStorageAccountKey `
        -ResourceGroupName "<resourceGroupName>" -StorageAccountName "<storageAccountName>").Value[0] `
        -StorageUri "https://myStorageAccount.blob.core.windows.net/importsample/sample.bacpac" `
        -Edition "Premium" -ServiceObjectiveName "P6" `
        -AdministratorLogin "<userId>" `
        -AdministratorLoginPassword $(ConvertTo-SecureString -String "<password>" -AsPlainText -Force)

È possibile usare il cmdlet Get-AzSqlDatabaseImportExportStatus per controllare lo stato dell'importazione. L'esecuzione di questo cmdlet subito dopo la richiesta restituisce in genere Status: InProgress. L'importazione è completa quando viene visualizzato il messaggio Status: Succeeded.

$importStatus = Get-AzSqlDatabaseImportExportStatus -OperationStatusLink $importRequest.OperationStatusLink

[Console]::Write("Importing")
while ($importStatus.Status -eq "InProgress") {
    $importStatus = Get-AzSqlDatabaseImportExportStatus -OperationStatusLink $importRequest.OperationStatusLink
    [Console]::Write(".")
    Start-Sleep -s 10
}

[Console]::WriteLine("")
$importStatus

Suggerimento

Per un altro esempio di script, vedere Importare un database da un file BACPAC.

Annullamento della richiesta di importazione

Usare Operazioni database - API Cancel o il comando Stop-AzSqlDatabaseActivity di PowerShell, come nell'esempio seguente:

Stop-AzSqlDatabaseActivity -ResourceGroupName $ResourceGroupName -ServerName $ServerName -DatabaseName $DatabaseName -OperationId $Operation.OperationId

Autorizzazioni necessarie per annullare un'importazione

Per annullare l'operazione di importazione è necessario essere membri di uno dei ruoli seguenti:

Livello di compatibilità del nuovo database

  • Il livello di compatibilità del database importato si basa sul livello di compatibilità del database di origine.
  • Dopo aver importato il database, è possibile scegliere di usare il database al livello di compatibilità corrente o a un livello superiore. Per altre informazioni sulle implicazioni e le opzioni per il funzionamento di un database a un livello di compatibilità specifico, vedere ALTER DATABASE Compatibility Level (Livello di compatibilità ALTER DATABASE). Vedere anche ALTER DATABASE SCOPED CONFIGURATION per informazioni sulle impostazioni a livello di database relative ai livelli di compatibilità.

Limiti

  • L'importazione in un database nel pool elastico non è supportata. È possibile importare i dati in un database singolo, quindi spostare quest'ultimo in un pool elastico.
  • Il servizio di importazione/esportazione non funziona quando l'opzione Consenti l'accesso a Servizi di Azure è disattivata. È però possibile aggirare il problema eseguendo manualmente SqlPackage da una macchina virtuale di Azure o eseguendo l'esportazione direttamente nel codice usando l'API DACFx.
  • L'importazione non supporta la specifica di una ridondanza di archiviazione di backup durante la creazione di un nuovo database, quindi viene usata la ridondanza geografica predefinita. Per aggirare il problema, creare prima di tutto un database vuoto con la ridondanza dell'archiviazione di backup desiderata usando il portale di Azure o PowerShell, quindi importare il file bacpac in questo database vuoto.
  • L'archiviazione protetta da firewall attualmente non è supportata.
  • Durante il processo di importazione non creare un database con lo stesso nome. Il processo di importazione crea un nuovo database, con il nome specificato.
  • Attualmente, il servizio di importazione/esportazione non supporta l'autenticazione con ID Entra Microsoft quando è necessaria l'autenticazione MFA.
  • I servizi di importazione/esportazione supportano solo l'autenticazione SQL e l'ID Microsoft Entra. Importazione/Esportazione non è compatibile con la registrazione dell'applicazione Microsoft Identity.

Strumenti aggiuntivi

È anche possibile usare queste procedure guidate.