Tools

35. データ・ベースのライブラリーの検索ツール RTVDBLIB

あるデータ・ベースがどのライブラリーにあるかを、どのようにして調べればよいだろうか ?
よくある手法では CHKOBJ コマンドや API: QUSROBJD を使用することを思いつくかも知れないが
いずれも *LIBL つまりライブラリー・リスト上のライブラリーにある場合でしか
検索することができない。
そこで任意のデータ・ベースがどのライブラリーに保管されているかを一瞬のうちに
調べてくれるツールを紹介しよう。
この検索ツールは、探すデータ・ベース(*FILE) が、ライブラリー・リストにない場合でも
調べることができる。
原理的には簡単であるが、覚えておけば効果的な手法であることは間違いない。
原理は データ・ベース : QSYS/QADBXREF を参照すればよいだけである。
相互参照ファイル: QSYS/QADBXREF は System i のユーザーが System i 上でいろいろな
ライブラリーを作成したりファイルを作成したり、移動したりしても確実に OS によって
保守されてるデータ・ベースである。
ファイルとライブラリーの関連が OS400 によって単なる物理ファイルとして意外であるかも
知れないが QADBXREF は知っておくと重宝するデータ・ベースである。

QADBXREF は ライブラリー + データ・ベース名 をキー・フィールドとするデータ・ベースであって
次のようにデータが並んでいる。

QADBXREF のデータ表示サンプル

QADBXREF のキー・フィールドは

ライブラリー名 + ファイル名

であり逆の

ファイル名 + ライブラリー名

をキー・フィールドとするのが QADBXREF に従属する論理ファイルのひとつである「 QADBXFIL 」である。
例えば SHOHIN という名前のファイルがライブラリー TESTFILQTRFIL の両方に存在していたとすると
QADBXFIL には、

SHOHIN     QTRFIL
SHOHIN     TESTFIL

というように並んで存在しているはずである。
そこで QADBXFILCHAIN または SETLL & READE の処理を行えば簡単にライブラリー名を取り出すことが
できるようになる。
単なるキーつきの物理ファイルのレコードを探すだけであるから、これほど簡単なことはないだろう。

【 RTVDBLIB 】
---------------------------------------------------------------------------------
0001.00 H DATEDIT(*YMD/) COPYRIGHT('(C) OfficeQuattro Co,.Ltd Japan 2011-')      
0002.00 F**********  データ・ベースのライブラリー検索 *************************  
0003.00 FQADBXFIL  IF   E           K DISK                                       
0004.00 F**********************************************************************  
0005.00 D FILE            S             10A                                      
0006.00 D FILE_P          S               *                                      
0007.00 D FILLIB          S             10A                                      
0008.00 D FILLIB_P        S               *                                      
0009.00 C*----------------------------------------------------+                  
0010.00 C     *ENTRY        PLIST                                                
0011.00 C                   PARM                    FILE                         
0012.00 C                   PARM                    FILLIB                       
0013.00 C*----------------------------------------------------+                  
0014.00 C*                                                                       
0015.00 C*----------------------------------------------------+                  
0016.00 C     SETKEY        KLIST                                                
0017.00 C                   KFLD                    DBXFIL                       
0018.00 C                   KFLD                    DBXLIB                       
0019.00 C*----------------------------------------------------+                  
0020.00 C                   MOVEL(P)  FILE          DBXFIL                       
0021.00 C                   MOVE      *LOVAL        DBXLIB                       
0022.00 C     SETKEY        SETLL     QADBXFIL                                   
0023.00 C                   SETOFF                                       50      
0024.00 C     DBXFIL        READE     QADBXFIL                               50 
0025.00 C     *IN50         IFEQ      *ON                                       
0026.00 C                   MOVEL(P)  '*LIBL     '  FILLIB                      
0027.00 C                   ELSE                                                
0028.00 C     DBXLIB        IFEQ      'BACKUP    '                              
0029.00 C     DBXFIL        READE     QADBXFIL                               50 
0030.00 C                   END                                                 
0031.00 C                   MOVEL(P)  DBXLIB        FILLIB                      
0032.00 C                   END                                                 
0033.00 C                   SETON                                        LR     
0034.00 C                   RETURN                                              
---------------------------------------------------------------------------------
【 解説 】

解説も不要なくらい簡単なソースである。
パラメータ : FILE にファイル名を与えるとパラメータ : FILLIB にライブラリー名が戻される。
OS が壊れない限り実行時において QADBXFIL が見つからないということはない。
RTVDBLIB は便利で約に立つプログラムであるので、ぜひ活用して頂きたい。