単純な状況があります。大規模な組織は、いくつかの (デスクトップ) アプリケーションのいくつかの異なるバージョンを使用しており、各バージョンには独自のデータベース構造があります。約 200 のオフィスがあり、各オフィスには独自のバージョンがあり、7 つの異なるオフィスのいずれかになります。同社は、すべてのアプリケーションを最新バージョン (バージョン 8) にアップグレードしたいと考えています。
問題は、バージョンごとに個別のデータベースがないことです。また、オフィスごとに個別のデータベースもありません。専用サーバーによって処理される単一のデータベースがあるため、管理やバックアップなどを簡単に行うことができます. すべてのオフィスには独自のデータベース スキーマがあり、スキーマ内には、特定のアプリケーション バージョン用のデータベース構造全体があります。その結果、アップグレードが必要な 200 の異なるスキーマを扱っており、それぞれに 7 つの可能なバージョンがあります。幸いなことに、すべてのスキーマは適切なバージョンを認識しているため、バージョンの確認は難しくありません。
しかし、私の問題は、バージョン 1 からバージョン 2、バージョン 3 などにアップグレードできるアップグレード スクリプトを作成する必要があることです。基本的に、すべてのスキーマがすべてバージョン 8 になるまで、1 つのバージョンを上げる必要があります。これは問題ありません。課題は、あるバージョンから別のバージョンへのアップグレード スクリプトを作成する方法ですか?できれば、自動化されたツールを使用してください。RedGate の SQL Compare と Altova の DatabaseSpy を調べましたが、実用的ではありません。Altova は遅すぎます。生成された SQL スクリプトにはまだいくつかのエラーがあり、スキーマ名を参照しているため、RedGate はその後の処理が多すぎます。さらに、コードはストアド プロシージャの一部になる必要があり、RedGate によって生成されたコードは実際には単一のプロシージャ内には収まりません。(さらに、1 つのトランザクション内ですべてを必要としているのに、トランザクション処理が多すぎます。
別の SQL 比較ツールの使用を検討していましたが、私の場合は標準ツールが提供できるものとはあまりにも異なっているように思えます。そこで、独自の比較ツールを作成します。これを行うには、Delphi で ADOX を使用して、データベース内のすべてのスキーマ バージョンのカタログを読み取り、これを使用して、これらのスキーマを次のバージョンにアップグレードするために必要な SQL ステートメントを記述します。(1 と 2、2 と 3、3 と 4 などの比較) SQL-Script-Generators の生成に慣れていないので、それほど多くの問題はないと思います。また、他のデータベース オブジェクトではなく、テーブル構造のみをアップグレードします。
では、この種の比較を行う際に適用できる優れたヒントやコツはありますか? 注意事項 速度を上げるための実用的なヒントは?