RPGによるコーディング コミットメント処理
前ページ 次ページ 目  次


ここでの処理はRPGというより、データベースのリカバリーのがテーマですが、とりあえずここでとりあげます。



コミットとロールバック

見出しファイルと明細ファイルのように複数のファイルからなるデータベースの場合、
ほんの一瞬ですが、複数のファイルの更新をおえるまでにタイムラグあります。
この間のファイルの更新をすべて仮更新としておき、なにもなければそれを本更新に確定するのが
コミット処理です。
コミット処理をするには以下のようにします。

1.プログラムを作成(コミット・ロールバック)
2.ジャーナルレシーバー作成
3.ジャーナル作成
4.ジャーナル開始
5.プログラム開始
6.ジャーナル終了


1.プログラム作成
  コミット処理をするRPGプログラムでは、
  (1)ファイルにコミットオプションを記述し、
  (2)更新確定のタイミングでコミット命令を発行する
ようコーディングします。
     F* 受注見出ファイル                                              
     FF510    UF  E           K        DISK                      A    
     F                                              KCOMIT          (1) 
     F* 受注明細ファイル                                              
     FF520    UF  E           K        DISK                      A    
     F                                              KCOMIT          (1)

        中 略

     C* ファイル更新                                                  
+----C           *IN30     IFEQ *OFF                        NO-ERROR  
|+---C           *IN29     IFEQ *OFF                        NO-CHANGE 
||   C                     EXSR SBUPD                       FILE 更新 
||   C                     COMIT                            コミット (2)    
||   C                     Z-ADD01        W@FMT                       
|+---C                     ELSE                             CHANGED   
||   C                     MOVELMSG,5     S9MSG             更新確認  
|+---C                     ENDIF                                      
+----C                     ENDIF                                       

    中 略

     C           SBUPD     BEGSR                                  
     C*ここから明細ファイルの更新                                               
     C                     Z-ADD000       W@JU\             受注額   
+----C                     SELEC                                     
+----C           W@MOD     WHEQ 02                                   
|    C*  ファイルへ編集                                              
|+---C           01        DO   99        RRN                        
||+--C           CHG,RRN   IFEQ '1'                         CHG      
|||  C           RRN       CHAINSFL01                30              
|||  C                     Z-ADDS1JUNO    JDJUNO            受注Y   
|||  C                     Z-ADDS4GYNO    JDGYNO            行Y     
|||  C           KEY99A    CHAINF520R                99              
|||  C*  ________      ________                                      
|||  C* (サブファイル( --> ( ファイル  (                                      
|||  C*  ~~~~~~~~      ~~~~~~~~                                      
|||  C                     MOVELS4HNNO    JDHNNO            品目Y   
|||  C                     Z-ADDS4JUSU    JDJUSU            受注数   
|||  C                     Z-ADDS4JUTK    JDTNKA            受注@   
|||  C                     Z-ADDS4JUGK    JDJUGK            受注額   
|||  C           JDJUGK    MULT 0.05      JDTXGK            受注額   
|||  C*                                                             
|||  C                     ADD  S4JUGK    W@JU\             受注額  
|||+-C           *IN99     IFEQ *OFF                                
|||| C                     UPDATF520R                               
|||+-C                     ELSE                                     
|||| C                     WRITEF520R                               
|||+-C                     ENDIF                                    
||+--C                     ENDIF                                    
|+---C                     ENDDO                                    
+----C           W@MOD     WHEQ 04                                  
|    C* 削除モードのとき明細削除                                 
|    C                     Z-ADDS1JUNO    JDJUNO            受注Y  
|    C           KEY99     SETLLF520R                               
|    C           KEY99     READEF520R                    99         
|+---C           *IN99     DOWEQ*OFF                                
||   C                     DELETF520R                               
||   C           KEY99     READEF520R                    99         
|+---C                     ENDDO                                    
|    C*                                                             
+----C                     ENDSL                                    
     C* ここから見出しファイルの更新                                     
     C                     CLEARF510R                                
     C           S1JUNO    CHAINF510R                98              
+----C                     SELEC                                     
+----C           W@MOD     WHEQ 02                                   
|    C* 受注見出ファイルへ編集                                       
|    C                     Z-ADDS1JUNO    JHJUNO            受注Y   
|    C                     MOVELS2TKNO    JHTKNO            得意先Y 
|    C                     Z-ADDW@JU\     JHJUGK            受注額計 
|    C           S2JUDT    ADD  200000000 JHJUDT            受注日   
|    C                     Z-ADDS2NODT    JHNODT            納品日   
|    C                     Z-ADDS2SEDT    JHSEDT            請求日   
|    C*                                                              
|    C           *IN98     IFEQ *OFF                                 
|    C                     UPDATF510R                                
|    C                     ELSE                                      
|    C                     WRITEF510R                                
|    C                     ENDIF                                     
+----C           W@MOD     WHEQ 04                                   
|    C* 削除モードのとき見出し削除                                   
|    C                     DELETF510R                                
+----C                     ENDSL                                     
     C* ***両ファイル更新の完了***                                            
     C                     CLEARS2TKNO                                 
     C                     MOVE *ZERO     CHG                          
     C                     Z-ADD01        W@FMT             第一画面へ 
     C*                                                                
     C                     ENDSR                                       


2.ジャーナルレシーバー作成
  ファイルの更新の記録を受け取りするジャーナルレシーバーを作成します。
  ジャーナルに接続して、更新記録をシステムから受取りジャーナルにわたします。

CRTJRNRCV  JRNRCV(WRKLIB/F520JR)


3.ジャーナル作成
  ジャーナルレシーバーに関連づけてジャーナルを作成します。
  このジャーナルには、ファイルの更新のこまかい記録が蓄積されます。

CRTJRN JRN(WRKLIB/F520J) JRNRCV(WRKLIB/F520JR)


4.ジャーナル開始
  プログラム開始に先立ち、該当のファイル(F510とF520)に対し、更新の記録のジャーナルを開始します。

STRJRNPF FILE(WRKLIB/F520 WRKLIB/F510) JRN(WRKLIB/F520J)
2 個のファイルでジャーナル処理が開始された。 ・・・(システムからのメッセージ)


5.プログラムの開始

該当プログラムを開始します。
CALL WRKLIB/RF522

注:コミット処理の入ったプログラムをジャーナルなしに開始すると、OPEN時のエラー(CPF4326)になります。

6.プログラムの終了

業務終了するとプログラムを終了します。

7.ジャーナル終了

開始したジャーナル処理を終了します。
ENDJRNPF FILE(WRKLIB/F520 WRKLIB/F510) JRN(WRKLIB/F520J)


あるいは
ENDJRNPF FILE(*ALL) JRN(WRKLIB/F520J)




前ページ 次ページ 目 次



(C)COPYRIGHT ISHIOKA KATSUHIDE 2000