1
0

Db2 for i Services Directory : SYSTOOLS.COMPARE_FILE 表関数①Db2テーブルの比較

Last updated at Posted at 2024-04-04

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を参照できる。)
image.png

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'
                                       ));

実行結果例は下記のようになります。
ジャーナルの取得状況の差異、初期レコード数、増分レコード数などの相違が返されます。
image.png

実行例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から調べる方法が必要そうです。
image.png

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値の差異等も返されます。
image.png
image.png

実行例4 CCSIDの異なるテーブルでの比較 データの比較

実行例3のファイルのデータの中身を比較しようとすると、、

SELECT * FROM TABLE(QSYS2.COMPARE_FILE(
                                       LIBRARY1=>'DEMOLIB', FILE1=>'TOKMSP', 
                                       LIBRARY2=>'WESBDEMO', FILE2=>'TOKMSP',
                                       COMPARE_ATTRIBUTES=>'NO',
                                       COMPARE_DATA=>'YES'
                                       ));

下記のようなカラムの定義が異なるので比較できない、という旨のメッセージが返され比較できませんでした。
image.png

その他のコマンド例

リモートシステムのファイルを比較する場合は、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 です。
image.png
テーブル(ファイル)のCCSID 5026 です。
image.png
次にDSPOBJDコマンド でオブジェクト所有者を確認します。 GOMA です。
image.png
また、DSPFFDコマンドでカラムのCCSIDを確認します。 5026と290になっています。
image.png

テーブル② GOMALIB.TOKMSP

DSPFDコマンドで確認。 初期レコード数:30,000 増分レコード数 3,000 です。
image.png
次にDSPOBJDコマンド でオブジェクト所有者を確認します。 QDFTOWN になっています。
image.png

テーブル③ WESBDEMO.TOKMSP

テーブル(ファイル)のCCSID 5035 です。
image.png
また、DSPFFDコマンドでカラムのCCSIDを確認します。 5035と1027になっています。
image.png

参考マニュアルページ

IBM Docs IBM i 7.5 COMPARE_FILE 表関数 : https://www.ibm.com/docs/ja/i/7.5?topic=services-compare-file-table-function

1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0