2つの異なるスキーマ間のデータ比較を実行するツールはありますか?


11

データベースを新しいスキーマに移行していますが、データが正しく移動されたことを確認したいと考えています。

スキーマが同じ場合、従来のデータ比較ツールは2つのデータベースの違いを比較できます。今回のケースでは、テーブルのデザインに変更がありましたが、古いスキーマのすべてのデータは新しいスキーマにあり、少し移動されただけなので、正しいことを確認する必要があります。数千万行あるため、手動で検査することはできません。

このタイプの比較に役立つツールはありますか?

カスタムソリューションの開発を始めるのに役立つライブラリ/フレームワークがない場合はどうなりますか?

必要に応じて、データベース固有のソリューションを使用できます。この場合は、SQL Server 2008です。

私の解決策:VIEW新しいデータベーステーブルと同じフィールドを持つ古いデータベースに各テーブルのを作成して、2つのデータセットを比較しています。

次に、ここで説明する手法を使用してデータを比較します。SQLServerの2つのテーブルを比較するための最短、最速、最も簡単な方法:UNION!

全体的なテーブル構造は古いデータベースに似ており、フィールドが1つのテーブルから別のテーブルに移動、削除、または追加されているので、この移行で私は幸運です。ドロップして追加した場合、比較するものは何もありません。移動または集計されたフィールドについては、比較のために正しい情報を提供するためにビューで計算を行います。

UNION比較を示してくれ差がある行のみが、そうとすぐにデータが正確であるように私は、空の結果セットを取得します。


1
スキーマが変更された場合、データが正しいことはどのようにしてわかりますか?テーブルが分割または結合されている場合はどうなりますか?
gbn 2011年


@AaronBertrand-コメントをありがとうございますが、現時点(3年前)でこのツールの可用性を調査しましたが、異なるスキーマ間の比較を実行するツールは見つかりませんでした。私はあなたのリンクが私がまだ必要とするので私が購入できるツールへのリンクであることを望んでいました。
Tony

@Tonyは、Red-Gateのツールを使用して確実にそれを行うことができます(他のツールについては不明)。手動でマッピングする必要があります。
アーロンバートランド

@Tony異なるスキーマ、同じデータベース?または別のスキーマ、別のデータベース?
アーロンバートランド

回答:


7

2つの異なるスキーマを比較することは不可能ではありません。これは、結果にどれだけ自信があるかを計算したものです。私は基本的に銀行調整テクニックから借りてきました

重要:この調整は、宛先がデータコンテキスト内のソースと正確に一致することを確認するためのものではありません(新しいシステムに移行する理由があります)が、差異について説明する必要があります。

基礎:

  1. 測定に使用するメトリックを特定します(つまり、ユーザーの総数、すべての年齢の合計、ユーザーIDとその郵便番号のリスト...)いくつかのメトリックを使用しようとします:合計、平均、サンプル/詳細レコード
  2. このデータを共通の場所にダンプします(ビュー/レポート/適切なものを使用)
  3. データを比較し、矛盾が説明できることを確認します

私は通常、比較をいくつかの方法(特に詳細なメトリックス)に分割しました。

  • テーブル別:通常、ソーステーブルを定義として使用し、ソーステーブルデータを試行して再現するために、宛先DBに一連のビューを作成します。
  • :オブジェクトによって DBに応じて、あなたはそれを作成するために、より多くの意味をなすかもしれません保存しているものをホリスティックなオブジェクト(すなわち:ユーザー)のビューをAとして、そのオブジェクトを返すために、ビューのセットを作成し、上記と同様の複数のテーブルにわたって結果のセット
  • レポート別:ソースDBに管理レポートの包括的なセットが含まれている場合、別の手法は、これらのレポートをまったく同じフォーマットで再現することです。

テクニック:

比較対象を作成するためにどの方法を使用したかに関係なく、調整可能なソースと宛先のデータを保持する一連のファイル/ビュー/データベースができ、メディアに応じて、一般的に利用可能なツールの1つを使用できますそれらを比較します。私の好みは:

  1. ファイルの比較
    SourceDBとDestinationDBの2つの異なるフォルダーを作成し(タイム/バージョンにスタンプを付けたので、調整を行ったときにわかります)、メトリックの出力を関連する名前のファイルとしてダンプし、比較ツール(CSDiffなど)を使用して違いを特定します

  2. Excelの比較
    特に管理レポートを処理する場合は、レポートを比較するためのブックのExcelセットを作成します(基本的に、VLookupを利用して合計を比較します)。

  3. データの比較
    調整データをファイルまたはレポートに出力するのではなく、それらを別々のDBに出力してから、Redgate SQL Data Compareなどを使用してDBを比較ます。

その他のツール:

これらのいずれも試していませんが、「データ調整ツール」でグーグル検索をすばやく実行すると、次のようになります。

他にもありますが、それらは合理的に見えたものでした


提案をありがとう。あなたが言うように、それは不可能ではありません(私は現在解決策に取り組んでいます)それはただ難しいです。私はあなたが言及する方法を調べます。
Tony

@Tonyの心配はありません。私が見つけたトリックは、それを小さなステップに分割してから、各ステップの既存のツールを見つけることです(カスタムのものを作成する必要があります。それは、可能な限りその労力を最小限に抑えることです)
Andrew Bickerton

6

2つの異なるデータベース設計のデータを比較する場合は、データを比較するために手動でコーディングしたSQLを記述する必要があります。

  • テーブルが分割または結合されている場合はどうなりますか?
  • 日時があったら、今あなたはsmalldatetimeを持っています=データは異なります
  • ...

2つの異なるデータベースでデータをチェックするためのフレームワークのライブラリはありません。

変更または修正した内容を知っているのはあなただけです


私は同じくらい恐れていましたが、誰かがそのような比較をした場合に備えて私は尋ねると思いました。クエリの書き込みを高速化するツールがあるといいのですが、あなたが言うように、私はおそらく最初から何かを書かなければならないでしょう。
Tony

1
@Tony:はい、どのツールも「何が問題か」と「何が変わったか」を区別できないためです
gbn

5

異なるスキーマを比較することは不可能です。あなたの問題を解決するために、比較する必要のあるデータを見つけます。次に、比較したいデータを引き戻すビューを各サーバーに作成します(データ型などを考慮に入れます)。

両方のビューが同じになったら、Red Gate Data Compareなどのサードパーティツールを使用して、どの行が異なるかを確認します。

痛みのように聞こえます。幸運を!


1
あなたはそれは不可能だと言ってから、可能な解決策を提供します:)実際、私が取り組んでいた方法は、外部ツールを使用して結果を比較せずにすべてSQLで実行することを除いて、提案に似ています。ありがとう。
Tony

2

数年前、私はそれを行うためのツールを書きました-2つのデータベース間のデータ比較です。それ以来、私はそれを商用ソフトウェアに変換し、

www.sql-server-tool.com

  • 1つのライセンスの価格は99ドルですが、30日間無料で試すことができます。

プログラム-「SQL Server比較ツール」のSCTという名前(名前を付けるのが苦手だった:)-選択した列を無視したり、比較方法(レコードごとまたは主キー/インデックス比較)。比較の「セッション」は、パラメータを再入力せずに保存して後で再実行できます。コマンドラインパラメータを使用して、比較を完全に自動化できます。

数千万行の場合は少し遅くなる可能性があります。その場合は、データの小さいサブセットから開始することをお勧めします。たとえば、最初の1,000行のみを比較して、プロセスの微調整が必​​要かどうかを確認します。

ダリウス・ジエヴィアルトウスキ・ギントウト


アプリを推奨していただきありがとうございます。試してみましたが、さまざまなスキーマを比較していないため、これを行う必要があります。最初のテーブルからデータを取得中に失敗しました。また、比較する行数を制限する方法がないように思われるため、アプリが私のデータ量を処理できるかどうかもわかりません。テストしたテーブルには、9千9百万の行があります。
Tony
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.