以前、MS SQL Server のデータを LocalDB にリストアする記事を書いたことがありますが、似たような話が 1 年後にくるとは...
今回は Azure SQL Database での備忘録
手順
手順は大きく分けてこのようになります
- ストレージアカウントとコンテナを作成
- Azure SQL Database から bacpac ファイルをエクスポート
- bacpac ファイルをクライアントにダウンロード
- sqlpackage の準備
- LocalDB にリストア
1. ストレージアカウントとコンテナの作成
bacpac ファイルの出力先として、ストレージアカウントとコンテナを作成しておく
2. Azure SQL Database から bacpac ファイルをエクスポート
PowerShell でもできそうだったけど、やりたいのは LocalDB へのリストアなので、Azure Portal からポチポチ
- Azure Portal から、対象の SQL データベースを開き、[エクスポート] をクリック
- 適宜項目を埋める
- Storage は手順 1 で用意したストレージアカウントとコンテナを指定
- 認証の種類は「SQL Server」にして、データベースのアカウントを設定
- [OK] を押すとエクスポートが始まる
※進捗や結果は、対象の SQL Server を開き、[インポート/エクスポート履歴] で確認できます
3. bacpac ファイルをクライアントにダウンロード
「1. ストレージアカウントとコンテナの作成」で作成したコンテナを開き、右端の 3 点リーダーをクリックして、ダウンロードをクリックしてダウンロードする
4. sqlpackage の準備
Visual Studio のインストールフォルダ内(C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\130
)にあったのですが、改めて MS のサイトからダウンロードする
-
sqlpackage をダウンロードしてインストールする にアクセスして、Windows .NET Core の zip ファイルをダウンロード
- ダウンロードした zip ファイルを右クリックして、このファイルを許可する
- 適当な場所に展開する
5. LocalDB にリストア
コンソール(手元では Windows Terminal を利用)を立ち上げ、展開したフォルダに移動後に、コマンドでインポートする
PS> cd C:\soft\sqlpackage-win7-x64
PS> .\sqlpackage.exe /Action:Import /SourceFile:"C:\Users\miyamiya\Desktop\xxxxxxxx-2020-8-24-22-5.bacpac" /TargetConnectionString:"Data Source=(localdb)\mssqllocaldb;Initial Catalog=20200824db; Integrated Security=true;"
しかし、私の環境では SQL72014
が発生してインポートに失敗しました
そこで、こちらを参考にして 、SSMS で LocalDB につないで、下記クエリーを流しました
sp_configure 'contained database authentication', 1;
GO
RECONFIGURE;
GO
その後、もう一度クエリーを流したらインポート成功しました