マルチテナントアプリを開発しています。「共有データベース/個別スキーマ」アプローチを選択しました。
私の考えは、デフォルトのスキーマ(dbo
)を使用し、このスキーマをデプロイするときに、テナントのスキーマ(、、)を更新するtenantA
ことtenantB
ですtenantC
。つまり、同期されたスキーマを作成します。
テナントのスキーマをデフォルトのスキーマと同期するにはどうすればよいですか?
SQLServer2008を使用しています。
マルチテナントアプリを開発しています。「共有データベース/個別スキーマ」アプローチを選択しました。
私の考えは、デフォルトのスキーマ(dbo
)を使用し、このスキーマをデプロイするときに、テナントのスキーマ(、、)を更新するtenantA
ことtenantB
ですtenantC
。つまり、同期されたスキーマを作成します。
テナントのスキーマをデフォルトのスキーマと同期するにはどうすればよいですか?
SQLServer2008を使用しています。
最初に必要なのは、スキーマのバージョン情報を格納するためのテーブルまたはその他のメカニズムです。アプリケーションとスキーマをバインドできるようにするには、他に何もありません。間違ったスキーマに対するアプリケーションのバージョン (失敗、データの破損など) ほど苦痛なものはありません。
適切なバージョンでない場合、アプリケーションは拒否またはシャットダウンする必要があります。適切でない場合は、何らかの打撃を受ける可能性がありますが、データベースが貴重なデータを破損するという非常に悪い日から保護されます。
Subversion などの変更を追跡する方法が必要になります。SQL から初期スキーマをエクスポートできます。ここから、SQL 比較などの優れたツールを使用して変更を追跡し、スキーマの変更を追跡して、ターゲット データベースのバージョン番号の更新と照合するメカニズムが必要になります。
各デルタは、構築したアップグレード ユーティリティの下の個別のフォルダーに保持します。このユーティリティは、サーバーにサインオンし、バージョン情報を読み取り、サブフォルダーにアップグレード スクリプトが見つからなくなるまで、データベース内の次のバージョンから変換スクリプトを適用します。これにより、データベースがどれだけ古いものであっても、現在のバージョンにアップグレードすることができます。テナントに固有のデータ変換がある場合、これらは扱いにくくなります。
もちろん、外部ファイルに書き込むデータベースのバックアップを常に作成し、人間が識別可能なバージョン番号を付けて、スクリプトがうまくいかなくなったときにそれを見つけて復元できるようにする必要があります。そして最終的には、回復と復元の方法を理解することを計画するだけです.
新しい VS 2010 にはある種のスキーマ アップグレード ツールがあることがわかりましたが、使用していません。それもあなたに役立つかもしれません。
私の知る限り、スキーマを同期するための魔法のコマンドはありません。ツールを使用する必要があります (社内で作成するか購入するかのいずれかです) ( Red Gate の SQL Compareと SQL Examiner を確認してください。異なるスキーマを比較するには、それらを微調整する必要があります)。
ただし、同期するだけでも難しい場合があります。列を追加した場合、その列にもデータを入力する必要がありますか? 列を 2 つの新しい列に分割する場合、そのような変換コードが必要です。
私の提案は、dbo スキーマに対して実行するすべてのスクリプトを非常に注意深く追跡し、必要に応じて他のスキーマに対しても実行されるようにすることです。次に、SQL Compare などのツールを時折の健全性チェックとして使用して、予期しない違いを探すことができます。