匯出至 BACPAC 檔案 - Azure SQL Database 和 Azure SQL 受控執行個體

適用于:Azure SQL資料庫 Azure SQL 受控執行個體

當您需要匯出資料庫以封存或移至另一個平台時,可以將資料庫結構描述和資料匯出至 BACPAC 檔案。 BACPAC 檔案是一種副檔名為 BACPAC 的 ZIP 檔案,其中包含來自資料庫的中繼資料和資料。 BACPAC 檔案可以儲存在 Azure Blob 儲存體或內部部署位置的本機儲存體中,稍後再匯回 Azure SQL DatabaseAzure SQL 受控執行個體SQL Server 執行個體

注意

Azure SQL超大規模資料庫層上的匯出功能現在為預覽狀態。

考量

  • 為了讓匯出處於交易一致狀態,您必須確定在匯出期間未發生任何寫入活動,或者是從資料庫的交易一致性複本匯出。

  • 如果您要匯出至 blob 儲存體,BACPAC 檔案的大小上限為 200 GB。 若要封存較大的 BACPAC 檔案,請使用 SqlPackage.exe 匯出至本機儲存體。

  • 不支援使用本文所討論的方法將 BACPAC 檔案匯出到 Azure 進階儲存體。

  • 目前不支援在防火牆後方的儲存體。

  • 目前不支援不可變儲存體。

  • 儲存體檔案名或 StorageURI 的輸入值長度應該少於 128 個字元、結尾不能是 '.',而且不能包含特殊字元,例如空白字元或「<、>、*、%、&、:、/、?」。

  • 如果匯出作業超過 20 個小時,它可能會被取消。 若要增加匯出期間的效能,您可以︰

    • 暫時提高計算大小。
    • 在匯出期間停止所有讀取及寫入活動。
    • 在所有大型資料表上搭配使用 叢集索引 和非 null 值。 若沒有叢集索引,如果要花超過 6-12 小時,匯出可能會失敗。 這是因為匯出服務需要完成資料表掃描,以便嘗試匯出整份資料表。 有一個可判斷資料表是否已針對匯出進行最佳化的好方法,就是執行 DBCC SHOW_STATISTICS,並確定 RANGE_HI_KEY 不是 null 且其值具有良好的分佈。 如需詳細資料,請參閱 DBCC SHOW_STATISTICS
  • Azure SQL 受控執行個體目前不支援使用 Azure 入口網站或 Azure PowerShell,將資料庫匯出至 BACPAC 檔案。 若要將受控執行個體匯出至 BACPAC 檔案,請使用 SQL Server Management Studio (SSMS) 或 SQLPackage

  • 針對超大規模資料庫服務層級中的資料庫,不支援從 Azure 入口網站、從 PowerShell (使用 New-AzSqlDatabaseExportNew-AzSqlDatabaseImport)、從 Azure CLI (使用 az sql db exportaz sql db import) 以及從 REST API 進行 BACPAC 匯出/匯入。 針對較小型超大規模資料庫 (最高為 200 GB),支援使用 SSMS 以及 SQLPackage 18.4 版和更新版本進行 BACPAC 匯入/匯出。 針對較大型資料庫,BACPAC 匯出/匯入可能需要很長的時間,而且可能會因各種原因而失敗。

注意

BACPAC 並非用於備份和還原作業。 Azure 會自動為每個使用者資料庫建立備份。 如需詳細資訊,請參閱商務持續性概觀SQL Database 備份

注意

使用 Private Link 匯入及匯出為預覽狀態。

Azure 入口網站

目前不支援使用 Azure 入口網站,從 Azure SQL 受控執行個體或從超大規模資料庫服務層級中的資料庫匯出資料庫的 BACPAC。 請參閱考量

注意

處理透過 Azure 入口網站或 PowerShell 提交的匯入/匯出要求的機器,必須儲存 BACPAC 檔案以及資料層應用程式架構 (DacFX) 所產生的暫存檔案。 大小相同的資料庫所需的磁碟空間有很大的差異,且最多可能需要資料庫大小三倍的磁碟空間。 執行匯入/匯出要求的電腦僅具有 450 GB 的本機磁碟空間。 因此,某些要求可能會失敗,並出現錯誤 There is not enough space on the disk。 在此情況下,因應措施是在具有足夠本機磁碟空間的機器上執行 sqlpackage.exe。 建議使用 SQLPackage 來匯入/匯出大於 150 GB 的資料庫,以避免發生此問題。

  1. 若要使用 Azure 入口網站匯出資料庫,請開啟資料庫頁面,然後選取工具列上的 [匯出]。

    醒目提示 [匯出] 按鈕的螢幕擷取畫面。

  2. 指定 BACPAC 檔案名稱、選取要匯出之現有的 Azure 儲存體帳戶和容器,然後提供適當的認證以存取來源資料庫。 這裡需要 SQL Server 管理員登入,即使您是 Azure 管理員也一樣,因為 Azure 管理員身分不等於具有 Azure SQL Database 或 Azure SQL 受控執行個體的管理權限。

    資料庫匯出

  3. 選取 [確定]。

  4. 若要監視匯出作業的進度,請開啟包含匯出資料庫的伺服器頁面。 在 [資料管理] 下,選取 [匯入/匯出記錄]。

SQLPackage 公用程式

針對大部分生產環境中的延展性和效能,我們建議您使用 SQLPackage 公用程式。 您可以針對資料表子集平行執行多個 sqlpackage.exe 命令,來加速匯入/匯出作業。

若要使用 SQLPackage 命令列公用程式匯出 SQL Database 中的資料庫,請參閱匯出參數和屬性SQLPackage公用程式適用于 Windows、macOS 和 Linux。

此範例會說明如何透過 Active Directory 通用驗證使用 sqlpackage.exe 匯出資料庫:

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 是免費的開放原始碼工具,適用于 Windows、Mac 和 Linux。 「SQL Server dacpac」 延伸模組提供 SqlPackage 作業的精靈介面,包括匯出和匯入。 如需安裝和使用擴充功能的詳細資訊,請參閱延伸模組 的檔頁面

SQL Server Management Studio (SSMS)

最新版的 SQL Server Management Studio 提供精靈,協助您將 Azure SQL Database 中的資料庫或 SQL 受控執行個體資料庫匯出至 BACPAC 檔案。 請參閱匯出資料層應用程式

PowerShell

目前不支援使用 PowerShell,從 Azure SQL 受控執行個體或從超大規模資料庫服務層級中的資料庫匯出資料庫的 BACPAC。 請參閱考量

使用 New-AzSqlDatabaseExport Cmdlet 將匯出資料庫要求提交至 Azure SQL Database 服務。 視資料庫大小而定,匯出作業可能需要一些時間才能完成。

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

若要查看匯出要求的狀態,請使用 Get-AzSqlDatabaseImportExportStatus Cmdlet。 如果在要求後立即執行此 Cmdlet,通常會傳回 Status: InProgress。 當您看見 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

取消匯出要求

使用資料庫作業 - 取消 API 或 PowerShell Stop-AzSqlDatabaseActivity 命令來取消匯出要求。 以下是範例 PowerShell 命令:

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

後續步驟