クイックスタート: Azure SQL データベース または Azure SQL Managed Instance 内のデータベースに bacpac ファイルをインポートする

適用対象:Azure SQL データベースAzure SQL Managed Instance

SQL Server データベースを Azure SQL Database または SQL Managed Instance にインポートするには、.bacpac ファイルを使用します。 Azure Blob Storage (Standard ストレージのみ) 内に格納された bacpac ファイルから、またはオンプレミスの場所にあるローカル ストレージからデータをインポートできます。 より高速なリソースを多く提供することでインポート速度を最大化するには、インポート プロセスの中でデータベースをより高いサービス層とコンピューティング サイズにスケーリングします。 インポートが正常に完了した後でスケールダウンすることができます。

Azure Portal の使用

このビデオをご覧になり、Azure portal で bacpac ファイルからインポートする方法を確認するか、以下の続きをお読みください。

Azure portal では、Azure SQL データベース での単一データベースの作成のみがサポートされており、Azure Blob ストレージ内の bacpac ファイル のみがサポートされています。

bacpac ファイルから Azure SQL Managed Instance にデータベースを移行するには、SQL Server Management Studio または SQLPackage を使用します。Azure portal または Azure PowerShell の使用は、現在はサポートされていません。

Note

Azure portal または PowerShell から送信されたインポート/エクスポート要求を処理するマシンは、bacpac ファイルとデータ層アプリケーション フレームワーク (DacFX) によって生成された一時ファイルを格納する必要があります。 必要なディスク領域は、同じサイズのデータベースでも大きく異なります。データベースのサイズの最大 3 倍のディスク領域が必要になることがあります。 インポート/エクスポート要求を実行するマシンには、450 GB のローカル ディスク領域しかありません。 その結果、一部の要求がエラー There is not enough space on the disk で失敗することがあります。 この場合の回避策は、ローカル ディスク領域が十分にあるマシンで SqlPackage を実行することです。 150 GB を超えるデータベースをインポート/エクスポートする場合は、SqlPackage を使用してこの問題を回避することをお勧めします。

  1. Azure portal を使用して新しい単一データベースに bacpac ファイルからインポートするには、適切なサーバー ページを開いてから、ツールバー上で [データベースのインポート] を選択します。

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

  2. [バックアップの選択] を選びます。 データベースをホストしているストレージ アカウントを選んだら、インポート元の bacpac ファイルを選択します。

  3. 新しいデータベースのサイズ (通常、元のサイズと同じ) を指定し、インポート先の SQL Server 資格情報を指定します。 Azure SQL Database 内の新しいデータベースに使用できる値の一覧については、データベースの作成に関するページをご覧ください。

    Screenshot of the Azure portal, Database import page.

  4. [OK] を選択します。

  5. インポートの進行状況を監視するには、データベースのサーバー ページを開き、 [設定] の下にある [インポート/エクスポート履歴] を選択します。 成功すると、インポートは完了状態になります。

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

  6. データベースがサーバーで稼働していることを確認するには、 [SQL データベース] を選択し、新しいデータベースが [オンライン] であることを確認します。

SqlPackage を使用する

SqlPackage コマンドライン ユーティリティを使用して SQL Server データベースをインポートするには、「インポート パラメーターとプロパティ」をご覧ください。 Windows、macOS、または Linux 向けの最新 SqlPackage をダウンロードできます。

スケールとパフォーマンスのために、ほとんどの運用環境では、Azure portal の使用ではなく SqlPackage の使用をお勧めします。 BACPAC ファイルを使用した移行に関する SQL Server Customer Advisory Team のブログについては、「Migrating from SQL Server to Azure SQL Database using BACPAC Files (BACPAC ファイルを使用した SQL Server から Azure SQL Database への移行)」をご覧ください。

DTU ベースのプロビジョニング モデルでは、レベルごとにデータベースの最大サイズを選択できます。 データベースをインポートする際は、これらのサポートされている値のいずれかを使用してください。

次の SqlPackage コマンドを実行すると、AdventureWorks2008R2 データベースが、ローカル ストレージから mynewserver20170403 という論理 SQL サーバーにインポートされます。 Premium サービス レベルと P6 サービス オブジェクトがある myMigratedDatabase という新しいデータベースが作成されます。 これらの値は、お使いの環境に合わせて変更してください。

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 Database に接続するには、ファイアウォールでポート 1433 が開いている必要があります。 SQL Managed Instance に接続するには、ポイント対サイト接続または Express Route 接続が使用できる必要があります。

ユーザー名とパスワードの代わりに、Microsoft Entra ID (旧称 Azure Active Directory) を使用することもできます。 現時点では、MFA が必要な場合、Import/Export サービスは Microsoft Entra ID 認証をサポートしていません。 /ua:true/tid:"yourdomain.onmicrosoft.com" のユーザー名とパスワードのパラメーターを置き換えます。 この例では、Microsoft Entra 認証で SqlPackage を使用してデータベースをインポートする方法を示します。

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 の使用

Note

Azure SQL Managed Instance では現在、Azure PowerShell を使用した bacpac ファイルからインスタンス データベースへのデータベースの移行はサポートされていません。 SQL マネージド インスタンスにインポートするには、SQL Server Management Studio または SQLPackage を使用します。

注意

ポータルまたは PowerShell から送信されたインポートおよびエクスポート要求を処理するコンピューターは、bacpac ファイルと共に、データ層アプリケーション フレームワーク (DacFX) によって生成された一時ファイルを格納する必要があります。 必要なディスク領域は、同じサイズの DB でも大きく異なり、最大 3 倍のデータベースのサイズが必要になります。 インポート/エクスポート要求を実行するマシンには、450 GB のローカル ディスク領域しかありません。 結果として、一部の要求が "十分なディスク領域が存在しない" のエラーで失敗する場合があります。 この場合の回避策は、ローカル ディスク領域が十分にあるマシンで SqlPackage を実行することです。 150 GB を超えるデータベースをインポート/エクスポートする場合は、SqlPackage を使用してこの問題を回避します。

重要

PowerShell Azure Resource Manager (RM) モジュールは引き続きサポートされますが、今後の開発はすべて Az.Sql モジュールを対象に行われます。 AzureRM モジュールのバグ修正は、少なくとも 2020 年 12 月までは引き続き受け取ることができます。 Az モジュールと AzureRm モジュールのコマンドの引数は実質的に同じです。 その互換性の詳細については、「新しい Azure PowerShell Az モジュールの概要」を参照してください。

New-AzSqlDatabaseImport コマンドレットを使用して、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 コマンドレットを使用できます。 要求直後にこのコマンドレットを実行すると、通常は 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 ファイルからインポートする」を参照してください。

インポート要求を取り消す

次の例のように、データベース操作 - キャンセル API または Stop-AzSqlDatabaseActivity PowerShell コマンドを使います。

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

インポートをキャンセルするめに必要なアクセス許可

インポート操作をキャンセルするには、次のいずれかのロールのメンバーである必要があります。

新しいデータベースの互換性レベル

  • インポートされたデータベースの互換性レベルは、ソース データベースの互換性レベルに基づきます。
  • データベースをインポートした後に、データベースを期限内の互換性レベルで運用するか、より高いレベルで運用するかを選択できます。 データベースを指定の互換性レベルで運用する影響とオプションについて詳しくは、ALTER DATABASE の互換性レベルに関する記事をご覧ください。 互換性レベルに関連する追加のデータベースレベルの設定について詳しくは、ALTER DATABASE SCOPED CONFIGURATION もご覧ください。

制限事項

  • エラスティック プール内のデータベースへのインポートはサポートされていません。 データを単一データベースにインポートしてから、そのデータベースをエラスティック プールに移動することはできます。
  • [Azure サービスへのアクセスを許可] を [オフ] に設定すると、インポートまたはエクスポート サービスは機能しません。 ただし、Azure VM から SqlPackage を手動で実行するか、DacFx API を使用してコードで直接エクスポートを実行することにより、この問題を回避することができます。
  • インポートでは、新しいデータベースの作成時にバックアップ ストレージの冗長性の指定はサポートされておらず、バックアップ ストレージの冗長性として既定の geo 冗長を使用して作成されます。 これを回避するには、まず Azure portal または PowerShell を使用して、必要なバックアップ ストレージの冗長性を備えた空のデータベースを作成し、この空のデータベースに bacpac をインポートします。
  • ファイアウォールの背後にある Storage は現在サポートされていません。
  • インポート プロセス中は、同じ名前のデータベースを作成しないでください。 インポート プロセスでは、指定した名前の新しいデータベースが作成されます。
  • 現時点では、MFA が必要な場合、Import/Export サービスは Microsoft Entra ID 認証をサポートしていません。
  • Import/Export サービスは、SQL 認証と Microsoft Entra ID のみをサポートします。 Import/Export は、Microsoft ID アプリケーションの登録と互換性がありません。

その他のツール

次のウィザードも利用できます。