

DBの付合確認  
Javaの修正後のソースを流したDBの結果と修正前のソースを流したDBの結果の付合確認をしようと考えております。  
ある1つのDBのテーブルの二つの項目だけ異なっていることとその2つの項目以外の項目が同じであることを確認したいのですがDBの更新対象のレコード件数が300万件あります。  
エクセルの関数をEXACT関数などを利用して比較しようと思ったのですが件数が膨大のためエクセルが壊れてしまいます。なにか良い方法はありますでしょうか。


CC BY-SA 3.0
2018-04-07T05:39:26.830
43026
2018-04-16T08:56:58.380
2018-04-07T05:51:48.197
20098
17348
question
java database
DBの膨大な件数の付合確認について。


こんな方法はどうでしょうか?

  1. 2つのテーブルが結合可能な状況であるならば、直接結合して以下のように確認する。

    * キー項目 + 異なる項目 が一致するものを検索して0件になること
    * キー項目 + 同じ項目 が一致するものを検索して元の件数と一致すること
  2. 2つのテーブルが結合不可能な状況であるならば、それぞれCSVファイルに出力して以下のように確認する。(※出力する際は、キー項目でソートしておく必要があります)

    * キー項目 + 異なる項目 に絞ってCSVファイルに出力して、全行異なること
    * キー項目 + 同じ項目 に絞ってCSVファイルに出力して、全行一致すること

＃結合方法や、出力、比較方法はDBMSや環境によって異なるので割愛します。


CC BY-SA 3.0
2018-04-07T06:03:22.787
43027
2018-04-07T06:03:22.787
20098
43026
answer


Java は一切関係なく、根本的に要求次第な感じがしますが。

"完全な" 突合確認を行うのであれば、同一データを保持する作業用の DB サーバーを立ててそこで (トランザクションなどを利用して)
現在のスナップショットに対して処理結果を (dirty read のまま) ダンプ出力したものと、「完全に想定通りの結果になっている 300
万件のデータを作成」して比較するしかないんじゃないですかね。  
そこまでの要求があること自体、イコールで様々な要因から「対象コードを信用していない」のだと思いますし。

本来は普通に、更新パターンを網羅したごく少数のデータを用意しての比較で十分な話だと思いますよ。  
「実際にマッチする本番データが 300 万件」という話であって、「検証が必要なパターンが 300 万件」という話ではないでしょうから。

検収作業的にフルデータマッチングしたいという話で言えば、「一括ではないにしろ複数の段階で処理した適切なデータ」を用意してダンプ→テキストレベルの比較で、十分に対応可能でしょう。


CC BY-SA 3.0
2018-04-08T21:34:27.280
43069
2018-04-08T21:34:27.280
13613
43026
answer


DBレベルで複数のテーブルを確認したいのか、単一のテーブルで確認したいのか質問から読み取れないのですが、単一のテーブルでということでしたら以下でどうですか。

・修正前のテーブルをつくる  
・修正前のテーブル名を適当な名前に変更し、修正後のテーブルをつくる  
・修正前と修正後のテーブルを JOINし
項目1、項目2、それ以外の項目の一致・不一致をCASE文でそれぞれチェックして”一致”・”不一致”を出力し、あとはそれをDB上で確認するか、Excelなどに落として確認すればどうかと思います。

単一のテーブルではなく複数テーブルであれば、複数テーブルの項目を同じようにJOINして突合せて、必要なアンサーセットを吐き出せば同じかと思います。

また、処理前と処理後でレコード件数が違うのであれば、inner join した結果と、outer join
した結果の差を新規レコード（あるいは削除レコード）として差異認識できると思います。


CC BY-SA 3.0
2018-04-16T08:56:58.380
43292
2018-04-16T08:56:58.380
28172
43026
answer