4

私たちのデータベースは全体的に設計が不十分です (継承しています)。スキーマを使いやすく保守しやすいものに作り直しました。かなりの数のテーブルと列が削除され、多くの列が移動され、ほとんどのテーブルと列の名前が変更されました。一部のデータ型も変更されています。

Web アプリケーションからすべてのクエリを抽出し、それらの書き直しを開始しました。当社の DBA は、古いデータを新しいスキーマに移行できると考えています。確実にするには、古い結果と新しい結果を比較して、各クエリをテストする必要があります。

このような大規模な移行をどのようにテストできますか? パラメータを指定し、古いテーブル/列を新しいテーブル/列にマップできるようにする必要があります。何百ものクエリがあると、これは大変な作業です。自分で何かを書くこともできますが、すでに多くの時間を必要としているため、既存のツールを使用することをお勧めします。

ありがとう!

4

3 に答える 3

1

私はこれをしなければなりませんでした...そして私はアプリケーション全体を書き直したのでそれは簡単でした;)

多くのクエリは、select、insert、updatesなどの基本的な操作が関数に抽象化されていないように聞こえます。おそらく、適応する前に混乱をクリーンアップするのに役立ちます。

今度はテストのために:

a)すべてのクエリを実行するb)比較のためにすべての選択の出力を保存するテストスクリプトが必要です

  1. テストデータベース@状態0をバックアップし、一般的なクエリログをクリアします

  2. すべての削除、選択、更新を使用してアプリケーションを試してみてください。

  3. そのログをコピーして貼り付け、すべての選択を取り、その前に「テーブルtemptable_xyzの作成」を付けます(またはもちろん、SELECTをtemptable_xyzに..使用可能な構文によって異なります)

  4. 両方のデータベースで実行し、移行スクリプトの後にdb @state0をテストしてdb@state0をテストします

  5. 比較

これは、すべてのアプリですべての機能を使用したことを確認できる場合に実行する必要があります。

GL-既存のものをより良くするようなものはありません;)

于 2011-09-22T15:13:17.090 に答える
0

これが私のアプローチです:

  1. データのあるテスト データベースを復元し、既知のすべてのクエリを実行します。
  2. 別のテスト データベースを復元し、すべての新しいクエリを実行します。
  3. 各データベースのテーブルを結合して結果を比較する SQL スクリプトを作成します。これは、information_schema またはその他のシステム テーブルから実行できます (ベンダーによって異なります)。

    insert into temp table select (select count(1) from db1..name) , (select count(1) from db2..name) , (select count(1) from db1.name t1 join db2.name t2 on t1. col1 = t2.col1 および t1.colx = t2.colx) 、テーブル名

次に、クエリにテーブル名を持つクエリを実行できます。どこを見ればよいかの出発点になります。

于 2011-08-01T23:49:08.180 に答える