BACPAC ファイルへのエクスポート - Azure SQL Database および Azure SQL Managed Instance

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

アーカイブのため、または別のプラットフォームに移行するためにデータベースをエクスポートする必要がある際は、データベース スキーマとデータを BACPAC ファイルにエクスポートできます。 BACPAC ファイルは、データベースのメタデータとデータを含む BACPAC の拡張子を持つ ZIP ファイルです。 BACPAC ファイルは、Azure の BLOB ストレージまたはオンプレミスの場所にあるローカル ストレージに格納でき、後で Azure SQL DatabaseAzure SQL Managed Instance、または SQL Server インスタンスにインポートすることができます。

考慮事項

  • エクスポートにトランザクション一貫性を持たせるために、書き込みアクティビティがエクスポート中に行われないようにするか、データベースのトランザクション上の一貫性が確保されたコピーからエクスポートを行うようにする必要があります

  • Blob Storage にエクスポートする場合、BACPAC ファイルの最大サイズは 200 GB です。 大きな BACPAC ファイルをアーカイブするには、SqlPackage でローカル ストレージにエクスポートします。

  • Azure Storage ファイル名の末尾を . にすることはできず、空白文字や、<>*%&:\/? など、特殊文字を含めることはできません。 ファイル名の長さは、128 文字未満にする必要があります。

  • エクスポート操作が 20 時間を超える場合は取り消される可能性があります。 エクスポート中にパフォーマンスを向上させるには、次の操作を実行します。

    • コンピューティング サイズを一時的に増やします。
    • エクスポート中のすべての読み取りアクティビティと書き込みアクティビティを中止する。
    • すべての大きなテーブルに null 以外の値を持つ クラスター化インデックス を使用する。 クラスター化インデックスがないと、エクスポートが 6 から 12 時間よりも長くかかる場合に失敗する可能性があります。 これは、エクスポート サービスがテーブル スキャンを実行してテーブル全体をエクスポートしようとする必要があることが原因です。 テーブルがエクスポート向けに最適化されているかを判断するための適切な方法として、DBCC SHOW_STATISTICS を実行し、RANGE_HI_KEY が null ではなく、値の分布が適切であることを確認する方法があります。 詳細については、「DBCC SHOW_STATISTICS」を参照してください。
  • 大きなデータベースについては、BACPAC のエクスポートやインポートは、長い時間がかかる場合や、さまざまな理由で失敗する場合があります。

Note

BACPAC はバックアップおよび復元操作に使用するためのものでありません。 Azure では、すべてのユーザー データベースのバックアップが自動的に作成されます。 詳細については、「ビジネス継続性の概要」、「Azure SQL Database での自動バックアップ」、または「Azure SQL Managed Instance での自動バックアップ」を参照してください。

Azure ポータル

Azure portal を使用して Azure SQL Managed Instance からデータベースの BACPAC をエクスポートすることは現在サポートされていません。 「考慮事項」を参照してください。

Note

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

  1. Azure portal を使用してデータベースをエクスポートするには、データベースのページを開き、ツール バーの [エクスポート] を選択します。

    Screenshot that highlights the Export button.

  2. BACPAC ファイル名を指定し、エクスポートに使用する既存の Azure ストレージ アカウントとコンテナーを選択した後、ソース データベースにアクセスするための適切な資格情報を指定します。 ここでは、Azure 管理者であっても SQL サーバー管理者ログインが必要になります。Azure 管理者であることと、Azure SQL Database または Azure SQL Managed Instance で管理者のアクセス許可を持っていることは同じではないためです。

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

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

  4. エクスポート操作の進行状況を監視するには、エクスポートされたデータベースを含むサーバーのページを開きます。 [データ管理][インポート/エクスポート履歴] を選択します。

SQLPackage ユーティリティ

ほとんどの運用環境では、スケールとパフォーマンスのために、SQLPackage ユーティリティの使用をお勧めします。 テーブルのサブセットに並行して複数の SqlPackage コマンドを実行し、インポートおよびエクスポート操作を高速化できます。

SQLPackage コマンドライン ユーティリティを使用して SQL Database のデータベースをエクスポートするには、エクスポートのパラメーターとプロパティに関するページを参照してください。 SQLPackage ユーティリティは Windows、macOS、Linux で利用できます。

この例は、SqlPackage と Active Directory ユニバーサル認証を使用してデータベースをエクスポートする方法を示しています。

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 Managed Instance データベースを BACPAC ファイルにエクスポートするウィザードが用意されています。 「データ層アプリケーションのエクスポート」を参照してください。

PowerShell

PowerShell を使用して Azure SQL Managed Instance からデータベースの BACPAC をエクスポートすることは、サポートされていません。 「考慮事項」を参照してください。

New-AzSqlDatabaseExport コマンドレットを使用して、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 コマンドレットを使用します。 要求直後にこのコマンドレットを実行すると、通常は 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

Note

エクスポート操作を取り消すには、次のいずれかのロールが必要です。

制限事項

  • この記事で説明されている方法を用いた Azure Premium Storage への BACPAC ファイルのエクスポートはサポートされていません。
  • ファイアウォールの背後にある Storage は現在サポートされていません。
  • 不変ストレージは現在サポートされていません。
  • Azure SQL Managed Instance では現在、Azure portal または Azure PowerShell を使用して BACPAC ファイルにデータベースをエクスポートすることはサポートされていません。 マネージド インスタンスを BACPAC ファイルにエクスポートするには、SQL Server Management Studio (SSMS) または SQLPackage を使用します。
  • 現時点では、MFA が必要な場合、Import/Export サービスは Microsoft Entra ID 認証をサポートしていません。
  • Import/Export サービスは、SQL 認証と Microsoft Entra ID のみをサポートします。 Import/Export は、Microsoft ID アプリケーションの登録と互換性がありません。