none
tablediffについて RRS feed

  • 質問

  • 今回、SQLServer2000で運用されているシステムのマイグレーションを実施予定です。
    今回のステップでは、SQLServer2000はバージョンアップしません。

    その際に、現システムで実行し保存されたテーブルデータと、マイグレーション後のシステムで実行し保存されたテーブルデータが、同一である事を確認する方法を検討しています。
    データ量が、1テーブル数10万件以上になる場合もあるため、Excel等を利用する方法は無理かと考えています。

    SQLServer2005に提供されているツールで「tablediff」がありますが、SQLServer2000にも同様のツールが提供されていれば利用できないかと考えています。
    提供されているかどうか、ご存知の方、よろしくお願いします。

    またデータ比較するよい方法があれば、アドバイスお願いします。

    以上、よろしくお願いします。
    2009年4月21日 7:53

回答

  • SQL Server 2005のtablediffは、SQL Server 2000でも使えるみたいです。

    tablediff テーブル内容比較(SQL Server 2000で便利なSQL Server 2005のツール)
    http://blogs.sqlpassj.org/yoneda/archive/2005/12/21/15162.aspx
    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    • 回答としてマーク sk7474 2009年5月11日 8:21
    2009年4月21日 15:05
  • 回答有難うございます。

    参考サイトの記載確認しました。
    SQLServer2005がインストールされていれば、比較実行する対象サーバとして、SQLServer2000を指定可能だという事ですね。

    SQLServer2005がインストールされていない環境で実行する場合のよい方法がありましたらよろしくお願いします。


     LAN上にSQL Server 2005/2008がインストールされているコンピュータがあれば、-sourceserverと-destinationserverにSQL Server 2000のコンピュータ名を指定すれば、マイグレーション用PCにSQL Server 2005をインストールしなくてもよさそうですが、どうでしょうか?

     あとライセンス的にグレーですが、SQL Server 2005/2008にtablediff.exeをコピーして実行してみるとか。
    (テストしたところ、.NET Framework 2.0以降がインストールされていれば実行できました)


     tablediff.exeを使わない(使えない)場合、テーブルの内容を比較するクエリー、もしくはストアドプロシージャを作成するのが妥当かと思います。


     その他の方法としては、(面倒ですが)bcpコマンドでテキストファイルにエクスポートしてfcコマンドで比較してみるのはどうでしょう。
    具体的には、コマンドプロンプトで以下の操作を行います。
    ※-TでWindows認証で接続していますが、SQL認証の場合は-Uと-Pでユーザ名/パスワードを指定してください。

    最初にマイグレーション前のテーブルをテキストファイルに出力します。
    (ソート順を合わせるため、テーブル名ではなくORDER BYを指定したクエリーをパラメータとして指定しています)
    bcp "SELECT * FROM テーブル名 ORDER BY キー" out TableA_1.txt -S サーバー名A -T -c

    同様に、マイグレーション後のテーブルをテキストファイルに出力します。
    bcp "SELECT * FROM テーブル名 ORDER BY キー" out TableA_2.txt -S サーバー名A -T -c

    続いて、fcコマンドでファイルの内容を比較します。
    fc TableA_1.txt TableA_2.txt

     内容が同じであれば、「FC: 相違点は検出されませんでした」と表示され、一致しない行があればその行(とその前後の行)の内容が表示されます。

     それぞれのコマンドで使用できるオプションは/?を指定することでヘルプが表示されますので、そちらも参考にしてください。

    • 回答としてマーク sk7474 2009年5月11日 8:21
    2009年4月26日 14:09

すべての返信

  • SQL Server 2005のtablediffは、SQL Server 2000でも使えるみたいです。

    tablediff テーブル内容比較(SQL Server 2000で便利なSQL Server 2005のツール)
    http://blogs.sqlpassj.org/yoneda/archive/2005/12/21/15162.aspx
    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    • 回答としてマーク sk7474 2009年5月11日 8:21
    2009年4月21日 15:05
  • 回答有難うございます。

    参考サイトの記載確認しました。
    SQLServer2005がインストールされていれば、比較実行する対象サーバとして、SQLServer2000を指定可能だという事ですね。

    SQLServer2005がインストールされていない環境で実行する場合のよい方法がありましたらよろしくお願いします。

    2009年4月22日 23:47
  • 回答有難うございます。

    参考サイトの記載確認しました。
    SQLServer2005がインストールされていれば、比較実行する対象サーバとして、SQLServer2000を指定可能だという事ですね。

    SQLServer2005がインストールされていない環境で実行する場合のよい方法がありましたらよろしくお願いします。


     LAN上にSQL Server 2005/2008がインストールされているコンピュータがあれば、-sourceserverと-destinationserverにSQL Server 2000のコンピュータ名を指定すれば、マイグレーション用PCにSQL Server 2005をインストールしなくてもよさそうですが、どうでしょうか?

     あとライセンス的にグレーですが、SQL Server 2005/2008にtablediff.exeをコピーして実行してみるとか。
    (テストしたところ、.NET Framework 2.0以降がインストールされていれば実行できました)


     tablediff.exeを使わない(使えない)場合、テーブルの内容を比較するクエリー、もしくはストアドプロシージャを作成するのが妥当かと思います。


     その他の方法としては、(面倒ですが)bcpコマンドでテキストファイルにエクスポートしてfcコマンドで比較してみるのはどうでしょう。
    具体的には、コマンドプロンプトで以下の操作を行います。
    ※-TでWindows認証で接続していますが、SQL認証の場合は-Uと-Pでユーザ名/パスワードを指定してください。

    最初にマイグレーション前のテーブルをテキストファイルに出力します。
    (ソート順を合わせるため、テーブル名ではなくORDER BYを指定したクエリーをパラメータとして指定しています)
    bcp "SELECT * FROM テーブル名 ORDER BY キー" out TableA_1.txt -S サーバー名A -T -c

    同様に、マイグレーション後のテーブルをテキストファイルに出力します。
    bcp "SELECT * FROM テーブル名 ORDER BY キー" out TableA_2.txt -S サーバー名A -T -c

    続いて、fcコマンドでファイルの内容を比較します。
    fc TableA_1.txt TableA_2.txt

     内容が同じであれば、「FC: 相違点は検出されませんでした」と表示され、一致しない行があればその行(とその前後の行)の内容が表示されます。

     それぞれのコマンドで使用できるオプションは/?を指定することでヘルプが表示されますので、そちらも参考にしてください。

    • 回答としてマーク sk7474 2009年5月11日 8:21
    2009年4月26日 14:09
  • こんにちは。中川俊輔です。

    trapemiyaさん、CatTailさん、回答ありがとうございます。

    会社員33さん、はじめまして。フォーラムのご利用ありがとうございます。
    その後いかがでしょうか?マイグレーション結果の確認はうまくいきましたか?

    有用な情報と思われたため、勝手ながらtrapemiyaさん、CatTailさんの回答へ回答マークをつけさせていただきました。

    今後ともフォーラムをよろしくお願いします。
    それでは!
    マイクロソフト株式会社 フォーラム オペレータ 中川 俊輔
    2009年5月11日 8:27
  • TO:中川さん、trapemiyaさん、CatTailさん

    回答有難うございます。
    返信が遅くなり、申し訳ありません。

    現在、マイグレーションの実施確定には至っておりませんが、実施の際には、アドバイス頂いた情報を参考にさせて頂きたいと思います。
    有難うございました。
    2009年5月12日 3:51