Azure SQL DatabaseのbacpacでSQL Serverインポートエラー(CREATE MASTER KEY失敗 : SQL72045)
Azure SQL Databaseからエクスポートして生成したbacpacファイルを、ローカルのSQL Server(2012,2014,2016など)にSSMSでインポートする場合、以下のエラーがでることがあります。
パッケージをインポートできませんでした。
Error SQL72045: スクリプトの実行エラーです。実行されたスクリプト:
CREATE MASTER KEY;
内容
Azure SQL Database側で、マスターキーが設定されています。
回避策は以下のMSDNブログに書いている通りです。
原因
AuditやTDE(透過的暗号化)を使うときマスターキーが使用されます。Azure SQL Databaseではパスワードがないマスターキーの作成が可能ですが、ローカルのSQL Serverではマスターキーのパスワード設定が必要です。
回避策
選択肢1 (設定変更)
- Azureでエクスポートする前に、エクスポート元の既存DBのマスターキーを変更する。
選択肢2(PowerShellパッチ)
- PowerShellファイルをダウンロードして「RemoveMasterKey.ps1 -bacpacPath “C:¥BacPacs¥Test.bacpac"」というコマンドを実行→拡張子にpatchが付与されたファイルが追加されます。このファイルを使ってインポートする。
- PowerShellの中では、以下の処理を実施している
選択肢3(手動パッチ)
- 選択肢2がうまくいかない場合のため、手動によるBacpacの編集を解説しています。
- 手動でZIP(bacpac)を解凍し、model.xmlとOrigin.xmlを編集し、再度ZIP圧縮します。
- 詳細の説明はこちら→ Editing a .bacpac file – Azure SQL Database Support 。ここにはOrigin.xmlに保存するハッシュを計算するps1もあり。
- トラブルシューティングのための説明となります。DBファイルサイズが大きい場合などに発生しうるのかもしれません。
- なお、model.xmlなどのファイル名の大文字小文字は重要です。
- 設定そのものとDataフォルダの中身(BCP用データ)に関係はないため、Dataフォルダを軽いものだけにしてテストをすると良いと思います。Windows標準のZIPではだめでしたが、別のZIP圧縮ツールではうまく行ったということもありました。
選択肢2が楽で良いのですが、まれに選択肢3を使わなければ行けない場合がありました。