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

適用対象: Azure SQL Database Azure SQL Managed Instance

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

考慮事項

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

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

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

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

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

  • Storage のファイル名または StorageURI の入力値は 128 文字未満の長さにする必要があり、かつ '.' で終了したり、空白文字や '<,>,*,%,&,:,,/,?' などの特殊文字を含んでいたりすることはできません。

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

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

注意

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

Azure ポータル

Azure portal を使用して Azure SQL Managed Instance からデータベースの BACPAC をエクスポートすることは現在サポートされていません。 代わりに、SQL Server Management Studio または SQLPackage を使用してください。

注意

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 コマンドライン ユーティリティを使用して SQL Database のデータベースをエクスポートするには、「エクスポートのパラメーターとプロパティ」を参照してください。 SQLPackage ユーティリティは、最新バージョンの SQL Server Management Studio および SQL Server Data Tools for Visual Studio に付属しています。また、Microsoft ダウンロード センターから最新バージョンの SqlPackage を直接ダウンロードすることもできます。

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

この例では、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"

SQL Server Management Studio (SSMS)

最新バージョンの SQL Server Management Studio には、Azure SQL Database のデータベースまたは SQL Managed Instance データベースを BACPAC ファイルにエクスポートするウィザードが用意されています。 「データ層アプリケーションのエクスポート」を参照してください。

PowerShell

注意

Azure SQL Managed Instance では現在、Azure PowerShell を使用して BACPAC ファイルにデータベースをエクスポートすることはサポートされていません。 マネージド インスタンスを BACPAC ファイルにエクスポートするには、SQL Server Management Studio または SQLPackage を使用します。

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

次のステップ