快速入門:將 bacpac 檔案匯入至 Azure SQL 資料庫或 Azure SQL 受控執行個體中的資料庫

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

您可以使用 .bacpac 檔案,將 SQL Server 資料庫匯入至 Azure SQL 資料庫或 SQL 受控執行個體。 您可以從儲存在 Azure Blob 儲存體 (僅限標準儲存體) 中的 bacpac 檔案,或者從內部部署位置的本機儲存體中匯入資料。 若要藉由提供更多且更快速的資源來最大化匯入速度,請在匯入程序期間,將您的資料庫調整為較高的服務層級與計算大小。 然後,您可以在匯入成功後縮小。

注意

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

使用 Azure 入口網站

觀看這段影片,了解如何在 Azure 入口網站中從 bacpac 檔案匯入,或繼續閱讀:

Azure 入口網站支援在 Azure SQL 資料庫中建立單一資料庫,且只能從儲存在 Azure Blob 儲存體中的 bacpac 檔案建立。

警告

從 SqlPackage 產生的超過 4 GB 的 Bacpac 檔案可能無法從 Azure 入口網站或 Azure PowerShell 匯入,並且會顯示如下錯誤訊息:File contains corrupted data.。 這是因為一個已知問題造成的,因應措施是使用 SqlPackage 命令列公用程式匯入 bacpac 檔案。 如需詳細資訊,請參閱 SqlPackage問題記錄

若要將資料庫從 bacpac 檔案移轉至 Azure SQL 受控執行個體,請使用 SQL Server Management Studio 或 SQLPackage;目前不支援使用 Azure 入口網站或 Azure PowerShell。

注意

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

  1. 若要使用 Azure 入口網站從 bacpac 檔案匯入至新的單一資料庫,請開啟適當的伺服器頁面,然後在工具列上選取 [匯入資料庫]。

    Screenshot of the Azure portal, logical server overview page, with database import selected.

  2. 選取 [選取備份]。 選擇託管資料庫的儲存體帳戶,然後選取要匯入的 bacpac 檔案。

  3. 指定新資料庫的大小 (通常與原始資料庫相同),並提供目的地 SQL Server 認證。 如需 Azure SQL 資料庫中的新資料庫可能之值的清單,請參閱建立資料庫

    Screenshot of the Azure portal, Database import page.

  4. 選取 [確定]。

  5. 若要監視匯入進度,請開啟資料庫的伺服器頁面,然後在 [設定] 下選取 [匯入/匯出記錄]。 匯入成功時,會處於 [已完成] 狀態。

    Screenshot of the Azure portal, server overview page, showing the database import status.

  6. 若要確認伺服器上的資料庫為線上狀態,請選取 [SQL 資料庫],並確認新的資料庫為 [線上] 狀態。

使用 SqlPackage

若要使用 SqlPackage 命令列公用程式匯入 SQL Server 資料庫,請參閱匯入參數和屬性。 您可以下載適用於 Windows、macOS 或 Linux 的最新 SqlPackage

為了規模和效能,我們建議在大部分生產環境中使用 SqlPackage,而不使用 Azure 入口網站。 如需 SQL Server 客戶諮詢小組部落格中有關使用 BACPAC 檔案進行移轉的主題,請參閱使用 BACPAC 檔案從 SQL Server 移轉至 Azure SQL 資料庫\(英文\)。

以 DTU 為基礎的佈建模型支援每一層的選取資料庫大小上限值。 匯入資料庫時 使用其中一個支援的值

下列 SqlPackage 命令會將 AdventureWorks2008R2 資料庫從本機儲存體匯入至名為 mynewserver20170403 的邏輯 SQL 伺服器。 其會建立名為 myMigratedDatabase、具有進階服務層級和 P6 服務目標的新資料庫。 請針對您的環境適當變更這些值。

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

重要

若要連線至公司防火牆後方的 Azure SQL 資料庫,防火牆必須開啟連接埠 1433。 若要連線至 SQL 受控執行個體,您必須有點對站連線或快速路由連線。

作為使用者名稱和密碼的替代方案,可以使用 Microsoft Entra ID (先前稱為 Azure Active Directory)。 目前,需要 MFA 時,匯入/匯出服務不支援 Microsoft Entra ID 驗證。 以使用者名稱與密碼參數取代 /ua:true/tid:"yourdomain.onmicrosoft.com"。 此範例說明如何使用 SqlPackage 與 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 是免費的開放原始碼工具,適用於 Windows、macOS 和 Linux。 "SQL Server dacpac" 延伸模組提供 SqlPackage 作業 (包括匯出和匯入) 的精靈介面。 如需安裝和使用延伸模組的詳細資訊,請參閱 SQL Server dacpac 延伸模組文件 (機器翻譯)

使用 PowerShell

注意

Azure SQL 受控執行個體目前不支援使用 Azure PowerShell,從 bacpac 檔案將資料庫移轉至執行個體資料庫中。 若要匯入至 SQL 受控執行個體,請使用 SQL Server Management Studio 或 SQLPackage。

注意

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

重要

PowerShell Azure Resource Manager (RM) 模組仍受支援,但所有未來的開發都是針對 Az.Sql 模組進行的。 AzureRM 模組在至少 2020 年 12 月之前都還會持續收到 Bug 修正。 Az 模組和 AzureRm 模組中命令的引數本質上完全相同。 如需其相容性的詳細資訊,請參閱新的 Azure PowerShell Az 模組簡介

使用 New-AzSqlDatabaseImport Cmdlet,將匯入資料庫要求提交至 Azure。 匯入可能需要一些時間才能完成,視資料庫大小而定。 以 DTU 為基礎的佈建模型支援每一層的選取資料庫大小上限值。 匯入資料庫時 使用其中一個支援的值

$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)

您可以使用 Get-AzSqlDatabaseImportExportStatus Cmdlet 來查看匯入的進度。 如果在要求後立即執行此 Cmdlet,通常會傳回 Status: InProgress。 當您看到 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

提示

如需其他指令碼範例,請參閱從 BACPAC 檔案匯入資料庫

取消匯入要求

使用資料庫作業 - 取消 APIStop-AzSqlDatabaseActivity PowerShell 命令,如下列範例所示:

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

取消匯入所需的權限

若要取消匯入作業,您必須具備下列角色之一:

新資料庫的相容性層級

限制

  • 不支援匯入至彈性集區中的資料庫。 您可以將資料匯入到單一資料庫,然後將資料庫移到彈性集區。
  • [允許存取 Azure 服務] 設為 [關閉] 時,[匯入匯出服務] 將無法運作。 不過,您可以從 Azure VM 手動執行 SqlPackage,或使用 DacFx API 直接在程式碼中執行匯出,以解決此問題。
  • 匯入不支援在建立新資料庫時指定備份儲存體備援,而會使用預設的異地備援備份儲存體備援來建立資料庫。 若要解決此問題,請先使用 Azure 入口網站或 PowerShell,建立具有所需備份儲存體備援的空白資料庫,然後將 bacpac 匯入這個空白資料庫中。
  • 目前不支援在防火牆後方的儲存體。
  • 在匯入處理程序期間,請勿建立同名的資料庫。 匯入處理程序會建立指定名稱的新資料庫。
  • 目前,需要 MFA 時,匯入/匯出服務不支援 Microsoft Entra ID 驗證。
  • 匯入\匯出服務僅支援 SQL 驗證和 Microsoft Entra ID。 匯入\匯出與 Microsoft Identity 應用程式註冊不相容。

其他工具

您也可以使用這些精靈。