クイックスタート: Azure SQL Database または Azure SQL Managed Instance 内のデータベースに .bacpac ファイルをインポートする
適用対象: Azure SQL Database
Azure SQL Managed Instance
SQL Server データベースを Azure SQL Database または SQL Managed Instance にインポートするには、.bacpac ファイルを使用します。 Azure Blob Storage (Standard ストレージのみ) 内に格納された .bacpac ファイルから、またはオンプレミスの場所にあるローカル ストレージからデータをインポートできます。 より高速なリソースを多く提供することでインポート速度を最大化するには、インポート プロセスの中でデータベースをより高いサービス層とコンピューティング サイズにスケーリングします。 インポートが正常に完了した後でスケールダウンすることができます。
注意
インポートされたデータベースの互換性レベルは、ソース データベースの互換性レベルに基づきます。
重要
データベースをデータベースに移行した後に、データベースを現在の互換性レベル (AdventureWorks2008R2 データベースの場合はレベル 100) またはそれ以上のレベルで運用できます。 データベースを指定の互換性レベルで運用する影響とオプションについて詳しくは、ALTER DATABASE の互換性レベルに関する記事をご覧ください。 また、互換性レベルに関連する追加のデータベースレベルの設定について詳しくは、ALTER DATABASE SCOPED CONFIGURATION に関する記事をご覧ください。
注意
Private Link を使用したインポートおよびエクスポートはプレビュー段階です。
Azure Portal の使用
このビデオをご覧になり、Azure portal で .bacpac ファイルからインポートする方法を確認するか、以下の続きをお読みください。
Azure portal では、Azure SQL Database 内の単一データベースの作成 "だけ" が、Azure Blob Storage に格納されている .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 を使用してこの問題を回避することをお勧めします。
Azure portal を使用して新しい単一データベースに .bacpac ファイルからインポートするには、適切なサーバー ページを開いてから、ツールバー上で [データベースのインポート] を選択します。
[バックアップの選択] を選びます。 データベースをホストしているストレージ アカウントを選んでから、インポート元の .bacpac ファイルを選びます。
新しいデータベースのサイズ (通常、元のサイズと同じ) を指定し、インポート先の SQL Server 資格情報を指定します。 Azure SQL Database 内の新しいデータベースに使用できる値の一覧については、データベースの作成に関するページをご覧ください。
[OK] を選択します。
インポートの進行状況を監視するには、データベースのサーバー ページを開き、 [設定] の下にある [インポート/エクスポート履歴] を選択します。 成功すると、インポートは完了状態になります。
データベースがサーバーで稼働していることを確認するには、 [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 接続が使用できる必要があります。
この例では、SqlPackage と Active Directory ユニバーサル認証を使用してデータベースをインポートする方法を示します。
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 "Standard" -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
注意
インポート操作をキャンセルするには、次のいずれかのロールが必要です。
- SQL DB 共同作成者ロールまたは
Microsoft.Sql/servers/databases/operations
のアクセス許可を持つカスタム Azure RBAC ロール
制限事項
- エラスティック プール内のデータベースへのインポートはサポートされていません。 データを単一データベースにインポートしてから、そのデータベースをエラスティック プールに移動することはできます。
- [Azure サービスへのアクセスを許可] を [オフ] に設定すると、インポートまたはエクスポート サービスは機能しません。 ただし、Azure VM から SqlPackage を手動で実行するか、DacFx API を使用してコードで直接エクスポートを実行することにより、この問題を回避することができます。
- インポートでは、新しいデータベースの作成時にバックアップ ストレージの冗長性の指定はサポートされておらず、バックアップ ストレージの冗長性として既定の geo 冗長を使用して作成されます。 対応策として、まず Azure portal または PowerShell を使用して、必要なバックアップ ストレージの冗長性を備えた空のデータベースを作成し、この空のデータベースに .bacpac をインポートします。
- ファイアウォールの背後にある Storage は現在サポートされていません。
その他のツール
次のウィザードも利用できます。
次のステップ
- Azure Data Studio から Azure SQL Database に接続してクエリを実行する方法については、「クイック スタート: Azure Data Studio を使用して Azure SQL Database に接続してクエリを実行する」を参照してください。
- Azure SQL Database 内のデータベースに接続してクエリを実行する方法については、クイック スタート: Azure SQL Database: SQL Server Management Studio を使用したデータへの接続およびクエリの実行に関する記事をご覧ください。
- .bacpac ファイルを使用した移行に関する SQL Server Customer Advisory Team のブログについては、「BACPAC ファイルを使用した SQL Server から Azure SQL Database への移行」を参照してください。
- パフォーマンスの推奨事項も含む、SQL Server データベースの移行プロセス全体の詳細については、Azure SQL Database への SQL Server データベースの移行に関するページを参照してください。
- ストレージ キーと共有アクセス署名を管理および共有する方法については、「Azure Storage セキュリティ ガイド」をご覧ください。