おそらく、データ層アプリケーションBACPAC 形式が最も便利なソリューションを提供することがわかるでしょう。Exportを使用して、データベース スキーマとデータの両方を含むファイルを作成できます。インポートにより、そのファイルに基づくデータが取り込まれた新しいデータベースが作成されます。
バックアップおよび復元操作とは対照的に、エクスポートおよびインポートでは、データベース サーバーのファイル システムへのアクセスは必要ありません。
SQL Server Management Studio を使用するか、.Net、Powershell、MSBuild などの API を介して BACPAC ファイルを操作できます。
この方法を使用すると、エクスポートしてから Amazon RDS との間でインポートする際に問題が発生することに注意してください。RDS に新しいデータベースが作成されると、その中に次の 2 つのオブジェクトが作成されます。
- db_owner ロールのメンバーシップを持つユーザー。
- rds_deny_backups_trigger トリガー
インポート中に、BACPAC ファイルに含まれるオブジェクトと RDS によって自動的に追加されるオブジェクトとの間に競合が発生します。これらのオブジェクトは両方とも BACPAC ファイルに存在し、新しいデータベースの作成時に RDS によって自動的に作成されます。
手元に SQL Server の非 RDS インスタンスがある場合は、BACPAC をそのインスタンスにインポートし、上記のオブジェクトをドロップしてから、データベースをエクスポートして新しい BACPAC ファイルを作成できます。これを RDS インスタンスに復元しても競合は発生しません。
それ以外の場合は、次の手順を使用してこの問題を回避できます。
- BACPAC ファイル内の model.xml ファイルを編集します (BACPAC は単なる zip ファイルです)。
- 上記のオブジェクト (RDS によって自動的に追加されるもの) に関連する Type 属性に次の値を持つ要素を削除します。
- SqlRoleMembership
- SqlPermissionステートメント
- Sqlログイン
- SqlUser
- SqlDatabaseDdlTrigger
- SHA256クラスの ComputeHash メソッドの 1 つを使用して、変更されたバージョンの model.xml ファイルのチェックサムを生成します。
- BitConverter.ToString()メソッドを使用して、ハッシュを 16 進数の文字列に変換します (区切り記号を削除する必要があります)。
- origin.xml ファイル (BACPAC ファイルにも含まれる) の Checksum 要素の既存のハッシュを新しいものに置き換えます。
- model.xml ファイルと origin.xml ファイルの両方を新しいバージョンに置き換えて、元のコンテンツを圧縮して、新しい BACPAC ファイルを作成します。この目的でSystem.IO.Compression.ZipFileを使用しないでください。生成される zip ファイルと競合する可能性があるためです。データはインポートに含まれません。問題なく7Zipを使用しました。
- 新しい BACPAC ファイルをインポートすると、RDS によって自動的に生成されるオブジェクトと競合することはありません。
注:ここで説明する SQL Server Management Studio を使用して BacPac を RDS にインポートすることには、別の関連する問題があります。