Esportare un database SQL di Azure in un file BACPAC

Quando è necessario esportare un database per l'archiviazione o lo spostamento in un'altra piattaforma, è possibile esportare lo schema di database e i dati in un file BACPAC. Un file BACPAC è un file ZIP con un'estensione bacpac contenente i metadati e dati da un database di SQL Server. È possibile memorizzare questo tipo di file in un'archiviazione BLOB di Azure o in un'archiviazione locale e successivamente importarlo nuovamente nel database SQL di Azure o in un'installazione locale di SQL Server.

Importante

La funzionalità di esportazione automatizzata di database SQL di Azure è stata ritirata il 1° marzo 2017. È possibile usare la conservazione dei backup a lungo termine o Automazione di Azure per archiviare periodicamente i database SQL con PowerShell in base alla pianificazione desiderata. Per un esempio, scaricare lo script di PowerShell di esempio da Github.

Considerazioni relative all'esportazione di un database SQL di Azure

  • Perché un'esportazione sia coerente dal punto di vista transazionale, è necessario assicurarsi che non si verifichino attività di scrittura durante l'esportazione o che l'esportazione sia eseguita da una copia coerente dal punto di vista transazionale del database SQL di Azure.
  • 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, eseguire l'esportazione in una risorsa di archiviazione locale.
  • L'esportazione di un file BACPAC in Archiviazione Premium di Azure usando i metodi descritti in questo articolo non è supportata.
  • Se l'operazione di esportazione da un database SQL di Azure dura oltre 20 ore, potrebbe essere annullata. Per migliorare le prestazioni durante l'esportazione è possibile:
    • Aumentare temporaneamente il livello di servizio.
    • Interrompere tutte le attività di lettura e scrittura durante l'esportazione.
    • Utilizzare 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 i dettagli, vedere DBCC SHOW_STATISTICS.

Nota

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

Eseguire l'esportazione in un file BACPAC con il portale di Azure

Per esportare un database con il portale di Azure, aprire la pagina relativa al database e fare clic su Esporta sulla barra degli strumenti. Specificare il nome del file BACPAC, l'account di archiviazione di Azure, un contenitore per l'esportazione e le credenziali per la connessione al database di origine.

Esportazione di un database

Per monitorare lo stato di avanzamento dell'operazione di esportazione, aprire la pagina per il server logico contenente il database da esportare. Scorrere fino a Operazioni e quindi fare clic sulla cronologia di Importazione/Esportazione.

Cronologia delle esportazioni Stato nella cronologia delle esportazioni

Eseguire l'esportazione in un file BACPAC con l'utilità SQLPackage

Per esportare un database SQL tramite l'utilità della riga di comando SqlPackage, vedere la sezione relativa ai parametri e proprietà dell'importazione. L'utilità SQLPackage viene offerta con le versioni più recenti di SQL Server Management Studio e SQL Server Data Tools per Visual Studio. È tuttavia possibile scaricare la versione più recente di SqlPackage direttamente dall'area download Microsoft.

È consigliabile usare l'utilità SQLPackage per la scalabilità e le prestazioni nella maggior parte degli ambienti di produzione. Per informazioni 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.

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"

Eseguire l'esportazione in un file BACPAC con SQL Server Management Studio (SSMS)

Le versioni più recenti di SQL Server Management Studio includono anche una procedura guidata per l'esportazione di un database SQL di Azure in un file BACPAC. Vedere Esportazione guidata applicazione livello dati.

Eseguire l'esportazione in un file BACPAC con PowerShell

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

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

Per verificare lo stato della richiesta di esportazione, usare il cmdlet Get-AzureRmSqlDatabaseImportExportStatus. 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-AzureRmSqlDatabaseImportExportStatus -OperationStatusLink $exportRequest.OperationStatusLink
[Console]::Write("Exporting")
while ($exportStatus.Status -eq "InProgress")
{
    $exportStatus = Get-AzureRmSqlDatabaseImportExportStatus -OperationStatusLink $exportRequest.OperationStatusLink
    [Console]::Write(".")
    Start-Sleep -s 10
}
[Console]::WriteLine("")
$exportStatus

Passaggi successivi