tl;dr
ここのことをやるだけです。
注意点
- DB上にユーザが存在する場合、同様に作成されます。が、 Azure SQL Server作成時のユーザと同名のユーザにすると失敗します
- sqlpackageを用いてリモートへ取り込む方法となるため、IP制限あたりに注意してください。
- 既に存在するAzure SQL Databaseに対しての操作は行えません。同名のDB名で作成したい場合は、既存のDBを削除する必要があります。
手順
- bacpacファイルを用意する(手順無し)
- 注意点にあるユーザ被りに注意。
- 既存のDBが存在する場合、削除する
- sqlpackageコマンドでimportを実行
- 実行時に生成するDBのプランに注意する
sqlpackageコマンドは前に書いた以下を元にして打ちます。
ここを参考に、Azure上に作成するDBプランも指定していきます。
例: StandardのS0(DTU=10)プラン、クォータ250GBで作成する場合。
"C:\Program Files (x86)\Microsoft SQL Server\140\DAC\bin\sqlpackage" ^
/Action:Import ^
/TargetServerName:%DB_HOST% ^
/TargetDatabaseName:%DB_NAME% ^
/TargetUser:%DB_USER% ^
/TargetPassword:%DB_PASSWORD% ^
/TargetEncryptConnection:True ^
/SourceFile:backup.bacpac ^
/p:DatabaseEdition=Standard /p:DatabaseServiceObjective=S0 /p:DatabaseMaximumSize=250
トラブルシューティング
「マスター サーバーとターゲット サーバー '(DB_NAME)' のいずれにも接続できません。マスター サーバーかターゲット サーバー '(DB_NAME)' に同じパスワードのユーザーが必要です。」というエラーメッセージが出る
全文
*** データベース インポート エラー: パッケージをインポートできませんでした。
マスター サーバーとターゲット サーバー '(DB_NAME)' のいずれにも接続できません。マスター サーバーかターゲット サーバー '(DB_NAME)' に同じパスワードのユーザーが必要です。
原因の一つとして、IP制限に引っかかっていると同名の文言が表示されます。