3

単純な状況があります。大規模な組織は、いくつかの (デスクトップ) アプリケーションのいくつかの異なるバージョンを使用しており、各バージョンには独自のデータベース構造があります。約 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 の生成に慣れていないので、それほど多くの問題はないと思います。また、他のデータベース オブジェクトではなく、テーブル構造のみをアップグレードします。

では、この種の比較を行う際に適用できる優れたヒントやコツはありますか? 注意事項 速度を上げるための実用的なヒントは?

4

3 に答える 3

2

私はまだRedGateが行くべき道だと思います。すべての依存関係を常にキャッチできるとは限らないことは事実であり、少しハックする必要があるかもしれませんが、95% の方法で取得でき、IMO の時間を大幅に節約できます。

スクリプトが生成されると、エラー処理とトランザクションが行われる方法を簡単にハッキングできます。出力は非常によく文書化されているため、何が起こっているのかを簡単に確認できます。

1 つの可能性は、各データベースを適切に変更するのではなく、次のようにすることです。

  • 新しいバージョン 8 データベースを作成します ( DB_NEW)
  • 古いデータベースからすべてのデータを移行します ( DB) (これには最大 7 つの異なるデータ移行スクリプトが必要です)
  • 新しいデータベースを検証する
  • 成功した場合は、名前を変更DBして名前をDB_OLD変更DB_NEWしますDB
于 2010-05-10T14:07:04.280 に答える
1

Redgateがその答えです。さまざまなスキーマを比較でき、違いに基づいてスクリプトを生成することもできます。

于 2010-05-15T19:39:42.307 に答える
1

新しいデータベースを作成してからデータを移行するのが最善の方法です。おそらく、多数のデータ変換スクリプトを作成する必要がありますが、データ構造の違いはそれほど大きくないと思います。移行後、SQL クエリの結果を比較して移行の成功を確認できるデータ比較ツールを使用することをお勧めします。

于 2010-05-12T14:56:02.827 に答える