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

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

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

考量

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

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

  • Azure 儲存體檔案名稱不能以 . 結尾,而且不能包含特殊字元,例如空格符或 <>*%&:\/?。 檔案名稱長度應少於 128 個字元。

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

    • 暫時提高計算大小。
    • 在匯出期間停止所有讀取及寫入活動。
    • 在所有大型資料表上搭配使用 叢集索引 和非 null 值。 在沒有叢集索引的情況下,如果用時超過 6-12 小時,匯出可能會失敗。 這是因為匯出服務需要完成資料表掃描,以便嘗試匯出整份資料表。 有一個可判斷資料表是否已針對匯出進行最佳化的好方法,就是執行 DBCC SHOW_STATISTICS,並確定 RANGE_HI_KEY 不是 null 且其值具有良好的分佈。 如需詳細資料,請參閱 DBCC SHOW_STATISTICS
  • 針對較大型資料庫,BACPAC 匯出/匯入可能需要很長的時間,而且可能會因各種原因而失敗。

注意

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

注意

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

Azure 入口網站

目前不支援使用 Azure 入口網站,從 Azure SQL 受控執行個體匯出資料庫的 BACPAC。 請參閱考量

注意

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

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

    Screenshot that highlights the Export button.

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

    Screenshot shows the Export Database page with username and password specified.

  3. 選取 [確定]。

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

SQLPackage 公用程式

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

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

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

SqlPackage /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 dacpac 延伸項目 (機器翻譯)

SQL Server Management Studio (SSMS)

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

PowerShell

目前不支援使用 PowerShell,從 Azure SQL 受控執行個體匯出資料庫的 BACPAC。 請參閱考量

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

$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

注意

若要取消匯出作業,您必須擔任下列任一角色:

限制

  • 不支援使用本文所討論的方法將 BACPAC 檔案匯出到 Azure 進階儲存體。
  • 目前不支援在防火牆後方的儲存體。
  • 目前不支援不可變儲存體。
  • Azure SQL 受控執行個體目前不支援使用 Azure 入口網站或 Azure PowerShell,將資料庫匯出至 BACPAC 檔案。 若要將受控執行個體匯出至 BACPAC 檔案,請使用 SQL Server Management Studio (SSMS) 或 SQLPackage
  • 目前,需要 MFA 時,匯入/匯出服務不支援 Microsoft Entra ID 驗證。
  • 匯入\匯出服務僅支援 SQL 驗證和 Microsoft Entra ID。 匯入\匯出與 Microsoft Identity 應用程式註冊不相容。