SYSTOOLS.COMPARE_FILE 表関数 で何ができる?
■表関数:SYSTOOLS.COMPARE_FILE
■カテゴリ:ユーティリティサービス
■サポート:IBM i 7.2以降
SYSTOOLS.COMPARE_FILE 表関数は、2つのデータベーステーブル(PF)に加え、PGMソースやDDSソース等を記述したソース物理ファイルの比較も可能です。比較対象もテーブルの属性と格納されているデータの両方が可能です。テーブル2(ファイル2)はリモートDb2 for i 上も可能です。(WRKRDBDIREコマンドで追加済のリモートのDb2 for
iを参照できる。)
SYSTOOLS.COMPARE_FILEの実行例
使用したテーブルの設定値などは後に記載しています。
実行例1 属性の比較 ATTRIBUTES *YES
SELECT * FROM TABLE(QSYS2.COMPARE_FILE(
LIBRARY1=>'DEMOLIB', FILE1=>'TOKMSP',
LIBRARY2=>'GOMALIB', FILE2=>'TOKMSP',
COMPARE_ATTRIBUTES=>'YES',
COMPARE_DATA=>'NO'
));
実行結果例は下記のようになります。
ジャーナルの取得状況の差異、初期レコード数、増分レコード数などの相違が返されます。
実行例2 データの比較 COMARE_DATA *YES
こちらはデータの差異を検索したものです。2つのレコードについて差異を発生させています。
SELECT * FROM TABLE(QSYS2.COMPARE_FILE(
LIBRARY1=>'DEMOLIB', FILE1=>'TOKMSP',
LIBRARY2=>'GOMALIB', FILE2=>'TOKMSP',
COMPARE_ATTRIBUTES=>'NO',
COMPARE_DATA=>'YES'
)
実行例はこちら
レコードのデータについて差異のある2レコードのRRNが返されます。
値自体はこの関数では返さないので、キー値その他は別途RRNから調べる方法が必要そうです。
※ COPARE_DATA=>'QUICK' と指定すると、最初の1行だけが返されます。YESより処理時間は高速です。YESの場合、全件検索するので相応な処理負荷、処理時間が必要です。
実行例3 CCSIDの異なるテーブルでの比較 ファイル属性比較
カラムレイアウトなどは共通ですが、PFのCCSIDが異なるファイル間で比較してみました。
SELECT * FROM TABLE(QSYS2.COMPARE_FILE(
LIBRARY1=>'DEMOLIB', FILE1=>'TOKMSP',
LIBRARY2=>'WESBDEMO', FILE2=>'TOKMSP',
COMPARE_ATTRIBUTES=>'YES',
COMPARE_DATA=>'NO'
));
すると、下記のような結果が返ります。ファイル、カラムのCCID値の差異等も返されます。
実行例4 CCSIDの異なるテーブルでの比較 データの比較
実行例3のファイルのデータの中身を比較しようとすると、、
SELECT * FROM TABLE(QSYS2.COMPARE_FILE(
LIBRARY1=>'DEMOLIB', FILE1=>'TOKMSP',
LIBRARY2=>'WESBDEMO', FILE2=>'TOKMSP',
COMPARE_ATTRIBUTES=>'NO',
COMPARE_DATA=>'YES'
));
下記のようなカラムの定義が異なるので比較できない、という旨のメッセージが返され比較できませんでした。
その他のコマンド例
リモートシステムのファイルを比較する場合は、FILE2の方にRDB2というパラメーターを追加します。
SELECT * FROM TABLE(QSYS2.COMPARE_FILE(
LIBRARY1=>'DEMOLIB', FILE1=>'TOKMSP',
LIBRARY2=>'DEMOLIB', FILE2=>'TOKMSP', RDB2=>'IBMIV7R4',
COMPARE_ATTRIBUTES=>'YES',
COMPARE_DATA=>'YES'
));
Db2 SMPフィーチャーが導入済みの場合、以下のような検索多重度を指定できます。
SELECT * FROM TABLE(QSYS2.COMPARE_FILE(
LIBRARY1=>'DEMOLIB', FILE1=>'TOKMSP',
LIBRARY2=>'GOMALIB', FILE2=>'TOKMSP',
COMPARE_ATTRIBUTES=>'NO',
COMPARE_DATA=>'YES,
PARALLEL_DEGREE=>'10'
));
サンプル:使用したテーブルの設定値
最初の例では以下のようにカラムレイアウトは共通ですが、オブジェクトの属性(作成ユーザーやテーブルのCCSIDなど)が異なる2つのテーブルを用意しました。後ほど確認しますが、カラム内のデータも2件のレコードについて相違を作ってあります。
テーブル① DEMOLIB.TOKMSP
※テーブル②と差異のある一部を記載します。
DSPFDコマンドで確認します。 初期レコード数:10,000 初期レコード数 1,000 です。
テーブル(ファイル)のCCSID 5026 です。
次にDSPOBJDコマンド でオブジェクト所有者を確認します。 GOMA です。
また、DSPFFDコマンドでカラムのCCSIDを確認します。 5026と290になっています。
テーブル② GOMALIB.TOKMSP
DSPFDコマンドで確認。 初期レコード数:30,000 増分レコード数 3,000 です。
次にDSPOBJDコマンド でオブジェクト所有者を確認します。 QDFTOWN になっています。
テーブル③ WESBDEMO.TOKMSP
テーブル(ファイル)のCCSID 5035 です。
また、DSPFFDコマンドでカラムのCCSIDを確認します。 5035と1027になっています。
参考マニュアルページ
IBM Docs IBM i 7.5 COMPARE_FILE 表関数 : https://www.ibm.com/docs/ja/i/7.5?topic=services-compare-file-table-function