データベースのオープン毎に処理を行う (Exit プログラム)

データベースのオープンを毎回捕捉して外部プログラムで処理を行わせることが、V5R3 からできるようになりました。PTF を適用することで V5R2 でも同機能がサポートされるようになっています。

QIBM_QDB_OPEN という出口点 (= Exit ポイント) があり、ここに出口プログラムを登録することでデータベースのオープン毎に行いたい処理を実行させることができる、という仕組みになっています。

今回は V5R2 のマシンで実行しました。
V5R2 で SI17353 と SI17578 を適用すると、WRKREGINF の画面で QIBM_QDB_OPEN という Exit ポイントが増えるのが以下の二つの画面からわかります。

PTF 適用前の WRKREGINF コマンドの出力画面です。

PTF 適用後の WRKREGINF コマンドの出力画面です。

監査やログなどが、まずは思いつく代表的な使用方法でしょうか。

今回は、DBA の人 ("DBA"という名のユーザープロファイル、ということにしてあります) 以外はあるファイルを削除することはできないようにする、というのをこちらのサイトのプログラムを参考にして作ってみました。


準備

プログラム

今回のプログラムは ILE/RPG です。

内容はこんなかんじです。
仕様の詳細はこちらを参考にしてください。

コンパイルします。

出口点への登録

コンパイルできたプログラムを WRKREGINF コマンドを使って登録します。

上の画面でオプション 8 を入れるとこんな画面になります。

さらにこんな画面になります。

登録完了後の画面です。

実行例

DBA 以外の人 ("DBA"というユーザー以外のユーザー) が該当ファイルの DELETE を行おうとすると、こんなかんじのメッセージが出てきます。

ジョブログを見ると ......

理由がちゃんとわかるようになっています。
これで出口プログラムがちゃんと登録されて動いていることもわかりますね。

上記の詳細メッセージです。

"DBA" というユーザーで DELETE を行うと、ちゃんと完了します。
こちらのジョブログには特別なメッセージは送られません。

上記テストに使った出口プログラムのソースはこちらです。

 Dreturn_cd        S             10I 0                                                            
 Dds_parm          DS                                                                             
 D header_size                   10I 0                                                            
 D format                         8                                                               
 D offset                        10I 0                                                            
 D number_of_file                10I 0                                                            
 D length_of_elem                10I 0                                                            
 D job                           10                                                               
 D usrprf                        10                                                               
 D jobnbr                         6                                                               
 D cur_usrprf                    10                                                               
 D reserved                    1024                                                               
 Delement          DS                  qualified                                                  
 D  file                         10                                                               
 D  library                      10                                                               
 D  member                       10                                                               
 D   filler                       2                                                               
 D  file_type                    10I 0                                                            
 D  base_pf                      10I 0                                                            
 D  read                           n                                                                
 D  write                          n                                                                
 D  update                         n                                                                
 D  delete                         n                                                                
                                                                                                    
 D i               S             10I 0                                                              
                                                                                                    
 C     *entry        plist                                                                          
 C                   parm                    ds_parm                                                
 C                   parm                    return_cd                                              
                                                                                                     
  /free                                                                                              
         offset       += 1;                                                                          
                                                                                                     
         FOR i = 1 to number_of_file;                                                                
                                                                                                     
         element = %subst(ds_parm : offset : length_of_elem);                       
                                                                                                     
           IF    element.file    = 'L1'                                                         
            and  element.library = 'LOG'                                                            
            and  element.delete = *on                                                              
            and  cur_usrprf <> 'DBA';                                                               
              return_cd = 0;                                                                         
              return;                                                                                
           ELSE;                                                                                     
              offset += length_of_elem;                                                              
           ENDIF;                                                                                    
                                                                                                     
         ENDFOR;                                                                                     
                                                                                                     
         *inlr = *on;                                                                                
   /end-free                                                                                         

[Top Pageに戻る]

Ads by TOK2