ジャーナル情報の API (QjoRetrieveJournalInformation) による取得 (4) - 遠隔ジャーナル情報の取得 -

Key 1 の場合です。

遠隔ジャーナルの情報を取得します。

Key 3 Output Section

Offset Type Field
Dec Hex
Note: The following fields are returned when the remote journal information key is specified. Otherwise, they will not be used.
0 0 BINARY(4) Total number of remote journals
4 4 CHAR(16) Reserved
Note: The following fields repeat for each remote journal that is returned.
    CHAR(18) Relational database directory entry
    CHAR(10) Remote journal name
    CHAR(10) Remote journal library name
    CHAR(10) Remote journal receiver library name
    CHAR(10) Controlled-inactivate journal information journal receiver
    CHAR(10) Controlled-inactivate journal information journal receiver library
    BINARY(4) Controlled-inactivate journal information sequence number
    BINARY(4) Reserved
    CHAR(1) Remote journal type
    CHAR(1) Remote journal state
    CHAR(1) Remote journal delivery mode
    CHAR(1) Reserved
    BINARY(4) Sending task priority
    CHAR(20) Controlled-inactivate journal information sequence number - long
    CHAR(60) Reserved
    CHAR(512) Relational database directory entry details
    CHAR(348) Reserved

準備

今回は遠隔ジャーナルの情報を取得するためのテストなので、「ジャーナル情報の API (QjoRetrieveJournalInformation) による取得 (1) - 概要と準備 -」での準備に加えて、遠隔ジャーナルをセットアップする必要があります。

まず、ソース側のシステムから ADDRMTJRN コマンドを使用して遠隔ジャーナルのセットアップを行います。

「リレーショナル・データベース」に指定したデータベース(WRKRDBDIRE コマンドで登録)とDDM/DRDA で接続できるようになっている必要があります。

その接続先("ターゲット"になります) には、↑の場合、JRNTEST というライブラリーさえあれば、自動的にジャーナルが作成されます。
(「ターゲット・ジャーナル」が "*SRCJRN" になっていて、「ソース・ジャーナル」が"JRNTEST/JRN" になっているからですね。ちなみに、ターゲット側に"JRNTEST"ライブラリーが存在しなかった場合はエラーになります)

プログラム

こちらがサンプルプログラムになります。
例によって、とてもシンプルなものになっています。

     H DFTACTGRP(*NO)                                                            
     **                                                                                             
     D RTVJRNINF3      PR                                                                           
     D  JRN                          10                                                             
     D  LIB                          10                                                             
     D RTVJRNINF3      PI                                                                           
     D  JRN                          10                                                             
     D  LIB                          10                                                             
     **                                                                                             
     D ERRC0100        Ds                  Qualified                                                
     D  ByteProvided                 10i 0 Inz( %Size( ERRC0100 ))                                  
     D  ByteAvail                    10i 0 Inz                                                      
     D  ExcpID                        7a                                                            
     D                                1a                                                            
     D  ExcpData                    128a                                                            
     **                                                                                             
     D i               s             10u 0                                                          
     D ApiRcvSiz       s             10u 0                                                          
     **                                                                                             
     D RJRN0100        Ds                  Based( pJrnInf )  Qualified                              
     D  ByteReturned                 10i 0                                                          
     D  ByteAvail                    10i 0                                                          
     D  OfsKeyInf                    10i 0                                                          
     D  JrnNam                       10a                                                            
     D  JrnLib                       10a                                                            
     D  ASP                          10i 0                                                          
     D  MsgQName                     10a                                                            
     D  MsgQLib                      10a                                                            
     D  MngRcvOpt                     1a                                                            
     D  DltRcvOpt                     1a                                                            
     D  RMVINTENT                     1a                                                            
     D  MINFIXLEN                     1a                                                            
     D  MAXOPT1                       1a                                                            
     D  MAXOPT2                       1a                                                            
     D  MAXOPT3                       1a                                                            
     D  rsvd1                         2a                                                            
     D  JrnType                       1a                                                            
     D  RmtJrnType                    1a                                                            
     D  JrnStatus                     1a                                                            
     D  JrnDlvyMode                   1a                                                            
     D  LclJrnName                   10a                                                            
     D  LclJrnLib                    10a                                                            
     D  LclJrnSys                     8a                                                            
     D  SrcJrnName                   10a                                                            
     D  SrcJrnLib                    10a                                                            
     D  SrcJrnSys                     8a                                                            
     D  RedirRcvLib                  10a                                                            
     D  JrnText                      50a                                                            
     D  MinEntDtaAra                  1a                                                            
     D  MinEntFiles                   1a                                                            
     D  rsvd2                         8a                                                            
     D  JrnCache                      1a                                                            
     D  NbrAtcdRcvs                  10i 0                                                          
     D  AtcdRcvName                  10a                                                            
     D  AtcdRcvLib                   10a                                                            
     D  AtcdLclSys                    8a                                                            
     D  AtcdSrcSys                    8a                                                            
     D  AtcdDualRcv                  10a                                                            
     D  AtcdDRcvlib                  10a                                                            
     D  MngRcvDly                    10i 0                                                          
     D  DltRcvDly                    10i 0                                                          
     D  ASPDevName                   10a                                                            
     D  LclJrnGrp                    10a                                                            
     D  SrcJrnGrp                    10a                                                            
     D  JobNameStored                 1a                                                            
     D  UsrNameStored                 1a                                                            
     D  PgmNameStored                 1a                                                            
     D  LibNameStored                 1a                                                            
     D  SysseqStored                  1a                                                            
     D  RmtAdrStored                  1a                                                            
     D  THDidStored                   1a                                                            
     D  LUWidStored                   1a                                                            
     D  XIDStored                     1a                                                            
     D  rsvd3                         4a                                                            
     D  JrnObjLmt                     1a                                                            
     D  JrnObjTotal                  10u 0                                                          
     D  JrnTblTotal                  10u 0                                                          
     D  JrnMbrTotal                  10u 0                                                          
     D  JrnDATotal                   10u 0                                      Journaled Data Area 
     D  JrnDQTotal                   10u 0                                      Journaled Data Q    
     D  JrnIfsTotal                  10u 0                                                          
     D  JrnAPTotal                   10u 0                                      Journaled AccessPath
     D  JrnCmtTotal                  10u 0                                      CMTDFN              
     D  rsvd4                       104a                                                            
     D  NbrKey                       10i 0                                                          
     **                                                                                             
     D JrnKey          Ds                  Based( pJrnKey )  Qualified                              
     D  Key                          10i 0                                                          
     D  OfsKeyInf                    10i 0                                                          
     D  KeyHdrLen                    10i 0                                                          
     D  Entries                      10i 0                                                          
     D  EntriyLen                    10i 0                                                          
     **                                                                                             
     D JrnKeyHdr3      Ds                  Based( pKeyHdr3 )  Qualified                             
     D  TotalRmtJrn                  10i 0                                                          
     D  rsvd                         16a                                                            
     **                                                                                             
     D JrnKeyEnt3      Ds                  Based( pKeyEnt3 )  Qualified                             
     D  RdbDirE                      18a                                                            
     D  RmtJrnName                   10a                                                            
     D  RmtJrnLib                    10a                                                            
     D  RmtJrnRcvLib                 10a                                                            
     D  CijJrnRcv                    10a                                        ControlledInactivate
     D  CijJrnRcvLib                 10a                                                            
     D  CijSeqNbr                    10i 0                                                          
     D  rsvd1                        10i 0                                                          
     D  RmtJrnType                    1a                                                            
     D  RmtJrnStatus                  1a                                                            
     D  RmtJrnDlvMd                   1a                                        Delivery Mode       
     D  rsvd2                         1a                                                            
     D  SndTskPty                    10i 0                                      Send Task PTY       
     D  CijSeqNbrLong                20a                                                            
     D  rsvd3                        60a                                                            
     D  RdbDirEDetail               512a                                                            
     D  rsvd4                       348a                                                            
     **                                                                                             
     D JrnInfRtv       Ds                  Qualified                                                
     D  NbrVarRcd                    10i 0 Inz( 1 )                                                 
     D  VarRcdLen                    10i 0 Inz( 60 )                                                
     D  Key                          10i 0 Inz( 3 )                                                 
     D  DataLen                      10i 0 Inz( %Size( JrnInfRtv.Data ))                            
     D  Data                                                                                        
     D   RdbDirEinf                  18a   Overlay( Data )         Inz( '*ALL' )                    
     D   RmtJrnName                  20a   Overlay( Data: *Next )  Inz( '*ALL' )                    
     **                                                                                             
     D RtvJrnInf       Pr                  ExtProc( 'QjoRetrieveJournal-                            
     D                                     Information' )                                           
     D  RcvVar                    65535a   Options( *VarSize )                                      
     D  RcvVarLen                    10i 0 Const                                                    
     D  JrnName                      20a   Const                                                    
     D  FmtName                       8a   Const                                                    
     D  InfToRtv                  65535a   Const Options( *VarSize )                                
     D  Error                     32767a         Options( *VarSize: *Omit )                         
     **                                                                                             
     D  JrnNameLib     s             20a                                                            
     **                                                                                             
      /Free                                                                                         
                                                                                                    
             *inLR = *on;                                                                           
                                                                                                    
             ApiRcvSiz = 65535;                                                                     
             pJrnInf   = %Alloc( ApiRcvSiz );                                                       
             RJRN0100.ByteAvail = *Zero;                                                            
                                                                                                    
             JrnNameLib = JRN + LIB;                                                                
                                                                                                    
             DoU  RJRN0100.ByteAvail <= ApiRcvSiz  or                                               
                  ERRC0100.ByteAvail  > *Zero;                                                      
                                                                                                    
               If  RJRN0100.ByteAvail > ApiRcvSiz;                                                  
                 ApiRcvSiz  = RJRN0100.ByteAvail;                                                   
                 pJrnInf    = %ReAlloc( pJrnInf: ApiRcvSiz );                                       
               EndIf;                                                                               
                                                                                                    
               RtvJrnInf( RJRN0100                                                                  
                        : ApiRcvSiz                                                                 
                        : JrnNameLib                                                                
                        : 'RJRN0100'                                                                
                        : JrnInfRtv                                                                 
                        : ERRC0100                                                                  
                         );                                                                         
              EndDo;                                                                                
                                                                                                    
              If  ERRC0100.ByteAvail = *Zero;                                                       
                                                                                                    
                pJrnKey = pJrnInf                                                                   
                        + RJRN0100.OfsKeyInf + %Size( RJRN0100.NbrKey );                            
                pKeyHdr3 = pJrnKey  + JrnKey.OfsKeyInf;                                             
                pKeyEnt3 = pKeyHdr3 + %Size( JrnKeyHdr3 );                                          
                                                                                                    
                For  i = 1  to JrnKey.Entries;                                                      
                                                                                                    
                    dsply JrnKeyEnt3.RmtJrnName ;                                                   
                    dsply JrnKeyEnt3.RmtJrnRcvLib ;                                                 
                    dsply ('Type: ' + JrnKeyEnt3.RmtJrnType) ;                                      
                    dsply ('Status: ' + JrnKeyEnt3.RmtJrnStatus) ;                                  
                    dsply JrnKeyEnt3.RdbDirE ;                                                      
                                                                                                    
                  If  i < JrnKey.Entries;                                                           
                    pKeyEnt3 = pKeyEnt3 + JrnKey.EntriyLen;                                         
                  EndIf;                                                                            
                EndFor;                                                                             
                                                                                                    
              EndIf;                                                                                
                                                                                                    
              Dealloc pJrnInf ;                                                                     
                                                                                                    
              return;                                                                               
                                                                                                    
      /End-Free

実行結果

実行してみると、↓のような結果になります。
消してあるのは RDB 名です。

↑の Status の 0 というのは *INACTIVE という状態を示しています。

Remote journal state. An indication as to whether the remote journal is actively receiving journal entries from the source system journal.
0 *INACTIVE. The remote journal is not ready to receive any journal entries from its source journal.
1 *ACTIVE. The remote journal is ready to receive any journal entries from its source journal.
2 *FAILED. The remote journal is not ready to receive any journal entries from its source journal due to a remote journal function failure, for example, a communications failure. You will need to inactivate the remote journal by using the Change Remote Journal (CHGRMTJRN) command or by calling the Change Journal State (QjoChangeJournalState) API.
3 *CTLINACT. The remote journal is in the process of a controlled inactivate. Therefore, the remote journal will be receiving those journal entries that were already queued for replication when the Change Remote Journal (CHGRMTJRN) command or the Change Journal State (QjoChangeJournalState) API requested to inactivate the remote journal. However, no entries deposited after that request will be replicated to the remote journal.

遠隔ジャーナルを *ACTIVE に変えてみましょう。
CHGRMTJRN コマンドを使用します。

「ジャーナル状態」を *ACTIVE にして実行すると、ターゲット側のジャーナルが開始されます。

再度サンプルプログラムを実行すると、Status が 1 に変わっているのが確認できました。

*INACTIVE にするにはやはり CHGRMTJRN コマンドを使用します。

↑の結果として、遠隔側で *INACTIVE になります。

遠隔ジャーナルを除去するには RMVRMTJRN コマンドを使用します。

↑のコマンドを実行しても、ターゲット側のジャーナルは削除されません。再度 ADDRMTJRN をして CHGRMTJRN で *ACTIVE にすればそのまま使用できます。

[Top Pageに戻る]

Ads by TOK2