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

適用対象: Azure SQL Database 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.exe でローカル ストレージにエクスポートします。

  • この記事で説明されている方法を用いた Azure Premium Storage への BACPAC ファイルのエクスポートはサポートされていません。

  • ファイアウォールの背後にある Storage は現在サポートされていません。

  • 不変ストレージは現在サポートされていません。

  • ストレージのファイル名や StorageURI の入力値は長さを 128 文字未満にする必要があり、末尾を "." にしたり、空白文字や "<、>、*、%、&、:、/、?" などの特殊文字を含めたりすることはできません。

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

    • コンピューティング サイズを一時的に増やします。
    • エクスポート中のすべての読み取りアクティビティと書き込みアクティビティを中止する。
    • すべての大きなテーブルに null 以外の値を持つ クラスター化インデックス を使用する。 クラスター化インデックスがないと、エクスポートが 6 ~ 12 時間よりも時間が長くかかる場合には失敗することがあります。 これは、エクスポート サービスがテーブル スキャンを実行してテーブル全体をエクスポートしようとする必要があることが原因です。 テーブルがエクスポート向けに最適化されているかを判断するための適切な方法として、DBCC SHOW_STATISTICS を実行し、RANGE_HI_KEY が null 以外の値であり、分布が適切であることを確認する方法があります。 詳細については、「DBCC SHOW_STATISTICS」を参照してください。
  • Azure SQL Managed Instance では現在、Azure portal または Azure PowerShell を使用して BACPAC ファイルにデータベースをエクスポートすることはサポートされていません。 マネージド インスタンスを BACPAC ファイルにエクスポートするには、SQL Server Management Studio (SSMS) または SQLPackage を使用します。

  • 大きなデータベースについては、BACPAC のエクスポートやインポートは、長い時間がかかる場合や、さまざまな理由で失敗する場合があります。

Note

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

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.exe を実行することです。 この問題を回避するため、150 GB を超えるデータベースは SQLPackage を使用してインポート/エクスポートすることをお勧めします。

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

    [エクスポート] ボタンが強調表示されているスクリーンショット。

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

    データベースのエクスポート

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

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

SQLPackage ユーティリティ

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

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

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

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

注意

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

次のステップ