Eseguire l'esportazione in un file BACPAC - Database SQL di Azure e Istanza gestita di SQL di Azure

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

Quando è necessario esportare un database per l'archiviazione o per il passaggio a un'altra piattaforma, è possibile esportare lo schema e i dati del database in un file BACPAC . Un file BACPAC è un file ZIP con estensione BACPAC contenente i metadati e i dati del database. Un file BACPAC può essere archiviato in Archiviazione BLOB di Azure o nell'archiviazione locale in un percorso locale e successivamente importato nuovamente in database Azure SQL, Istanza gestita di SQL di Azure o in un'istanza di SQL Server.

Nota

La funzionalità di esportazione in Azure SQL livello di database Hyperscale è ora disponibile in anteprima.

Considerazioni

  • Affinché un'esportazione sia coerente in modo transazionale, è necessario assicurarsi che non si verifichi alcuna attività di scrittura durante l'esportazione o che si stia esportando da una copia coerente a livello di transazione del database.

  • Se si sta eseguendo l'esportazione nell'archiviazione BLOB, la dimensione massima di un file BACPAC è 200 GB. Per archiviare un file BACPAC di dimensioni maggiori, esportarlo nell'archiviazione locale con SqlPackage.exe.

  • L'esportazione di un file BACPAC in Archiviazione Premium di Azure usando i metodi descritti in questo articolo non è supportata.

  • L'archiviazione protetta da firewall attualmente non è supportata.

  • L'archiviazione non modificabile non è attualmente supportata.

  • Il nome del file di archiviazione o il valore di input per StorageURI deve contenere meno di 128 caratteri e non può terminare con '.' e non può contenere caratteri speciali come un carattere di spazio o '<,*>,*,%,,&:,,/,?'.

  • Se l'operazione di esportazione dura oltre 20 ore, potrebbe essere annullata. Per migliorare le prestazioni durante l'esportazione è possibile:

    • Aumentare temporaneamente le dimensioni di calcolo.
    • Interrompere tutte le attività di lettura e scrittura durante l'esportazione.
    • Usare un indice cluster con valori non Null in tutte le tabelle di grandi dimensioni. Senza indici cluster, l'esportazione potrebbe non riuscire se dovesse durare più di 6 - 12 ore. Questo perché i servizi di esportazione devono completare la scansione della tabella prima di provare a esportarla per intero. Un modo valido di determinare se le tabelle sono ottimizzate per l'esportazione consiste nell'eseguire DBCC SHOW_STATISTICS e verificare che il parametro RANGE_HI_KEY non sia null e il relativo valore abbia distribuzione valida. Per informazioni dettagliate, vedere DBCC SHOW_STATISTICS.
  • Istanza gestita di SQL di Azure attualmente non supporta l'esportazione di un database in un file BACPAC usando il portale di Azure o il Azure PowerShell. Per esportare un'istanza gestita in un file BACPAC, usare SQL Server Management Studio (SSMS) o SQLPackage.

  • Per i database nel livello di servizio Hyperscale, l'esportazione/importazione BACPAC da portale di Azure, da PowerShell tramite New-AzSqlDatabaseExport o New-AzSqlDatabaseImport, dall'interfaccia della riga di comando di Azure tramite az sql db export e az sql db import e dall'API REST non è supportata. L'importazione/esportazione BACPAC per database Hyperscale di dimensioni inferiori (fino a 200 GB) è supportata tramite SSMS e SQLPackage versione 18.4 e successive. Per i database di dimensioni maggiori, l'esportazione/importazione BACPAC può richiedere molto tempo e potrebbe non riuscire per vari motivi.

Nota

I BACPAC non sono destinati a essere utilizzati per il backup e le operazioni di ripristino. Azure crea automaticamente i backup per ogni database utente. Per altre informazioni, vedere Panoramica sulla continuità aziendale e Backup del database SQL.

Portale di Azure

L'esportazione di un file BACPAC di un database da Istanza gestita di SQL di Azure o da un database nel livello di servizio Hyperscale tramite il portale di Azure non è attualmente supportato. Vedere Considerazioni.

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 richiesto varia in modo significativo tra i database con le stesse dimensioni e può richiedere spazio su disco fino a tre volte le dimensioni del database. I computer che eseguono la richiesta di importazione/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.exe in un computer con spazio su disco locale sufficiente. È consigliabile usare SQLPackage per importare/esportare database di dimensioni superiori a 150 GB per evitare questo problema.

  1. Per esportare un database usando il portale di Azure, aprire la pagina per il database e selezionare Esporta sulla barra degli strumenti.

    Screenshot che evidenzia il pulsante Esporta.

  2. Specificare il nome del file BACPAC, selezionare un account di archiviazione di Azure esistente e un contenitore per l'esportazione e quindi fornire le credenziali appropriate per l'accesso al database di origine. Qui è necessario un account di accesso amministratore di SQL Server anche se si è l'amministratore di Azure, poiché l'amministratore di Azure non equivale ad avere autorizzazioni di amministratore in Azure SQL database o Istanza gestita di SQL di Azure.

    Esportazione di database

  3. Selezionare OK.

  4. Per monitorare lo stato di avanzamento dell'operazione di esportazione, aprire la pagina per il server contenente il database da esportare. In Gestione dati selezionare Importa/Esporta cronologia.

Utilità SQLPackage

È consigliabile usare l'utilità SQLPackage per la scalabilità e le prestazioni nella maggior parte degli ambienti di produzione. È possibile eseguire più comandi sqlpackage.exe in parallelo per subset di tabelle per velocizzare le operazioni di importazione/esportazione.

Per esportare un database in database SQL tramite l'utilità della riga di comando SQLPackage, vedere Esportare parametri e proprietà. L'utilità SQLPackage è disponibile per Windows, macOS e Linux.

Questo esempio illustra come esportare un database usando sqlpackage.exe con l'autenticazione universale di Active Directory:

sqlpackage.exe /a:Export /tf:testExport.BACPAC /scs:"Data Source=apptestserver.database.windows.net;Initial Catalog=MyDB;" /ua:True /tid:"apptest.onmicrosoft.com"

Azure Data Studio

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

SQL Server Management Studio (SSMS)

Le versioni più recenti di SQL Server Management Studio forniscono una procedura guidata per esportare un database in Azure SQL Database o un database Istanza gestita di SQL in un file BACPAC. Vedere Esportazione guidata applicazione livello dati.

PowerShell

L'esportazione di un file BACPAC di un database da Istanza gestita di SQL di Azure o da un database nel livello di servizio Hyperscale tramite PowerShell non è attualmente supportato. Vedere Considerazioni.

Usare il cmdlet New-AzSqlDatabaseExport per inviare una richiesta di esportazione del database al servizio database Azure SQL. A seconda delle dimensioni del database, l'operazione di esportazione potrebbe richiedere molto tempo.

$exportRequest = New-AzSqlDatabaseExport -ResourceGroupName $ResourceGroupName -ServerName $ServerName `
  -DatabaseName $DatabaseName -StorageKeytype $StorageKeytype -StorageKey $StorageKey -StorageUri $BacpacUri `
  -AdministratorLogin $creds.UserName -AdministratorLoginPassword $creds.Password

Per controllare lo stato della richiesta di esportazione, usare il cmdlet Get-AzSqlDatabaseImportExportStatus . L'esecuzione di questo cmdlet subito dopo la richiesta restituisce in genere Status: InProgress. Al termine dell'esportazione, il messaggio restituito è Status: Succeeded.

$exportStatus = Get-AzSqlDatabaseImportExportStatus -OperationStatusLink $exportRequest.OperationStatusLink
[Console]::Write("Exporting")
while ($exportStatus.Status -eq "InProgress")
{
    Start-Sleep -s 10
    $exportStatus = Get-AzSqlDatabaseImportExportStatus -OperationStatusLink $exportRequest.OperationStatusLink
    [Console]::Write(".")
}
[Console]::WriteLine("")
$exportStatus

Annullare la richiesta di esportazione

Usare l'API Database Operations - Cancel o il comando PowerShell Stop-AzSqlDatabaseActivity per annullare una richiesta di esportazione. Ecco un esempio di comando di PowerShell:

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

Passaggi successivi