目次 前 次 PDF


バッチ・ランタイムの使用

バッチ・ランタイムの使用方法
この章には次のトピックが含まれます:
構成ファイル
構成ファイルはバッチ・ランタイムのCONFディレクトリ内に実装されます。
BatchRT.conf
このファイルには変数の定義が含まれます。
このような変数はバッチ・ランタイムを使用する前に設定する必要があります。
Messages.conf
このファイルにはRTBatchによって使用されるメッセージが含まれます。
メッセージはローカル言語に翻訳できます。
FunctionReturnCode.conf
このファイルには、メッセージに関連付けられた内部コードが含まれます。
ReturnCode.conf
このファイルには、メッセージに関連付けられKSHスクリプトに返されるリターン・コードが含まれます。
Writer.conf
このファイルには、ライターの使用法とサンプルが収められています。
ユーザーはこのファイルに自分のライターを追加できます。
環境変数を設定する
ORACLE_SIDCOBDIRLIBPATHCOBPATHなど、一部の変数は、様々なコンポーネントで共有されている変数なので、現在のドキュメントでは説明しません。詳細は、『Rehosting Workbenchインストレーション・ガイド』を参照してください。
EJRの環境変数
表3-1には、KSHスクリプトで使用され、ソフトウェアを使用する前に定義しておく必要がある環境変数が一覧表示されています。
 
注意:
DATAおよびTMPの場合、フルパスに[a-zA-Z0-9_/.]のみを含めることができます。
表3-2には、バッチ・ランタイムで使用され、ソフトウェアを使用する前に定義しておく必要がある環境変数が一覧表示されています。
 
(BatchRT.conf構成ファイルを参照)
m_DBTableLoadおよびm_DBTableUnloadの動作モードを示します。
これがyesに設定されている場合は、m_DBTableLoadおよびm_DBTableUnloadはCOBOLプログラムを呼び出します。このモードでは、ロード/アンロードに関連するデータ・ファイルは、ユーティリティDSNUTILB (ロード/アンロード)およびユーティリティDSNTIAUL (アンロード)のz/OSと同じ形式です。COBOLプログラム名は、schema-table-L ( DSNUTILBロード)、schema-table-U (DSNUTILBアンロード)またはschema-table-u (DSNTIAULアンロード)のいずれかになります。
これがyes以外の値に設定されている場合は、m_DBTableLoadおよびm_DBTableUnloadMT_CTL_FILESが必要です。
MT_DSNUTILB_LOADUNLOADyesに設定されている場合に、DBのデフォルトのスキーマを示します。デフォルト値はDEFSCHEMAです。この変数は、COBOLプログラムschema-table-Lおよびschema-table-Uのスキーマを指定するために使用されます。
(BatchRT.conf構成ファイルを参照)
デフォルトのディレクトリはGENERATION_FILEです。データベースでGDGファイルを管理するには、値をGENERATION_FILE_DBに設定し、MT_GDG_DB_ACCESSを適切に構成する必要があります。値がNULLとして指定されているか、不正なディレクトリ名が指定されている場合、この環境変数を使用するとエラーが発生します。
使用されるkshのパス(pdkshまたはksh88のみ)。
注意:
他のマシンからpdkshをコピーしないでください。公式のWebサイトからソース・コードをダウンロードして、そこからpdksh実行可能ファイルをビルドするか、対応するOSリリースのイメージに含まれている正式なインストーラでpdkshをインストールしてください。
最新のLinux/UNIXプラットフォームはデフォルトのCPU周波数として100を使用するため、ソース・コードからpdkshをビルドする場合は、CPU周波数(ksh_time.hCLK_TCK)を60HZから100HZの範囲で定義することをお薦めします。
pdkshの詳細は、http://www.cs.mun.ca/~michael/pdksh/を参照してください。
(BatchRT.conf構成ファイルを参照)
(BatchRT.conf構成ファイルを参照)
(BatchRT.conf構成ファイルを参照)。
(BatchRT.conf構成ファイルを参照)
MT_JESDECRYPTjesdecryptオブジェクト・ファイルに設定する必要があります。
(BatchRT.conf構成ファイルを参照)
XAのリソース・マネージャの名前。
(BatchRT.conf構成ファイルを参照)
ARTDPLサーバーのTUXEDO SRVGRP値。
(BatchRT.conf構成ファイルを参照)
注意:
次の環境変数の場合、フルパスに[a-zA-Z0-9_/.]のみを含めることができます。
表3-3には、バッチ・ランタイムで使用される、オプションの環境変数が一覧表示されています。
 
注意:
ファイル・カタログへのアクセスでは、MT_DB_LOGINよりも前にきます。ファイル・カタログDBがデータDBと同じである場合、構成が必要なのはMT_DB_LOGINのみです。それ以外の場合、両方とも構成する必要があります。
ジョブ実行の最後に、空のSYSOUTファイルをクリーンアップするかどうかを制御します。
MT_CLEANUP_EMPTY_SYSOUT=Y: 空のSYSOUTファイルをクリーンアップします。
MT_CLEANUP_EMPTY_SYSOUT=N: 空のSYSOUTファイルをクリーンアップしません。
ejr/CONFの下のデフォルト構成ファイルBatchRT.confのかわりに指定した構成ファイルを使用するための変数。
この変数が設定されていない場合、ejr/CONFの下の構成ファイルBatchRT.confが使用されます。
すべてのジョブのステップのCPU使用時間率のモニターを有効化する場合に使用される変数。MT_CPU_MON_STEP=yesを設定して、すべてのジョブのステップのCPU使用時間率のモニターを有効化します。MT_CPU_MON_STEPが構成されていない、またはその値がyesと等しくない場合は、この機能は無効になります。
MT_DB_LOGIN2がnull以外の値の場合、BatchRTはrunb2 (OracleおよびDB2の並列アクセスをサポートする)を使用します。
ファイルのフルパスを指定します。このファイルは、DB SYSTEMからDB接続資格証明文字列へのマッピングを格納するために使用されます。ファイルの書式は次のとおりです。
<DB TYPE>ORAの場合、<connection string>の書式は<user>/<pwd>@<instance id>です。たとえば、ORA01:ORA:tigger/scot@orains01のようになります。
<DB TYPE>DB2の場合、<connection string>の書式は<instance id> user <user> using <pwd>です。たとえば、DB202:DB2:db2ins02 user tom using catのようになります。
このファイルがアクセスされるのは、DB SYSTEMが次のEJR APIで指定されている場合です。m_ProgramExecm_DBTableLoadm_DBTableUnloadm_ExecSQLm_DSNUTILBおよびm_UtilityExec
注意:
DB SYSTEMがネスト方式で指定されている場合、外側の設定のみが有効になります。たとえば、次の場合は"ORA01"のみが有効になります("ORA02"は無視されます)。
これがYに設定されている場合、バッチ・ランタイムは、Oracle Database表からデータをアンロードするためにDSNTIAULユーティリティを提供します。このユーティリティには、DB2を使用したメインフレームのDSNTIAULユーティリティと同じ機能があります。これが"N"に構成されているか、何も構成されていない場合、バッチ・ランタイムはSQL文を実行し、特定のファイルにプレーン・テキストで出力を書き込みます。デフォルト値は、"Y"です。
これがYに設定されている場合、BatchRTはEJRログ・ファイルを生成し、各フェーズのログをそこに書き込みます。"N"に設定されている場合、BatchRTはEJRログ・ファイルを生成しません。デフォルト値は、"Y"です。
実行可能プログラムのリスト。プログラムは、runbではなく、runbexciによって起動されます。このリスト内の各プログラムの場合、-nm_ProgramExecで指定されているかどうかにかかわらず、プログラムはrunbexciでのみ起動されます。
注意:
MT_GENERATIONGENERATION_FILE_DBに設定されている場合は必須です。
Yに設定されている場合、GDGの変更は1回のデータベース・アクセスでコミットされます。
Nに設定されている場合、GDGの変更は1回以上のデータベース・アクセスでコミットされます。デフォルト値はNです。
MT_GDG_USEDCB=Y: GDG用の.dcbファイルを作成します(デフォルト動作)。このモードでは、m_FileAssign文のGDGメンバーのファイル・タイプとしてLSEQまたはSEQを指定できます。
MT_GDG_USEDCB=N: GDG用の.dcbファイルを作成しません。このモードでは、GDGメンバーのファイル・タイプはLSEQのみで、m_FileAssign文で指定したファイル・タイプは無視されます。
ORACLEの場合はDB_ORACLE
UDBの場合はDB_DB2LUW
MT_META_DBにNULL以外の値が入っている場合、BatchRTMT_META_DBで定義されたデータベース・タイプをメタデータに使用します。これ以外の場合はMT_DBが使用されます。
Workbench refineの完全インストール・パス。JCLジョブをKSHジョブに変換するために起動されます。例:
環境変数REFINEDISTRIBの値。WorkbenchがJCLジョブを変換するときに使用されます。例:
MT_REFINEDISTRIB = Linux64: REFINEDISTRIBをLinux64に設定します
MT_REFINEDISTRIB = Linux32: REFINEDISTRIBをLinux32に設定します
BatchRT.confでは、この項目は、m_ProgramExecによって実行されるCOBOLプログラムのSYSINおよびSYSOUTをrunbでリダイレクトするために使用されます。
SYSINが設定されている場合は、ユーティリティのstdinがファイル${DD_SYSIN}にリダイレクトされます。DD_SYSINが存在しない場合は、リダイレクトしないでください。例: MT_SYS_IO_REDIRECT=SYSIN
SYSOUTが設定されている場合は、ユーティリティのstdoutおよびstderrがファイル${DD_SYSOUT}にリダイレクトされます。DD_SYSOUTが存在しない場合は、リダイレクトしないでください。
例: MT_SYS_IO_REDIRECT=SYSOUT
SYSINSYSOUTは同時に設定できます(その場合は、SYSIN,SYSOUTのようにカンマで区切ってください)
例: MT_SYS_IO_REDIRECT=SYSIN,SYSOUT
デフォルト: MT_SYS_IO_REDIRECT=SYSIN,SYSOUT
EJRモードでこれがYに設定されている場合、BatchRTはSYSLOGファイルを生成します。"N"に設定されている場合、BatchRTはSYSLOGログ・ファイルを生成しません。デフォルト値は、"Y"です。
これがYに設定されている場合、SYSLOGファイルのステップ開始時刻とステップ終了時刻には時、分、秒またはミリ秒を使用します。"N"に設定されている場合、時、分または秒を使用します(ミリ秒は使用できません)。デフォルト値は「N」です。
MT_USERENTRYEXIT=Y: ユーザー・エントリ/終了関数を有効にします。
MT_USERENTRYEXIT=N: ユーザー・エントリ/終了関数を無効にします。
デフォルト値はYです。詳細は、「ユーザー定義のエントリ/終了」を参照してください。
実行可能プログラムのリスト。これらのプログラムが存在しない場合に、そのことによってジョブが失敗しないようにします。m_ProgramExecが存在しないプログラムを呼び出しても、それらのプログラムがこのリストに指定されている場合、ジョブは続行します。例:
MT_WB_HOSTNAME=host1: MT_WB_HOSTNAMEの値をhost1に設定します
MT_WB_HOSTNAME=user1@host1: MT_WB_HOSTNAMEの値をuser1@host1に設定します
注意:
Workbenchがリモート・マシンにデプロイされ、ARTJESCONVサーバーが別のマシンにデプロイされている場合は、この設定が必要です。
Yに設定されている場合、レコード・シーケンシャルASCIIファイルはEBCDIC順にソートされます。
Nに設定されている場合、レコード・シーケンシャルASCIIファイルはASCII順にソートされます。
Yに設定されている場合、DISPLAY符号付き数値項目の符号はEBCDIC規則に従って解釈されます。
Nに設定されている場合、DISPLAY符号付き数値項目の符号はASCII規則に従って解釈されます。
MT_PROG_RC_ABORT以上のリターン・コードは中断とみなされ、MT_PROG_RC_ABORT未満のコードはコミットとみなされます。
ネイティブJCLの環境変数
表3-4には、ネイティブJCLバッチ・ランタイムで使用され、ソフトウェアを使用する前に定義しておく必要がある環境変数が一覧表示されています。
 
PROCおよびINCLUDEファイルの検索に使用されるディレクトリ。
AccLockおよびAccWaitファイルを格納するファイル同時実行性アクセスのディレクトリ。これらのファイルは、バッチ・ランタイムを実行する前に空の状態で作成する必要があります。
COBOL_MF: Micro Focus COBOLを使用することを意味します
COBOL_IT: COBO-IT COBOLを使用することを意味します
DB_ORACLE: Oracleを使用することを意味します
DB_DB2LUW: DB2を使用することを意味します
表3-5には、ネイティブJCLバッチ・ランタイムで使用される、オプションの環境変数が一覧表示されています。
 
ユーティリティDSNUTILBのロード・プロセスで表にレコードを挿入するためのスレッドの数を設定します。デフォルト値は5です。
ログ出力のレベルを制御します。次のいずれかの値を指定できます。ERRORWARNINFODEBUGおよびDUMP。デフォルト値はINFOです。
MT_VOLUME_DEFAULTが空でない値に設定された場合、カタログ機能が有効になります。これは、新しいデータセットの作成時にボリュームが指定されない場合、ボリューム値として使用されます。MT_VOLUME_DEFAULTが設定されない場合、カタログ機能は無効になります。
MT_DB_LOGIN2がnull以外の値の場合、BatchRTはOracleおよびDB2の並列アクセスを使用します。
ファイル名をフルパスで指定します。このファイルは、DB SYSTEMからDB接続資格証明文字列へのマッピングを格納するために使用されます。ファイルの書式は次のとおりです。
<DB TYPE>ORAの場合、<connection string>の書式は<user>/<pwd>@<instance id>です。たとえば、ORA01:ORA:tigger/scot@orains01のようになります。
<DB TYPE>DB2の場合、<connection string>の書式は<instance id> user <user> using <pwd>です。たとえば、DB202:DB2:db2ins02 user tom using catのようになります。
MT_DB2_SYSTEM_MAPPINGが定義されている場合、DB SYSTEMからDB接続資格証明文字列へのマッピング機能が有効になります。それ以外の場合、この機能は無効になります。
これがYに設定されているか、何も構成されていない場合、バッチ・ランタイムは、Oracle Database表からデータをアンロードするためにDSNTIAULユーティリティを提供します。このユーティリティには、DB2を使用したメインフレームのDSNTIAULユーティリティと同じ機能があります。これが"N"に構成されている場合、バッチ・ランタイムはSQL文を実行し、特定のファイルにプレーン・テキストで出力を書き込みます。デフォルト値は、"Y"です。
Micro Focusソート・ユーティリティの場合、SORT_MicroFocus
SyncSortソート・ユーティリティの場合、SORT_SyncSort
citsortユーティリティの場合、SORT_CIT
指定されない場合、MT_COBOLによって異なります。
MT_COBOL=MFが設定された場合は、SORT_MicroFocus
MT_COBOL=ITが設定された場合は、SORT_CIT
符号付き数値DISPLAY項目の解釈方法を指定します。
Y: デフォルト。EBCDIC規則に従って解釈されます。
N: ASCII規則に従って解釈されます。
ARTCOBRUNが実行するユーティリティについてSYSINおよびSYSOUTがリダイレクトされるかどうかを指定します。
SYSINが設定された場合、ユーティリティのstdinはファイル${DD_SYSIN}にリダイレクトされます。
SYSOUTが設定された場合、ユーティリティのstdoutおよびstderrはファイル${DD_SYSOUT}にリダイレクトされます。
SYSINSYSOUTの両方を同時に設定できます(その場合は、SYSIN,SYSOUTのようにカンマで区切ってください)。
デフォルト値はSYSOUTです。
MT_PROG_RC_ABORT以上のリターン・コードは中断とみなされ、MT_PROG_RC_ABORT未満のコードはコミットとみなされます。
MPモードでのバッチ・ランタイムの構成
ユーザーがバッチ・ランタイム(EJR)を使用して異なるマシンからジョブを実行する(リソース(通常はファイル)を共有する場合がある)か、MPモードのTuxJESドメインを構成し、TuxJESが提供するユーティリティを使用して任意のノードからジョブを送信する場合、EJRを特別に構成して、MPモードで問題なく機能するようにする必要があります。
後者の場合、ノードAから送信されたジョブは、ノードBで実行される可能性があり、実行順序はまったくランダムです。同様に、異なるノードから送信されたこれらのジョブは、リソースを共有する可能性があります。
この項では、MPモードをサポートするためのバッチ・ランタイム(EJR)構成の詳細を具体的に説明します。
1.
2.
MT_ACC_FILEPATHは共有ストレージ(NFS)に置かれ、そのストレージはドメイン上のすべてのマシンで同じマウント・ポイントを持つ必要があります。これは、ファイル・ロッキングの制御ファイルがこのディレクトリに置かれるためです。さらに、ユーザーは、このディレクトリの下のAccLockとAccWaitファイルを、ジョブを実行しているプロセスの実効ユーザーが読み書きできるようにしておく必要があります。
3.
4.
スクリプトの作成
スクリプトの一般的な構造
Oracle Tuxedo Application Runtime for Batchは、ジョブの異なる実行フェーズが明確に識別されるスクリプト・モデルを提案することによって、Kornシェル・スクリプトを正規化します。
Oracle Tuxedo Application Runtime for Batchスクリプトは、固有の書式を尊重することで、KSH (JOB)の異なるフェーズの定義とチェイニングを可能にします。
バッチ・ランタイム内のフェーズは、ソース・システム上のアクティビティまたは手順に対応します。
フェーズはラベルによって識別され、次のフェーズによって区切られます。
各フェーズの終わりでJUMP_LABEL変数が更新され、次に実行されるフェーズのラベルを提供します。
次の例では、最後の機能フェーズが、JUMP_LABELJOBENDに設定します。このラベルにより、ジョブの正常終了(フェーズ・ループを終了)が可能になります。
表3-6に示されているように、スクリプトの必須の部分(最初と最後の部分)は太字で表示され、スクリプトの機能部分(中間の部分)は通常の書式で表示されます。スクリプトのオプションの部分には、次に示すように、ラベル、分岐および手順の終了が含まれる必要があります。変更されるスクリプトの項目は、斜体で表示されます。
 
m_JobBegin -j JOBNAME -s START -v 2.00
(PENULTIMATESTEP)
END_JOBを参照する必要のあるラベルのためです。「_」が必須ですが、これはこの文字がz/OS上で禁じられているためです。
スクリプト例
リスト3-1に、Kornシェル・スクリプトのサンプルを示します。
リスト3-1 Kornシェル・スクリプト例
#!/bin/ksh
#@(#)--------------------------------------------------------------
#@(#)-
m_JobBegin -j METAW01D -s START -v 1.00 -c A
while true ;
do
m_PhaseBegin
case ${CURRENT_LABEL} in
(START)
# -----------------------------------------------------------------
# 1) 1st Step: DELVCUST
# Delete the existing file.
# 2) 2nd Step: DEFVCUST
# Allocates the Simple Sample Application VSAM customers file
# -----------------------------------------------------------------
#
# -Step 1: Delete...
JUMP_LABEL=DELVCUST
;;
(DELVCUST)
m_FileAssign -d OLD FDEL ${DATA}/METAW00.VSAM.CUSTOMER
m_FileDelete ${DD_FDEL}
m_RcSet 0
#
# -Step 2: Define...
JUMP_LABEL=DEFVCUST
;;
(DEFVCUST)
# IDCAMS DEFINE CLUSTER IDX
m_FileBuild -t IDX -r 266 -k 1+6 ${DATA}/METAW00.VSAM.CUSTOMER
JUMP_LABEL=END_JOB
;;
(ABORT)
break
;;
(END_JOB)
break
;;
(*)
m_RcSet ${MT_RC_ABORT} "Unknown label : ${JUMP_LABEL}"
break
;;
esac
m_PhaseEnd
done
m_JobEnd
#@(#)--------------------------------------------------------------
 
記号の定義と使用
記号は内部スクリプト変数で、スクリプト文を簡単に変更できるようにします。リスト 3‑2で示すように、m_SymbolSet関数によって値が記号に割り当てられます。記号を使用するには、次の構文を使用します: $[symbol]
注意:
リスト3-2 記号の使用例
(STEP00)
m_SymbolSet VAR=40
JUMP_LABEL=STEP01
;;
(STEP01)
m_FileAssign -d SHR FILE01 ${DATA}/PJ01DDD.BT.QSAM.KBSTO0$[VAR]
m_ProgramExec BAI001
 
プログラムを実行する手順の作成
手順(フェーズとも呼ばれる)は、普通は、機能(またはテクニカル)アクティビティの実行を可能にするバッチ・ランタイム関数に対する呼出しの、一貫性の取れたセットです。
最もよく使用される手順は、アプリケーションまたはユーティリティ・プログラムを実行するものです。これらの種類の手順は、通常、1つ以上のファイル割当て操作と、それに続く、目的のプログラムの実行で構成されます。ファイル割当て操作はすべて、リスト3‑3に示すプログラム実行操作より先に実行される必要があります。
リスト3-3 アプリケーション・プログラム実行手順の例
(STEPPR15)
m_FileAssign -d SHR INFIL ${DATA}/PJ01DDD.BT.QSAM.KBPRO099
m_FileAssign -d MOD OUTFIL ${DATA}/PJ01DDD.BT.QSAM.KBPRO001
m_OutputAssign -c “*” SYSOUT
m_FileAssign -i LOGIN
IN-STREAM DATA
_end
m_FileAssign -d MOD LOGOUT ${DATA}/PJ01DDD.BT.QSAM.KBPRO091
m_ProgramExec BPRAB001 "20071120"
JUMP_LABEL=END_JOB
;;
 
アプリケーション・プログラムのAbend実行
ABENDルーチン(ILBOABN0CEE3ABD、およびART3ABD)を実行中のプログラムから呼び出して、このプログラムを強制的に中止し、abendコードをKSHスクリプトに返すことができます。たとえば、ILBOABN0は、ソースおよびバイナリのgntファイルの両方として提供されます。これはユーザー定義の任意のCOBOLプログラムから直接呼び出せます。
リスト3-4 アプリケーション・プログラムのAbend実行の例(KSH)
(STEPPR15)
 
m_ProgramExec USER
JUMP_LABEL=END_JOB
;;
 
リスト3-5 USER.cblの例
PROCEDURE DIVISION.
 
PROGRAM-BEGIN.
DISPLAY "USER: HELLO USER".
MOVE 2 TO RT-PARAM.
CALL "ILBOABN0" USING RT-PARAM.
DISPLAY "USER: CAN'T REACH HERE WHEN ILBOABN0 IS CALLED".
PROGRAM-DONE.
...
 
プロシージャの作成
Oracle Tuxedo Application Runtime for Batchには、プロシージャを定義して使用するための一連の関数が用意されています。これらのプロシージャは、一般に、z/OS JCLのプロシージャと同じ原則に従います。
プロシージャの利点は、次のとおりです。
プロシージャには、2つのタイプがあります。
ストリーム内プロシージャの作成
z/OS JCL規則とは異なり、ストリーム内プロシージャは主要JOBの末尾の後に記述する必要があります。つまり、ジョブに属するすべてのストリーム内プロシージャは、関数m_JobEndの呼出しの後に出現する必要があります。
Kornシェル・スクリプトのストリーム内プロシージャは、常にまずm_ProcBegin関数を呼び出し、次にプロシージャを構成するすべてのタスクが続き、m_ProcEnd関数を呼び出して終了します。リスト3-6はサンプルです。
リスト3-6 ストリーム内プロシージャの例
m_ProcBegin PROCA
JUMP_LABEL=STEPA
;;
(STEPA)
m_FileAssign -c “*” SYSPRINT
m_FileAssign -d SHR SYSUT1 ${DATA}/PJ01DDD.BT.DATA.PDSA/BIEAM00$[SEQ]
m_FileAssign -d MOD SYSUT2 ${DATA}/PJ01DDD.BT.QSAM.KBIEO005
m_FileLoad ${DD_SYSUT1} ${DD_SYSUT2}
JUMP_LABEL=ENDPROC
;;
(ENDPROC)
m_ProcEnd
 
外部プロシージャの作成
外部プロシージャではm_ProcBegin関数とm_ProcEnd関数を使用する必要がありません。単にリスト3-7に示すプロシージャの一部であるタスクをコーディングします。
プロシージャのコードと呼出しジョブの統合を簡素化するには、常に、プロシージャの先頭を次のようにします。
JUMP_LABEL=FIRSTSTEP
;;
(FIRSTSTEP)
末尾は次のようにします。
JUMP_LABEL=ENDPROC
;;
(ENDPROC)
リスト3-7 外部プロシージャの例
JUMP_LABEL=PR2STEP1
;;
(PR2STEP1)
m_FileAssign -d SHR INFIL ${DATA}/PJ01DDD.BT.QSAM.KBPRI001
m_FileAssign -d MOD OUTFIL ${DATA}/PJ01DDD.BT.QSAM.KBPRO001
m_OutputAssign -c “*” SYSOUT
m_FileAssign -d SHR LOGIN ${DATA}/PJ01DDD.BT.SYSIN.SRC/BPRAS002
m_FileAssign -d MOD LOGOUT ${DATA}/PJ01DDD.BT.QSAM.KBPRO091
m_ProgramExec BPRAB002
JUMP_LABEL=ENDPROC
;;
(ENDPROC)
 
プロシージャの使用
Kornシェル・スクリプト内部のプロシージャの使用は、m_ProcInclude関数の呼出しを介して行われます。
「スクリプト実行フェーズ」で説明したとおり、Kornシェル・スクリプトは、変換フェーズで、m_ProcInclude関数の呼出しのたびに、プロシージャのコードをインクルードして展開されます。この操作の結果として展開されたKornシェル・スクリプトは、操作後も、「スクリプトの一般的な構造」で定義された、スクリプトの一般的な構造のルールに従っている必要があります。
リスト3-8に示すように、前述の原則に従っていれば、ストリーム内プロシージャまたは外部プロシージャを、呼出しジョブのいかなる場所でも使用できます。
リスト3-8 m_ProcInclude関数の呼出し例
(STEPPR14)
m_ProcInclude BPRAP009
JUMP_LABEL=STEPPR15
 
実行時のプロシージャ変更
プロシージャ内で定義されているタスクの実行は、2つの異なる手段で変更できます。
リスト3-9およびリスト3-10はサンプルです。
リスト3-9 プロシージャの定義例
m_ProcBegin PROCE
JUMP_LABEL=STEPE
;;
(STEPE)
m_FileAssign -d SHR SYSUT1 ${DATA}/DATA.IN.PDS/DTS$[SEQ]
m_FileAssign -d MOD SYSUT2 ${DATA}/DATA.OUT.PDS/DTS$[SEQ]
m_FileLoad ${DD_SYSUT1} ${DD_SYSUT2}
JUMP_LABEL=ENDPROC
;;
(ENDPROC)
m_ProcEnd
 
リスト3-10 プロシージャの呼出し例
(COPIERE)
m_ProcInclude PROCE SEQ="1"
JUMP_LABEL=COPIERF
;;
 
ファイル割当てでのオーバーライドの使用
「ベスト・プラクティス」で規定されているとおり、プロシージャをコーディングするこの方法は、主にz/OS JCL変換の結果として得られるKornシェル・スクリプトをサポートするために用意されており、ターゲット・プラットフォーム用に新しく作成されるKornシェル・スクリプトではお薦めできません。
ファイル割当てのオーバーライドは、プロシージャに存在する割当ての置換を指定するm_FileOverride関数を使用して行われます。m_FileOverride関数の呼出しは、呼出し側スクリプト内のプロシージャ呼出しに続いて行われる必要があります。
リスト3-11は、m_FileOverride関数を使用して論理ファイルSYSUT1の割当てを置換する方法を示しています。
リスト3-11 m_FileOverride関数の例
m_ProcBegin PROCE
JUMP_LABEL=STEPE
;;
(STEPE)
m_FileAssign -d SHR SYSUT1 ${DATA}/DATA.IN.PDS/DTS$[SEQ]
m_FileAssign -d MOD SYSUT2 ${DATA}/DATA.OUT.PDS/DTS$[SEQ]
m_FileLoad ${DD_SYSUT1} ${DD_SYSUT2}
JUMP_LABEL=ENDPROC
;;
(ENDPROC)
m_ProcEnd
 
リスト3-12 m_FileOverrideプロシージャの呼出し:
(COPIERE)
m_ProcInclude PROCE SEQ="1"
m_FileOverride -i -s STEPE SYSUT1
Overriding test data
_end
JUMP_LABEL=COPIERF
;;
 
スクリプトの動作の制御
手順実行の条件付け
m_CondIf、m_CondElseおよびm_CondEndifの使用
スクリプト内で1つまたは複数の手順の実行を条件付けるために、m_CondIfm_CondElseおよびm_CondEndif関数を使用できます。動作は、z/OS JCL文のコンストラクト、IFTHENELSEおよびENDIFと類似しています。
リスト3-13に示すように、m_CondIf関数は、常に関係式をパラメータとして持つ必要があります。この関数は、15回までネストできます。
リスト3-13 m_CondIf、m_CondElseおよびm_CondEndifの例
(STEPIF01)
m_FileAssign -d SHR INFIL ${DATA}/PJ01DDD.BT.QSAM.KBIF000
m_FileAssign -d MOD OUTFIL ${DATA}/PJ01DDD.BT.QSAM.KBIF001
m_ProgramExec BAX001
m_CondIf "STEPIF01.RC,LT,5"
JUMP_LABEL=STEPIF02
;;
(STEPIF02)
m_FileAssign -d SHR INFIL ${DATA}/PJ01DDD.BT.QSAM.KBIF001
m_FileAssign -d MOD OUTFIL ${DATA}/PJ01DDD.BT.QSAM.KBIF002
m_ProgramExec BAX002
m_CondElse
JUMP_LABEL=STEPIF03
;;
(STEPIF03)
m_FileAssign -d SHR INFIL ${DATA}/PJ01DDD.BT.QSAM.KBIF000
m_FileAssign -d MOD OUTFIL ${DATA}/PJ01DDD.BT.QSAM.KBIF003
m_ProgramExec BAX003
m_CondEndif
 
m_CondExecの使用
m_CondExec関数は、手順の実行を条件付けるために使用されます。m_CondExecは、少なくとも1つの条件をパラメータとして持つ必要があり、同時に複数の条件を持つこともできます。複数の条件の場合、手順は、すべての条件が満たされる場合のみ実行されます。
条件は、次の3つの形式が可能です。
m_CondExec 4,LT,STEPEC01
m_CondExec EVEN
m_CondExec ONLY
リスト3-14に示すように、m_CondExec関数は、関係する手順の中で最初に呼び出される関数である必要があります。
リスト3-14 複数の条件を持つm_CondExecの例
(STEPEC01)
m_FileAssign -d SHR INFIL ${DATA}/PJ01DDD.BT.QSAM.KBIF000
m_FileAssign -d MOD OUTFIL ${DATA}/PJ01DDD.BT.QSAM.KBIF001
m_ProgramExec BACC01
JUMP_LABEL=STEPEC02
;;
(STEPEC02)
m_FileAssign -d SHR INFIL ${DATA}/PJ01DDD.BT.QSAM.KBIF001
m_FileAssign -d MOD OUTFIL ${DATA}/PJ01DDD.BT.QSAM.KBIF002
m_ProgramExec BACC02
JUMP_LABEL=STEPEC03
;;
(STEPEC03)
m_CondExec 4,LT,STEPEC01 8,GT,STEPEC02 EVEN
m_FileAssign -d SHR INFIL ${DATA}/PJ01DDD.BT.QSAM.KBIF000
m_FileAssign -d MOD OUTFIL ${DATA}/PJ01DDD.BT.QSAM.KBIF003
 
実行フローの制御
スクリプトの実行フローは、次の方法で、決定および制御できます。
m_JobBegin関数で指定された開始ラベル: このラベルは、通常、スクリプトの最初のラベルですが、ユーザーが特定の手順からスクリプトの実行を開始する場合は、スクリプト内に存在するいかなるラベルにも変更できます。
各手順でJUMP_LABEL変数に割り当てられる値: この割当ては各手順に必須ですが、その値が必ず次の手順のラベルであるとはかぎりません。
m_CondExecm_CondIfm_CondElse およびm_CondEndif関数の使用方法。「手順実行の条件付け」を参照してください。
デフォルト・エラー・メッセージの変更
バッチ・ランタイム管理者がデフォルト・メッセージを変更する場合(たとえば言語を変更する場合)、環境変数MT_DISPLAY_MESSAGE_FILEでパスが指定された構成ファイルを介して行うことができます。
このファイルは、セパレータとしてセミコロンを使用するCSV (カンマ区切り値)ファイルです。このファイルの各レコードには、特定のメッセージが記載され、次の6つのフィールドで構成されます。
1.
2.
3.
4.
5.
6.
z/OSと異なる動作
z/OSでは、ジョブが実行される前に、JESがその構文をチェックします。エラーが検出されると、JESはこれをレポートし、ジョブは何も実行されません。たとえば、GDGのgeneration(0)にNEWを適用するJCL文がある場合、既存のファイルにNEWを適用することはできないため、JESはこのエラーをレポートし、ジョブを実行しません。
ただし、ART for Batchでは、JCLジョブはOracle Tuxedo ART Workbenchによってまずkshジョブに変換され、ART for Batchは変換されたkshジョブのkshスクリプト構文のみをチェックします。この文の実行時に文法エラーが検出されると、誤った文より後の文が実行されますが、それより前の文は影響を受けず実行されます。
ファイルの使用
ファイル定義の作成
ファイルはm_FileBuildまたはm_FileAssign関数を使用して作成されます。
次の4つのファイル組織がサポートされます。
作成されるファイルのファイル編成を指定する必要があります。索引編成ファイルの場合は、長さと主キーの仕様も記述する必要があります。
m_FileBuildの例
m_FileBuild -t LSEQ ${DATA}/PJ01DDD.BT.VSAM.ESDS.KBIDO004
m_FileBuild -t IDX -r 266 -k 1+6 ${DATA}/METAW00.VSAM.CUSTOMER
m_FileAssignの例
m_FileAssign -d NEW -t SEQ -r 80 ${DATA}/PJ01DDD.BT.VSAM.ESDS.KBIDO005
ファイルの割当てと使用
バッチ・ランタイムを使用する場合、バッチ・ランタイム関数(m_FileSortm_FileRenameなど)またはプログラム(COBOLプログラムなど)でファイルを使用できます。
どちらの場合も、ファイルを使用する前に、先に割り当てる必要があります。ファイルは、次のことを行うm_FileAssign関数を使用して割り当てられます。
m_FileAssign関数を介して定義される環境変数は、DD_IFNと命名されます。この命名規則は、Micro Focus COBOLが内部ファイル名を外部ファイル名にマップするために使用する変数であるという事実に基づいています。
割当てが済んだファイルは、${DD_IFN}変数を使用することにより、ファイルを処理するバッチ・ランタイム関数のいずれかに、引数として渡すことができます。
COBOLプログラムの場合、リンクはMicro Focus COBOLによって暗黙的に作成されます。COBOL-ITは、DD割当てに関してMicro Focus COBOLと互換性があります。
リスト3-15 ファイル割当ての例
(STEPCP01)
m_FileAssign -d SHR INFIL ${DATA}/PJ01DDD.BT.QSAM.KBIDI001
m_FileAssign -d SHR OUTFIL ${DATA}/PJ01DDD.BT.VSAM.KBIDU001
m_FileLoad ${DD_INFIL} ${DD_OUTFIL}
 
リスト3-16 COBOLプログラムによるファイル使用の例
(STEPCBL1)
m_FileAssign -d OLD INFIL ${DATA}/PJ01DDD.BT.QSAM.KBIFI091
m_FileAssign -d MOD OUTFIL ${DATA}/PJ01DDD.BT.QSAM.KBIFO091
m_ProgramExec BIFAB090
 
DD DISP=MODについて
ART/BatchRTを強化し、DISP=MODについてメインフレームとの一貫性を維持します。つまり、ART/BatchRTのターゲット運用システムでのDISP=MODの動作をメインフレームと同じにします。現在では、BatchRTは次の2種類のCOBOLコンパイル/ランタイム環境に依存しています。
注意:
Micro Focus COBOL
Micro Focus COBOLの場合は、DISP=MODの動作を正しくするために、新しいファイル・ハンドラ(ARTEXTFH.gnt)が1つBatchRTに追加されます。ユーザーは、そのCOBOLプログラムをこのファイル・ハンドラでコンパイルする必要があります。つまり、次のコンパイル・オプションを追加する必要があります。
CALLFH("ARTEXTFH")
このコンパイル・オプションを指定しない場合は、オープン・モードopen outputをCOBOLプログラムに書き込むと、既存のファイルの内容が消去されます。これは予期しない操作です。
COBOLプログラムをコンパイルする際には、このコンパイル・オプションを常に追加することをお薦めします。表3‑7に、DDNをサポートするAPIの動作を示します。
 
m_ProgramExec: COBOLプログラム
m_ProgramExec: 他のプログラム
INPUTは入力ファイルを意味し、入力ファイルに対する読取り操作のみが発生します。入力ファイルにデータが書き込まれることはないため、入力ファイルへのDISP=MODの指定は適切ではありませんが、許可されています。入力ファイルの場合、DISP=MODは常にDISP=OLDとして機能します。
OUTPUTは出力ファイルを意味し、出力ファイルに対する読取りおよび書込み操作が発生します。出力ファイルに書き込まれるデータはすべて元のファイルに追加されます。COBOLプログラムがオープン・モード(open outputまたはopen extend)かどうかは関係ありません。
COBOL-IT
COBOL-ITの場合、(Micro Focus COBOLのような) DISP=MODに対するファイル・ハンドラ・レベルのサポートはありません。そのため、COBOLプログラムのコンパイルには特別な要件はありません。表3‑8に、DDNをサポートするAPIの動作を示します。
 
m_ProgramExec: COBOLプログラム
m_ProgramExec: 他のプログラム
INPUTは入力ファイルを意味し、入力ファイルに対する読取り操作のみが発生します。DISP=MODを入力ファイルに指定することは適切ではなく、COBOL-ITでは許可されていません。ある入力ファイルがDISP=MODとして割り当てられている場合、その内容を読み取ることはできません。
OUTPUTは出力ファイルを意味し、出力ファイルに対する読取りおよび書込み操作が発生します。出力ファイルに書き込まれるデータはすべて元のファイルに追加されます。COBOLプログラムがオープン・モード(open outputまたはopen extend)かどうかは関係ありません。
同時ファイル・アクセス制御
バッチ・ランタイムには、2つのジョブで1つのファイルに同時に書込みが行われないようにするロック・メカニズムが備わっています。
同時ファイル・アクセス制御を有効にするには、次のようにします。
1.
環境変数MT_ACC_FILEPATHを使用して、同時アクセス制御メカニズムで必要なロック・ファイル用のディレクトリを指定します。
2.
ジョブを実行する実効ユーザーに、これら2つのファイルに対する読取り/書込み権限があることを確認します。
注意:
AccLockおよびAccWaitのファイル名では、大文字と小文字が区別されます。
ejr/CONF/BatchRT.confの次の2行は、コメント・アウトする必要があります。
${MT_ACC_FILEPATH}/AccLock
${MT_ACC_FILEPATH}/AccWait
世代別データ・グループ(GDG)の使用
Oracle Tuxedo Application Runtime for Batchでは、世代別データ・グループ(GDG)ファイルをファイルまたはデータベース(DB)のいずれかに基づいて管理できます。ファイルベースの管理方法では、バッチ・ランタイムによりGDGファイルが別々の*.gensファイルで管理され、1つの*.gensが1つのGDGファイルに対応します。DBベースの管理方法では、ART for BatchによりユーザーはGDG情報をOracleデータベースまたはDB2データベースで管理できます。
GDG管理機能
世代ファイルの概念をエミュレートし、UNIX標準ではないz/OSメインフレーム上に存在するために、バッチ・ランタイムには、この種のファイルを管理するための一連の関数が用意されています。これらの関数は、ファイルベースの管理とDBベースの管理の両方で使用できます。
注意:
GDGの定義または再定義
GDGは使用する前に定義する必要があります。
GDGファイルは、m_GenDefineを介して定義または再定義されます。GDGの定義または再定義の操作は即時にコミットされ、ロールバックできません。
リスト3-17に示すように、1行目ではGDGを定義し、その最大世代数を15に設定します。2行目では同じGDGの最大世代数を30に再定義します。3行目では-sオプションを指定せずにGDGを定義します(その最大世代数は9999に設定されます)。4行目ではGDGを暗黙的に定義し、その最大世代数を9999に設定します。5行目ではGDGユース・モデル・ファイル$DATA/FILEを定義します。このファイルは、GDGファイルまたは通常のファイルです。
リスト3-17 GDGファイルの定義および再定義の例
m_GenDefine -s 15 ${DATA}/PJ01DDD.BT.FILE1
m_GenDefine -s 30 -r ${DATA}/PJ01DDD.BT.FILE1
m_GenDefine ${DATA}/PJ01DDD.BT.FILE2
m_FileAssign -d NEW,CATLG -g +1 SYSUT2 ${DATA}/PJ01DDD.BT.FILE3
m_FileAssign -d NEW,CATLG -g +1 -S $DATA/FILE FILE1 $DATA/GDG
 
GDGへの世代ファイルの追加
新しい世代ファイル(GDS)をGDGに追加するには、-d NEW/MOD,…および-g +nというパラメータを指定してm_FileAssignを呼び出します。GDSファイル・タイプは、LSEQまたはSEQのみです。
GDGに世代ファイルを追加する場合、次の4つの点に注意してください。
新規作成されるGDSのファイル名は、m_FileAssignで指定される世代番号を使用して、<current GDS number> + <GenNum>の形式で生成されます。例については、リスト3-20を参照してください。
次の4つの例は、この重要な点を個々に表しています。
リスト3-18 複数の世代ファイルを不連続および不規則に追加する例
(STEP1)
m_FileAssign -d NEW,KEEP,KEEP -g +1 SYSUT1 "$DATA/GDG1"
m_FileAssign -d MOD,KEEP,KEEP -g +5 SYSUT2 "$DATA/GDG1"
(STEP2)
m_FileAssign -d NEW,KEEP,KEEP -g +9 SYSUT1 "$DATA/GDG1"
m_FileAssign -d NEW,KEEP,KEEP -g +2 SYSUT2 "$DATA/GDG1"
 
前述の例では、次のGDSファイルがGDGに追加されます。
$DATA/GDG1.Gen.0001
$DATA/GDG1.Gen.0002
$DATA/GDG1.Gen.0005
$DATA/GDG1.Gen.0009
リスト3-19 1つの世代番号を1つのジョブに複数回追加する例(間違った使用方法)
(STEP1)
m_FileAssign -d NEW,KEEP,KEEP -g +1 SYSUT1 "$DATA/GDG1"
m_FileAssign -d NEW,KEEP,KEEP -g +5 SYSUT2 "$DATA/GDG1"
(STEP2)
m_FileAssign -d NEW,KEEP,KEEP -g +4 SYSUT1 "$DATA/GDG1"
m_FileAssign -d NEW,KEEP,KEEP -g +5 SYSUT2 "$DATA/GDG1"
 
前述の例は、世代番号(+5)が2回追加されるという間違った使用方法を示しています。
リスト3-20 GDSファイル名をリストする例
m_FileAssign -d NEW,KEEP,KEEP -g +1 SYSUT1 "$DATA/GDG1"
m_FileAssign -d MOD,KEEP,KEEP -g +5 SYSUT2 "$DATA/GDG1"
 
前述の例では、$DATA/GDG1に1、2、4という番号の3つのGDSがそれぞれあるものとします。対応するGDSファイルが次のようにリストされます。
$DATA/GDG1.Gen.0001
$DATA/GDG1.Gen.0002
$DATA/GDG1.Gen.0004
前述のジョブの実行後、$DATA/GDG1には1、2、4、5、9という番号の5つのGDSがそれぞれ含まれます。対応するGDSファイルが次のようにリストされます。
$DATA/GDG1.Gen.0001
$DATA/GDG1.Gen.0002
$DATA/GDG1.Gen.0004
$DATA/GDG1.Gen.0005
$DATA/GDG1.Gen.0009
リスト3-21 最新のGDSを定義する例
(STEP1)
m_FileAssign -d NEW,KEEP,KEEP -g +1 SYSUT1 "$DATA/GDG1"
m_FileAssign -d MOD,KEEP,KEEP -g +5 SYSUT2 "$DATA/GDG1"
(STEP2)
m_FileAssign -d NEW,KEEP,KEEP -g +2 SYSUT3 "$DATA/GDG1"
 
前述の例で、RGNが+5に等しいGDSが最新のGDSになります。つまり、ジョブが正常終了すると、そのRGNが0になります。
GDG内の既存の世代ファイルの参照
GDGで既存の世代ファイル(GDS)を参照するには、-d OLD/SHR/MOD,…および-g 0-g allまたは-g -nというパラメータを指定してm_FileAssignを呼び出します。-g 0は最新世代を、-g allはすべての世代ファイルを、-g -nは最新世代(0世代)からn世代逆算した世代ファイルを参照します。
相対世代番号(RGN)を使用してGDSを参照する場合、相対世代番号は、世代番号が0である最新のGDSを基準とした相対位置であることに注意してください。
たとえば、GDG1に1、4、6、7、9、10という番号の6つのGDSがそれぞれ含まれている場合、GNとRGNのマッピングは次のとおりです。
 
次のジョブでは、RGN=-1を使用してGNが9に等しいGDSを参照し、RGN=-4を使用してGNが4に等しいGDSを参照します。
リスト3-22 既存の世代ファイルを参照する例
(STEP1)
m_FileAssign -d SHR,KEEP,KEEP -g -1 SYSUT1 "$DATA/GDG1"
m_FileAssign -d SHR,KEEP,KEEP -g -4 SYSUT2 "$DATA/GDG1"
 
m_FileAssignDISPOSITIONフィールドにDELETEが指定された場合、現在の手順が終了した後に対応するGDSが削除され、GNとRGNのマッピングが変更されます。変更後のマッピングは次の手順で表示されます。
たとえば、GDG1に1、4、6、7、9、10という番号の6つのGDSがそれぞれ含まれている場合、GNとRGNのマッピングは次のとおりです。
 
次のジョブでは、RGN=-1を使用してGNが9に等しいGDSを参照し、RGN=-4を使用してGNが4に等しいGDSを参照します。
次のようにジョブを実行できます。
リスト3-23 DELETEを指定して既存の世代ファイルを参照する例
(STEP1)
m_FileAssign -d OLD,DELETE,DELETE -g -1 SYSUT1 "$DATA/GDG1"
m_FileAssign -d OLD,DELETE,DELETE -g -4 SYSUT2 "$DATA/GDG1"
(STEP2)
m_FileAssign -d OLD,DELETE,DELETE -g -1 SYSUT1 "$DATA/GDG1"
m_FileAssign -d OLD,DELETE,DELETE -g -2 SYSUT2 "$DATA/GDG1"
 
前述の例でSTEP1が終了すると、GNとRGNのマッピングは次のようになります。
 
STEP2では、SYSUT1でポイントされるGDS (GNが7であるGDS)およびSYSUT2でポイントされるGDS (GNが6であるGDS)が削除されます。
STEP2が終了すると、GNとRGNのマッピングは次のようになります。
 
GDG内の世代ファイルの削除
ART for Batchでは、新しく追加された生成ファイルまたは現在の既存の生成ファイルを、m_FileAssignで指定するDDの配置によって削除できます。
リスト3-24 新しく追加されたGDSの削除
(STEP1)
m_FileAssign -d NEW,DELETE,DELETE -g +1 SYSUT1 "$DATA/GDG1"
m_FileAssign -d NEW,DELETE,DELETE -g +5 SYSUT2 "$DATA/GDG1"
(STEP2)
m_FileAssign -d NEW,DELETE,DELETE -g +1 SYSUT1 "$DATA/GDG1"
m_FileAssign -d NEW,DELETE,DELETE -g +5 SYSUT2 "$DATA/GDG1"
 
前述の例では、最終的に、GDG1にGDSは追加されません。
リスト3-25 既存のGDSの削除
(STEP1)
m_FileAssign -d NEW,DELETE,DELETE -g -1 SYSUT1 "$DATA/GDG1"
m_FileAssign -d NEW,DELETE,DELETE -g -3 SYSUT2 "$DATA/GDG1"
(STEP2)
m_FileAssign -d NEW,DELETE,DELETE -g -1 SYSUT3 "$DATA/GDG1"
m_FileAssign -d NEW,DELETE,DELETE -g -3 SYSUT4 "$DATA/GDG1"
 
前述の例では、GDG1には1、4、6、7、9、10という番号の6つのGDSがそれぞれ含まれています。SYSUT1でポイントされるGDS (GNが9であるGDS)、SYSUT2でポイントされるGDS (GNが6であるGDS)、SYSUT3でポイントされるGDS (GNが7であるGDSファイル)およびSYSUT4でポイントされるGDS (GNが1であるGDSファイル)が削除されます。
注意:
GDGの削除
リスト3-26に示すように、GDGベース名を指定してm_FileDeleteを呼び出すことで、GDG全体を削除できます。この方法で、すべてのGDGのGDSが適切に削除されます。GDGの削除の操作は即時にコミットされ、ロールバックできません。
リスト3-26 GDGの削除
m_FileDelete ${DATA}/PJ01DDD.BT.GDG
 
GDGのカタログ化
GDGベースのみをカタログ化できます。そのGDSを個別にカタログ化することはできません。
GDGをカタログ化するには、ART for Batchでファイル・カタログ関数を有効にする必要があります。また、カタログ・モードでは、m_FileAssignに指定されるパラメータ[-v volume]は無視されます。
注意:
GDGのコミット
現在の手順で変更されるすべてのGDGは、現在の手順が正常終了するかどうかにかかわらずコミットされます。
GDGのコミットにより、Oracle DataBaseやファイル(*.gens)といったGDG管理システムの情報が更新され、一時的な世代ファイルがコミットされます。ただし、GDGのコミットによってGNとRGNのマッピング関係に変更はありません。つまり、ジョブの1つの手順の中で、RGNは常に同じGDSを参照します。
たとえば、GDG1には1、4、6、7、9、10という番号の6つのGDSがそれぞれ含まれています。
リスト3-27 GDGをコミットする例
(STEP1)
m_FileAssign -d NEW,KEEP,KEEP -g +1 SYSUT1 "$DATA/GDG1"
m_FileAssign -d NEW,KEEP,KEEP -g +2 SYSUT2 "$DATA/GDG1"
m_FileAssign -d NEW,KEEP,KEEP -g -1 SYSUT3 "$DATA/GDG1"
(STEP2)
m_FileAssign -d NEW,KEEP,KEEP -g -1 SYSUT4 "$DATA/GDG1"
 
STEP1で、GNとRGNのマッピング(ジョブおよびGDG管理システムの両方)は次のようになります。SYSUT3は、GNが9であるGDSを参照します。
 
STEP2で、GDG管理システムのGNとRGNのマッピングは次のようになります。
 
しかし、現在実行中のジョブにおけるGNとRGNのマッピングは変更されません。次の例では、SYSUT4は、GNが11であるGDSではなく、GNが9であるGDSを引き続き参照します。
 
ファイルベースの管理
構成
MT_GENERATION変数は、GDGファイルの管理方法を指定します。*.gensファイルでGDGを管理するには、値をGENERATION_FILEに設定する必要があります。
同時実効性制御および認可
ファイルベースのGDG管理メカニズムでは、1つのGDGファイルに常にアクセスできるのは1つのジョブのみで、1つのGDGに同時に複数のジョブでアクセスすることはできません。GDGファイルにアクセスするには、既存の内部関数mi_FileConcurrentAccessReservationによりファイル・ロックを取得する必要があります。 ファイルベースのGDG管理では、同時実効性および認可の制御に*.gensファイル(*はGDGのベース名)を使用します。ユーザー・アクセスのチェックは、*.gensファイルにアクセスできるかできないかによって行われます。
DBベースの管理
DBベース管理では、Oracle DatabaseおよびDB2データベースがサポートされています。
注意:
この機能を有効にするには、MT_GENERATIONGENERATION_FILE_DBに、MT_DBDB_ORACLEまたはDB_DB2LUWに(またはMT_META_DBDB_ORACLEもしくはDB_DB2LUWに)設定し、MT_GDG_DB_ACCESSをOracle DatabaseまたはDB2データベースにアクセスするための有効なデータベース接続文字列に設定する必要があります。
データベース表
表3-5では、バッチ・ランタイムによって管理されるGDGごとの一般的な管理を示しています。この表では、各行が1つのGDGを表しています。すべてのGDGファイルでは、1つのGDG_DETAIL表が共有されています。
 
表3‑9 GDG_DEFINE
これには、1つのリポジトリに対する相対パスのみを含めることはできません。GDG_BASE_NAMEの長さは1024に制限されます(つまり、異なるUNIXプラットフォームでの最小のPATH_MAX)。
これには、-sオプションで指定した上限の世代が含まれます。-sオプションは1-9999の範囲で設定できます。
主キー: GDG_BASE_NAME
表3-6では、すべてのGDG世代ファイルの詳細情報を示しています。この表では、各行がGDGの1つの世代ファイルを表しています。
 
表3‑10 GDG_DETAIL
主キー: GDG_BASE_NAME+ GDG_ABS_NUM
GDG_FILE_NAME (物理世代ファイル名)は、GDG_DEFINEGDG_BASE_NAMEからとGDG_DETAILGDG_ABS_NUMから構成される可能性があるため、表GDG_DETAILには格納されません。
注意:
GDG情報をバックアップするには、GDG_DEFINEおよびGDG_DETAILEの2つのデータベース表をバックアップする必要があります。
世代ファイルのネーミング・ルール
表3-7では、世代ファイル名のルールを示しています。
 
構成変数
MT_GENERATION
この変数は、GDGファイルの管理方法を指定します。データベースでGDGファイルを管理するには、値をGENERATION_FILE_DBに設定し、MT_GDG_DB_ACCESSを適切に構成する必要があります。
MT_GDG_DB_ACCESS
この変数は、GENERATION_FILE_DBに設定されている場合、MT_GENERATIONとともに使用され、有効なデータベース・ログイン・アカウントで設定する必要があります。Oracleデータベースにアクセスするには、たとえばscott/tiger@orclのように、userid/password@sidの書式で指定する必要があります。
MT_GDG_DB_BUNCH_OPERATION
GENERATION_FILE_DBに設定されている場合は、MT_GENERATIONとともに使用されます。これは、コミット・フェーズでデータベースにGDG変更をコミットする方法を示します。"Y"に設定されている場合、GDGの変更は1回のデータベース・アクセスでコミットされます。"N"に設定されている場合、GDGの変更は、1回または複数のデータベース・アクセスを使ってコミットされます。
外部シェル・スクリプト
2つの外部シェル・スクリプトを使用すれば、新規のデータベース表を自動的に作成および削除できます。
CreateTableGDG.sh
説明
データベースに表GDG_DEFINEおよびGDG_DETAILを作成します
使用方法
CreateTableGDG.sh <DB_LOGIN_PARAMETER>
サンプル
CreateTableGDG.sh scott/tiger@orcl
DropTableGDG.sh
説明
データベースから表GDG_DEFINEおよびGDG_DETAILを削除します。
使用方法
DropTableGDG.sh <DB_LOGIN_ PARAMETER>
サンプル
DropTableGDG.sh scott/tiger@orcl
同時実効性制御および認可
DBベースのGDG管理メカニズムは、ファイルベースのGDG管理メカニズムと同時実行性制御動作が同じですが、*.ACS (*はGDGベース名)ファイルの書式は異なります。DBベースのGDG管理メカニズムでは、GDGに対応する行にアクセスするジョブは、まずGDGのファイル・ロックを取得する必要があるため、「データベース表」に記載されている表をロックする必要はありません。つまり、データベースのアクセス・レベルでは、同時実行性制御を実行する必要はありません。対応する*.ACSファイルへのアクセス権限(読取りまたは書込み)がない場合、データベースにはアクセスできません。GDGファイルを変更する必要がある場合、世代ファイルおよび世代ファイルを保持するディレクトリへの書込み権限が必要であり、MT_GDG_DB_ACCESSは、「データベース表」に記載されている表への適切な権限を持つように正しく構成する必要があります。
DBベースのGDG管理の記述全体をコピーし、ファイル名を置換するしかありません。
例外処理
DBベースのGDG管理メカニズムには4種類の情報があります。
*.ACSファイル
これらの情報は、GDGファイルで一貫している必要があります。バッチ・ランタイムでは、ジョブで初めてGDGファイルにアクセスする際に、GDG_DEFINEから物理ファイルへの一貫性をチェックします。例外が発生し、これらの情報の一貫性がなくなった場合、バッチ・ランタイムにより現在のジョブが終了され、エラーが報告されます。
この動作は、一貫性のチェックはせず、プロセスで発生した例外の報告のみをする既存のファイルベースのメカニズムと異なります。
Data Control Block (DCB)のサポート
ファイル・ベースのGDGとDBベースのGDGの両方がData Control Block (DCB)をサポートします。
.dcbファイルの定義
.dcbファイルは、-t <file type>および-r <record length>の2つの値をとります。
-t <file type>
最初の世代ファイルを作成するには、m_FileAssign-t <file type>LSEQまたはSEQのどちらかを指定する必要があります。job kshファイルにファイル・タイプを指定しなかった場合は、デフォルトでLSEQが使用されます。
-r <record length>
SEQファイルの場合、この値は必須で、数値を1つ、またはnumber1-number2の形式で指定する必要があります。
LSEQファイルの場合、この値はオプションです。設定する場合、この値には数値を1つ、または"number1-number2"の形式で指定する必要があります。
.dcbファイルの作成
最初の世代ファイルをm_FileAssign -g +1で作成するときに、GDGデータ・セット用の.dcbファイルを作成します。
注意:
m_FileAssignではなくm_GenDefineを使用してGDGを作成する場合、.dcbファイルは、m_FileAssign -g +1を使用して世代ファイルが作成されるまで存在しません。
.dcbファイルが作成されると、m_FileAssignによって最初の世代ファイルが再作成されないかぎり、そのコンテンツはその後実行される他のm_FileAssign文によって変更されることはありません。
.dcbファイルの削除
GDGがm_FileDeleteで削除されると、対応する.dcbファイルが自動的に削除されます。
ただし、あるGDG内のすべての世代ファイルが削除されてもそのGDG自体が存在する場合、対応する.dcbファイルは削除されません。
ストリーム内ファイルの使用
データがKornシェル・スクリプトに直接書き込まれるファイルを定義して使用するには、-iパラメータを指定してm_FileAssign関数を使用します。デフォルトでは、文字列_endは、リスト3-28に示すようにストリーム内フローの「最終」デリミタです。
リスト3-28 ストリーム内データの例
(STEP1)
m_FileAssign -i INFIL
data record 1
data record 2
_end
 
 
一連の連結ファイルの使用
一連のファイルを連結入力として使用するには、リスト3-29に示すように-Cパラメータを指定してm_FileAssign関数を使用します(z/Os JCLでは、最初の1つのみがラベルを含むDDカードとしてコーディングされていました)。
リスト3-29 連結された一連のファイルの使用例
(STEPDD02)
m_FileAssign -d SHR INF ${DATA}/PJ01DDD.BT.QSAM.KBDDI002
m_FileAssign -d SHR -C ${DATA}/PJ01DDD.BT.QSAM.KBDDI001
m_ProgramExec BDDAB001
 
外部sysinの使用
実行するコマンドを含む外部sysinファイルを使用するには、m_UtilityExec関数を使用します。
m_FileAssign -d OLD SYSIN ${SYSIN}/SYSIN/MUEX07
m_UtilityExec
ファイルの削除
ファイル(世代ファイルを含む)は、m_FileDelete関数を使用して削除できます。
m_FileDelete ${DATA}/PJ01DDD.BT.QSAM.KBSTO045
RDBファイル
z/OsからUNIX/Linuxへの移行プロジェクトでは、一部の永続データ・ファイルがリレーショナル表に変換される場合があります。Oracle Tuxedo Application Runtime Workbenchの「ファイルからOracle」の章を参照してください。
ファイルがリレーショナル表に変換されると、この変更はそれを使用するコンポーネントに影響を与えます。具体的には、そのようなファイルがz/Os JCLで使用される場合、そのJCLに対応する変換済Kornシェル・スクリプトは、このファイルに関係する操作を処理できる必要があります。
変換されたKornシェル・スクリプトを、可能なかぎり標準的にしておくために、この変更は変換プロセスでは処理されません。かわりに、この種のファイルのすべての管理は、バッチ・ランタイム内で実行時に行われます。
つまり、z/OS JCLに、変換されるファイルが関係するファイル・コピー操作があった場合、これはバッチ・ランタイムではファイルの標準コピー操作に変換されます(つまりm_FileLoad操作)。
表に変換されるファイルの管理は、RDBファイルを介して可能になります。RDBファイルは、表に変換されるファイルと同じ名前ですが、接尾辞.rdbが追加されたファイルです。
ファイル関連の関数がバッチ・ランタイムによって実行されるたびに、(対応する.rdbファイルが存在するかどうかをテストして)ファイルが表に変換されたかどうかを確認します。関係するファイルのいずれかが表に変換された場合、関数は必要な中間操作(表をアンロードしてファイルに再ロードするなど)を実行し、その後で最終的なアクションを実行します。
この管理の全ては、エンド・ユーザーに対して透過的です。
RDBMS接続の使用
RDBMSに接続する必要があるアプリケーション・プログラムを実行する場合、m_ProgramExec関数を呼び出すときに-bオプションを使用する必要があります。
接続と切断(およびコミットとロールバック操作)は、バッチ・ランタイムによって暗黙的に処理され、次の2つの方法を使用して定義できます。
注意:
MT_DB_LOGINの値は、dbuser/dbpasswd[@ssid]または「/」という形式を使用する必要があります。
注意:
RDBMSが、データベース接続ユーザーに対してUNIX認証を使用でき、RDBMS認証を使用できないように構成されている場合は「/」を使用する必要があります。
「/」を使用するべきかどうかは、データベース管理者に確認してください。
リスト3-30に示すように、実行される主プログラムはRDBMSを直接使用しないが、その後に続くサブプログラムのいずれかが使用する場合は、-bオプションも使用する必要があります。
リスト3-30 RDBMS接続の例
(STEPDD02)
m_FileAssign -d MOD OUTF ${DATA}/PJ01DDD.BT.QSAM.REPO001
m_ProgramExec -b DBREP001
 
m_ProgramExec関数が送信する可能性のあるファイルは次の3種類です。
.gntファイルが$COBPATH (Micro Focus COBOLの場合)、または$COB_LIBRARY_PATH (COBOL-ITの場合)に存在することを確認してください。
呼出し可能な共有ライブラリ・ファイルが$COBPATH (Micro Focus COBOLの場合)、または$COB_LIBRARY_PATH (COBOL-ITの場合)、もしくはシステム・ライブラリのファイル検索パス(LIBPATHLD_LIBRARY_PATHなど)に存在することを確認してください。
このタイプのファイルには、ファイル名と同じ名前を持つエントリ関数が必要です。
たとえば、呼出し可能な共有ライブラリ・ファイルProgA.soには、次のいずれかで宣言された関数が含まれている必要があります。
ProgA(short* arglen, char* argstr): パラメータが必要な場合
ProgA(): パラメータが必要ない場合
実行可能プログラムが$PATHに存在することを確認してください。
m_ProgramExecは、COBOLプログラム(.gnt)、呼出し可能な共有ライブラリ内のCプログラム(.so)、その他の実行可能プログラムの順にプログラムの成果物の種類を決定します。COBOLプログラムが実行されると、m_ProgramExecは同じ名前を持つ別のプログラムを実行しません。たとえば、ProgA.gntの実行後、ProgA.soなど、ProgAという名前のプログラムは実行されません。
.gntファイルと.soファイルについては、m_ProgramExecrunbプログラムを起動して、実行します。ARTは、次のようなrunbを提供します。
$JESDIR/ejr_mf_ora : Micro Focus COBOLとOracleデータベースの組合せで使用
$JESDIR/ejr_mf_db2: Micro Focus COBOLとDB2データベースの組合せで使用
$JESDIR/ejr_cit_ora: COBOL-ITとOracleデータベースの組合せで使用
$JESDIR/ejr_cit_db2: COBOL-ITとDB2データベースの組合せで使用
前述の4種類の組合せを使用しない場合は、$JESDIR/ejrにアクセスして、make.shを実行し、自分専用のrunbを生成してください。
runbプログラムは、データベース・ライブラリを使用してコンパイルされたランタイムで、runbatchプログラムを実行します。
runbatchプログラムには次の役割があります。
- データベースへの接続の実行(必要に応じて)
- ユーザー・プログラムの実行
- コミットまたはロールバックの実行(必要に応じて)
- データベースへの接続切断の実行(必要に応じて)
INTRDRファシリティを使用したジョブの発行
INTRDRファシリティによって、sysoutのコンテンツをTuxJESに送信できます(「Tuxedo Job Enqueueing Service (TuxJES)の使用」のドキュメントを参照してください)。TuxJESが存在しない場合、コマンド「nohup EJR」が使用されます。
例:
m_FileAssign -d SHR SYSUT1 ${DATA}/MTWART.JCL.INFO
m_OutputAssign -w INTRDR SYSUT2
m_FileRepro -i SYSUT1 -o SYSUT2
この例では、ファイルの内容${DATA}/MTWART.JCL.INFO (ddname SYSUT1)が、オプション-w INTRDRを使用しているファイル(ddname SYSUT2)にコピーされ、その後、このファイル(ddname SYSUT2)が送信されます。
出力ファイルには有効なksh構文が含まれる必要がありますのでご注意ください。
COBOLプログラムにより生成されるINTRDRジョブは、リアルタイムで自動的に送信できます。COBOLプログラムがINTRDRを閉じると、ジョブINTRDRはその時に実行されている作業の完了を待たずに、即座に送信されます。この機能を有効化するには、ファイル・ハンドラARTEXTFH.gntをCOBOLプログラムにリンクする必要があります。
CALLFH("ARTEXTFH")
flat-extfh=ARTEXTFH
flat-extfh-lib="<fullpath of ARTEXTFH.gnt>"
ARTEXTFH.gntは、${MT_ROOT}/COBOL_IT/ARTEXTFH.gntに保存されます。
この機能が有効化されていない場合、INTRDRジョブは、そのときに実行されている作業が完了した後で送信されます。
注意:
EJRを使用したジョブの送信
バッチ・ランタイムを使用する場合は、TuxJESを使用してジョブを起動できます(「Tuxedo Job Enqueueing Service (TuxJES)の使用」のドキュメントを参照)が、EJRスポーナを使用してジョブを直接実行することもできます。
この種の実行を行う前に、全体のコンテキストが正しく設定されていることを確認します。これには、バッチ・ランタイムで必要な環境変数およびディレクトリが含まれます。
EJRを使用してジョブを起動する例:
# EJR DEFVCUST.ksh
EJRスポーナの完全な説明は、『Oracle Tuxedo Application Runtime for Batchリファレンス・ガイド』を参照してください。
ユーザー定義のエントリ/終了
バッチ・ランタイムを使用すると、パブリックAPI用にカスタムの事前または事後アクションを追加できます。m_* (*は関数名)関数ごとに、m_*_Beginおよびm_*_End関数を指定し、それらをejr/USER_EXITディレクトリに置くことができます。それらは、ジョブ実行がm_* API.に入るまたは出るときに、自動的に呼び出されます。
m_* APIでそのユーザー定義のエントリ/終了関数を呼び出すかどうかは、m_*_Beginm_*_Endejr/USER_EXITにあるかどうかで決まります。
一般的なユーザー・エントリ/終了APIのペア、mi_UserEntryおよびmi_UserExitは、各外部APIのエントリおよび終了ポイントで呼び出されます。これらのAPIに対する引数は、それらを呼び出す関数名と、その関数の元の引数リストで構成されます。これら2つのAPIは変更する必要はありませんが、m_*外部APIのカスタム・エントリ/終了を指定することは必要です。mi_UserEntryおよびmi_UserExitは、ejr/COMMONにあります。
注意:
ユーザー・エントリ/終了関数では、exitを呼び出さないことをお薦めします。フレームワークでは、exitは内部関数mif_ExitTrapの別名であり、ユーザー・エントリ/終了関数でexitが呼び出された場合、最終的に呼び出されるためです。exit 0が呼び出されると、フレームワークでは何も行われず、ジョブは続行され、exit not_0が呼び出されると、グローバル変数が設定されて、現在のジョブを終了できます。
構成
関数と同じ名前の1つのファイルでは、含めるのは1つの関数のみ(m_*_Beginまたはm_*_Endなど)で、そのようなファイルはすべてejr/USER_EXITの下に置きます。
バッチ・ランタイムで提供されているmi_接頭辞の関数には、カスタム・エントリ/終了関数は指定できません。
バッチ・ランタイムのロギング
この項には次のトピックが含まれます:
概要
ログ・メッセージの形式
CONF/Messages.confで定義されている各ログ・メッセージは、表3-8に示すように、6つのフィールドで構成されます。
 
b: 例外メッセージFatal/Error/Warningに固有
これらのメッセージのレベルは、デフォルトでは4に設定されています。
ジョブ・ログにあるこれら3つのメッセージを印刷するかどうかを制御するために、バッチ・ランタイムのメッセージ・レベルを指定できます。
ログ・メッセージのレベル
表3-9では、バッチ・ランタイムに用意されているログ・メッセージのレベルを示しています。
 
レベル3と、-d regexpオプションに対応する高レベル関数と同じ
7と、-d regexpオプションに対応するテクニカル・レベル関数と同じ
ログ・レベルの制御
ジョブ・ログでメッセージを表示するデフォルトのレベルは3です。レベルの変更には、次の方法のいずれかを選択することもできます。
EJRの-Vオプションの使用
環境変数MT_DISPLAY_LEVELの使用
EJRで設定された表示レベルにより、MT_DISPLAY_LEVELで設定されたレベルをオーバーライドできます。
ログ・ファイルの構造
バッチ・ランタイムは、起動されたジョブごとに、実行された各ステップの情報を含むログ・ファイルを作成します。このログ・ファイルには、リスト3‑31に示すように構造体が含まれます。
リスト3-31 ログ・ファイルの例
JOB Jobname BEGIN AT 20091212/22/09 120445
BEGIN PHASE Phase1
Log produced for Phase1
.......
.......
.......
END PHASE Phase1 (RC=Xnnnn, JOBRC=Xnnnn)
BEGIN PHASE Phase2
Log produced for Phase2
.......
.......
.......
END PHASE Phase2 (RC=Xnnnn, JOBRC=Xnnnn)
..........
..........
BEGIN PHASE END_JOB
..........
END PHASE END_JOB (RC=Xnnnn, JOBRC=Xnnnn)
 
JOB ENDED WITH CODE (C0000})
または
JOB ENDED ABNORMALLY WITH CODE (S990})
 
TuxJesを使用しない場合、ログ・ファイルは、<Job name>_<TimeStamp>_<Job id>.logという名前で${MT_LOG}ディレクトリの下に作成されます。
詳細は、「Tuxedo Job Enqueueing Service (TuxJES)の使用」を参照してください。
ログ・ヘッダー
バッチ・ランタイムのロギング機能では、各ログ行の前に情報提供のログ・ヘッダーが次の書式で示されます。
YYYYmmdd:HH:MM:SS:TuxSiteID:JobID:JobName:JobStepName
ログ・ヘッダーの書式は構成できますが、既存の特定のメッセージ・ヘッダー、タイプ0、1およびbの構成や動作に影響を与えないようにしてください。
表3-10では、汎用ログ・ヘッダーの指定に使用できる変数を示しています。
 
ジョブ・スクリプトでm_JobBeginによって割り当てられたジョブの名前。
m_ProcIncludeによってプロセスから含められたコードが実行中の場合はそのプロセスの名前。それ以外の場合は空。
構成
MT_LOG_HEADERは、CONF/BatchRT.confに追加された新しい構成変数で、次のようになります。
MT_LOG_HEADER='$(date'+%Y%m%d:%H%M%S'):${MTI_SITE_ID}:${MTI_JOB_NAME}:${MTI_JOB_ID}:${MTI_JOB_STEP}: '
MT_LOG_HEADERの値がnull文字列でなければ、その内容はログ・ヘッダーとして出力される実際の値を取得するためのシェル・ステートメントとして評価され、それ以外の場合、この機能は無効です。
注意:
MT_LOG_HEADERに対して構成された文字列は、ソース・コードでシェル・ステートメントとして処理され、ログ・ヘッダーとして使用される対応文字列を生成するevalコマンドによって解釈されます。
構文の内部: eval mt_MessageHeader=\"${MT_LOG_HEADER}\"
この変数を構成するには、次のルールに従う必要があります。
MT_LOG_HEADERは、evalに対して有効なシェル・ステートメントであることが必要で、一重引用符で囲む必要があります。
MT_LOG_HEADERで使用される変数はすべて、${}で囲む必要があります。たとえば、${ MTI_JOB_STEP }のようになります。
MT_LOG_HEADERで使用されるコマンド行はすべて、$()で囲む必要があります。たとえば、$(date '+%Y%m%d:%H%M%S')のようになります。
前述の例は、書式の必要に応じて、表3-10に示した変数のみを使用して変更できます。
この構成変数は、デフォルトではコメント化されるため、この機能を有効にするには、非コメント化する必要があります。
ファイル情報のロギング
ロギング・システムでは、ジョブ・ログの詳細なファイル情報の他、ファイルがDDに割り当てられるときや、解除されるときの情報も記録できます。
ファイル割当て情報は、次の関数で記録されます。
m_FileAssign
ファイル・リリース情報は、次の関数で記録されます。
m_PhaseEnd
ファイル情報は、次の関数で記録されます。
構成
Messages.conf
次のメッセージ識別子は、ファイル割当ておよびファイル情報ログの書込みでのmi_DisplayFormatの使用をサポートするために、CONF/Messages.confで定義されています。
注意:
CONF/Messages.confは構成できません。このファイルは編集しないでください。
各識別子の最後の文字列%sは、それがログ・ファイルに書き込まれることを表します。その値は、CONF/Batch.confで定義されている次の変数を使用して構成できます。詳細は、表3-12を参照してください。
MT_LOG_FILE_ASSIGN (FileAssignの場合)
MT_LOG_FILE_RELEASE (FileReleaseの場合)
MT_LOG_FILE_INFO (FileInfoの場合)
BatchRT.conf
詳細なファイル情報の書式を決定するには、3つの構成変数をCONF/BatchRT.confで定義する必要があります。表3-11で示されているプレースホルダを使用すれば、ファイル・ログ情報をより柔軟に構成できます。
 
SHRまたはNEW
 
注意:
操作は、ソース・コード(FileCopy sourceFileCopy DestinationおよびFileDeleteなど)にハードコードされています。
これらのMT_LOG_FILE_*変数に文字列を構成するには、プレースホルダを対応する値に置換します(文字列置換)。結果はシェル・ステートメントとして処理され、evalコマンドにより解釈され、ログに書き込む対応文字列を生成します。
構文の内部: eval mt_FileInfo=\"${MT_LOG_FILE_INFO}\"
これらの変数を構成するには、次のルールに従う必要があります。
プレースホルダの置換後、MT_LOG_FILE_*evalに対して有効なシェル・ステートメントであることが必要で、一重引用符で囲む必要があります。
MT_LOG_FILE_*では、表3-11のプレースホルダのみを使用できます。
MT_LOG_HEADERで使用されるコマンド行はすべて、$()で囲む必要があります。たとえば、$(ls -l --time-style=+'%Y/%m/%d %H:%M:%S' --no-group <%FULLPATH%> )のようになります。
FileInfoメッセージのレベルがバッチ・ランタイムに対して指定されたメッセージ・レベルと等しいかそれより低い場合、およびMT_LOG_FILE_*がnull文字列に設定されている場合、FileInfoメッセージは、ジョブ・ログに表示されません。MT_LOG_FILE_*が、ファイル情報を表示されなくする間違ったコマンドに設定されている場合も、FileInfoメッセージはジョブ・ログで表示されませんが、ジョブの実行には影響がありません。
注意:
ジョブ・スケジューラでのバッチ・ランタイムの使用
一部の関数(m_JobBeginm_JobEndm_PhaseBeginm_PhaseEnd)には、選択されたジョブ・スケジューラとの関係で行われる特定のアクションを挿入するためのエントリ・ポイントが用意されています。
SQLリクエストの実行
SQLリクエストは、m_ExecSQL関数を使用して実行できます。
ターゲット・データベースに従い、この関数はORACLEデータベースでは「sqlplus」コマンドを実行し、UDBでは「db2 -tsx」コマンドを実行します。
環境変数MT_DB_LOGINを設定する必要があることに注意してください(データベース接続ユーザー・ログイン)。
SYSINファイルにはSQLリクエストを含める必要があり、ユーザーはデータベース・ターゲットに関するコンテンツを検証する必要があります。
COBOL-IT / BDBにおけるSimple Application
COBOL-ITによってコンパイルされたBatch COBOLプログラムは、ART Workbenchを使用してMainframe VSAMファイルから変換される索引編成ISAMファイルにアクセスできます。VSAMファイルは、COBOL-ITを使用してBDBに格納できます。
この機能をバッチ・ランタイムで有効にするには、ランタイム中に次を実行してください。
bdb:yesを指定して、COBOLプログラムをCOBOL-ITコンパイラでコンパイルします。
BDBで必要なため、DB_HOMEを正しく設定します。DB_HOMEは、BDBによって一時ファイルが配置される場所を指します。
TuxJESシステムを起動する前に環境変数COB_ENABLE_XAを設定解除します。
unset COB_ENABLE_XA
注意:
COBOL-ITをART CICS Runtimeとともに使用する場合、COB_ENABLE_XAを設定する必要があります。
ネイティブJCLジョブの実行
この項には次のトピックが含まれます:
概要
Oracle Tuxedo ART Batch Runtimeでは、ネイティブのJCLジョブをART Workbenchによる事前変換なしで管理することをサポートしています。
構成
ジョブを管理するには、データベースを使用してTuxJESを設定する必要があります。詳細は、「Oracle TuxedoアプリケーションとしてのTuxJESの設定(データベースを使用)」を参照してください。
設定項目JOBLANG=JCLjesconfigファイルに追加する必要があります。
ネイティブJCLの実行では、「環境変数を設定する」で説明されているすべての環境変数も使用できます。
JESクライアントを使用したJCLジョブの管理
JCLジョブの送信
オプション-Iを次のように使用して、JCLジョブを送信できます。
artjesadmin -I JCLScriptName (シェル・コマンド行の場合)
submitjob -I JCLScriptName (artjesadminコンソールの場合)
また、ジョブを送信する場合は、envファイルを次のように指定できます
artjesadmin -o "-e <envfile_path>" -I JCLScriptName (シェル・コマンド行の場合)
submitjob -o "-e <envfile_path>" -I JCLScriptName (artjesadminコンソールの場合)
このenvファイル内のすべての項目は、次のように"<NAME>=<VALUE>"形式に従う必要があります
DATA=/home/testapp/data
PROCLIB=${PROCLIB}:${APPDIR}/proc
JESTRACE=DEBUG
ジョブの出力
[-t JCL|KSH]を次のようにフィルタとして使用します。
列job typeが、次のいずれかの値を使用して結果に追加されます。
変換フェーズが完了する前、JCLのジョブ名とクラスはNULLで、優先度は0として表示されます。
JCLジョブの保留/解放/取消し/パージ
使用方法はKSHジョブと同じです。
JCLエンジンのデバッグ・トレース・ファイル
JCL変換ログは$JESROOT/<JOBID>/LOG/<JOBID>.traceです。
このトレース・ファイルは、デバッグの目的でのみ使用されます。
JCL文およびユーティリティのサポート範囲
表3-17に、サポートされるJCL文を示します。表3-18に、サポートされるユーティリティを示します。
 
 
ネイティブJCLテスト・モード
この項の内容は次のとおりです。
概要
ネイティブJCLテスト・モードは、ネイティブJCLの実行モードです。このモードは、ユーザー・ジョブ/プロセス内の欠陥の分析、ネイティブJCL機能の使用のギャップの検出、およびジョブの実行を妨げる環境依存問題の検出に役立ちます。
構成
ネイティブJCLテスト・モードを使用するために次のように構成します。
環境変数の構成(必須)
テスト・モード・ジョブを送信する前に、必要な環境変数を設定します。次の表に、設定する必要のあるすべての環境変数を示します。
 
PROCおよびINCLUDEファイルのディレクトリ
COBOL_MF: Micro Focus COBOL
COBOL_IT: COBOL-IT COBOL
DB_ORACLE: Oracleデータベース
DB_DB2LUW: DB2データベース
SORT_MicroFocus: Micro Foucs COBOLソート・ユーティリティ
SORT_SyncSort: Syncsortソート・ユーティリティ
SORT_CIT: COBOL-IT COBOLソート・ユーティリティ
ネイティブJCL構成ファイルの構成(オプション)
ネイティブJCL構成ファイルで使用する必要がある追加のユーティリティを構成します。この構成ファイルは、${JESDIR}/jclexec/conf/JCLExecutor.confの下にあり、そのADDUTILITYLIST項目が追加ユーティリティ・リストの定義に使用されます。
たとえば、MYUTILITYユーティリティを定義する場合は、ADDUTILITYLIST=MYUTILITYを指定する必要があります。複数のユーティリティを定義する場合は、カンマ(,)を使用してユーティリティを区切ってADDUTILITYLIST=MYUTILITY1,MYUTILITY2,…と指定する必要があります。
クライアントを使用したテスト・モードの管理
ジョブまたはジョブのグループのテスト・モードを起動するにはartjclchkツールを使用できます。artjclchkツールのコマンドライン構文は次のとおりです。
artjclchk -d <destdir> [-i <job_file|job_dir>] [-p <parallel number>] [-r]
-d <destdir>
出力レポート・ファイルを保存する宛先ディレクトリを指定します。3種類の出力レポート・ファイルがあり、これらのすべてがここで生成されます。詳細は、「テスト・モード・レポート・ファイル」を参照してください。
-i <job_file|job_dir>
テスト・モードで分析するジョブを指定します。個々のジョブまたはディレクトリを指定できます。ディレクトリを指定すると、このディレクトリの下のすべてのジョブが分析されます。
-p <parallel number>
同時に処理可能なジョブの数を指定します。
-r
カテゴリ・レポートおよびサマリー・レポートの生成を指定します。
-rを指定して-iを指定しないと、このコマンドは個別レポートのすべてについてカテゴリ・レポートおよびサマリー・レポートを-dディレクトリに生成します。
-rを指定して-iを指定すると、このコマンドは-iで指定されるすべてのジョブの個別レポートを生成し、その後これらの個別レポートについてのみカテゴリ・レポートおよびサマリー・レポートを生成します。
-rを指定しないと、カテゴリ・レポートもサマリー・レポートも生成されません。
注意:
artjclchkツールを同じ-iおよび-dオプション値を使用して2回実行すると、2回目の実行の結果で最初の実行の結果が置き換えられます。
テスト・モード・レポート・ファイル
artjclchkが生成するレポート・ファイルは3種類あります。
個別レポート・ファイルはジョブ固有のレポート・ファイルです。artjclchkは、ジョブごとに個別レポート・ファイルを生成し、ジョブで検出されたすべてがこのファイルに報告されます。
カテゴリ・レポート・ファイルは、情報のタイプに従って編成されます。artjclchkは、情報のタイプごとにサマリー・レポート・ファイルを生成し、そのカテゴリに該当するオカレンスがジョブの場所および行番号とともにこのファイルに報告されます。
サマリー・レポート・ファイルは、カテゴリ・レポートの簡略版です。artjclchkにより生成されます。カテゴリ・レポート・ファイルと異なり、サマリー・レポート・ファイルは問題と問題の出現数のみを記録します。サマリ・レポート・ファイルは対応するカテゴリ・レポート・ファイルと同じ名前ですが、"Occurences"はありません。
個別レポート・ファイル
個別レポート・ファイルはジョブ固有のレポート・ファイルです。artjclchkは、ジョブごとに個別レポート・ファイルを生成し、ジョブで検出されたすべてがこのファイルに報告されます。
このファイルの名前は<JOBFILENAME>.rptの形式で、各行のフィールドがカンマで区切られています。これらのフィールドについて、次の表を参照してください。
表3-20はJCL要素のフィールドを示します
表3-21IKJEFTxxユーティリティのフィールドを示します
表3-22はその他のユーティリティのフィールドを示します
 
PROCの問題を識別します
INCLUDEの問題を識別します
STEPの問題を識別します
PROCINCLUDEPROGRAMおよびDATASETオブジェクトが検出されたかされなかったかを識別します
STATEMENTPARAMおよびUTILITYオブジェクトがサポートされているかいないかを識別します
SYMBOLオブジェクトが定義されているかいないかを識別します
STATEMENTまたはPARAMが認識されるが無視されることを識別します
STATEMENTまたはPARAMが認識されないことを識別します
オブジェクト名。これは、PROC名、INCLUDE名、PROGRAM名、UTILITY名、PARAM名、DATASET名またはその他のオブジェクト名になります
 
STEPの問題を識別します
PROGRAMオブジェクトが検出されたかされなかったかを識別します
COMMANDPARAMおよびUTILITYオブジェクトがサポートされているかいないかを識別します
COMMANDまたはPARAMが認識されるが無視されることを識別します
COMMANDまたはPARAMが認識されないことを識別します
オブジェクト名。これは、PROC名、INCLUDE名、PROGRAM名、UTILITY名またはその他のオブジェクト名になります
行の場所を識別します。FILEおよびLINEの場所はJCLジョブ自体に関連しており、たとえば、現在のユーティリティが起動したSTEPの場所です。
 
COMMANDおよびPARAMオブジェクトがサポートされているかいないかを識別します
COMMANDまたはPARAMが認識されるが無視されることを識別します
COMMANDまたはPARAMが認識されないことを識別します
オブジェクト名。これは、PROC名、INCLUDE名、PROGRAM名、UTILITY名またはその他のオブジェクト名になります
行の場所を識別します。FILEおよびLINEの場所はJCLジョブ自体に関連しており、たとえば、現在のユーティリティが起動したSTEPの場所です。
カテゴリ・レポート・ファイル
カテゴリ・レポート・ファイルは、情報のタイプに従って編成されます。artjclchkは、情報のタイプごとにサマリー・レポート・ファイルを生成し、そのカテゴリに該当するオカレンスがジョブの場所および行番号とともにこのファイルに報告されます。
次のレポートが生成されます。
これは欠落した項目のカテゴリ・レポート・ファイルです。このレポート・ファイルの名前の書式はMissing_Item_<DATETIME>_Occurences.csvです。列については、表3-23を参照してください。
これはサポートされていない項目のカテゴリ・レポート・ファイルです。このレポート・ファイルの名前の書式はUnsupported_Item_<DATETIME>_Occurences.csvです。列については、表3-24を参照してください。
これは無視された項目のカテゴリ・レポート・ファイルです。このレポート・ファイルの名前の書式はIgnored_Item_<DATETIME>_Occurences.csvです。列については、表3-25を参照してください。
これはコード欠陥のカテゴリ・レポート・ファイルです。このレポート・ファイルの名前の書式はCodeDefect_<DATETIME>_Occurences.csvです。列については、表3-26を参照してください。
これは欠落したデータセットのカテゴリ・レポート・ファイルです。このレポート・ファイルの名前の書式はMissing_Dataset_<DATETIME>_Occurences.csvです。列については、表3-27を参照してください。
これは内部エラーのカテゴリ・レポート・ファイルです。このレポート・ファイルの名前の書式はInternal_Error_<DATETIME>_Occurences.csvです。列については、表3-28を参照してください。
これはサポートされているユーティリティのカテゴリ・レポート・ファイルです。このレポート・ファイルの名前の書式はSupported_Utility_<DATETIME>_Occurences.csvです。列については、表3-29を参照してください。
 
項目タイプ。これはPROCINCLUDEまたはPROGRAMになります。
 
項目タイプ。これはUTILITYSTATEMENTCOMMANDまたはPARAMになります。
 
項目タイプ。これはSTATEMENTCOMMANDまたはPARAMになります。
 
注意:
 
 
 
サマリー・レポート・ファイル
サマリー・レポート・ファイルは、カテゴリ・レポートの簡略版です。artjclchkにより生成されます。カテゴリ・レポート・ファイルと異なり、サマリー・レポート・ファイルは問題と問題の出現数のみを記録します。サマリ・レポート・ファイルは対応するカテゴリ・レポート・ファイルと同じ名前ですが、"Occurences"はありません。
次のレポートが生成されます。
このレポート・ファイルの名前の書式はMissing_Item_<DATETIME>.csvです。列については、表3-30を参照してください。
注意:
これは、「欠落した項目のレポート」カテゴリ・レポート・ファイルの簡略版です。
このレポート・ファイルの名前の書式はUnsupported_Item_<DATETIME>.csvです。列については、表3-31を参照してください。
注意:
これは、「サポートされていない項目のレポート」カテゴリ・レポート・ファイルの簡略版です。
このレポート・ファイルの名前の書式はIgnored_Item_<DATETIME>.csvです。列については、表3-32を参照してください。
注意:
これは、「無視された項目のレポート」カテゴリ・レポート・ファイルの簡略版です。
このレポート・ファイルの名前の書式はCodeDefect_<DATETIME>.csvです。列については、表3-33を参照してください。
注意:
これは、「疑わしいコード欠陥のレポート」カテゴリ・レポート・ファイルの簡略版です。
このレポート・ファイルの名前の書式はMissing_Dataset_<DATETIME>.csvです。列については、表3-34を参照してください。
注意:
これは、「欠落したデータセットのレポート」カテゴリ・レポート・ファイルの簡略版です。
このレポート・ファイルの名前の書式はInternal_Error_<DATETIME>.csvです。列については、表3-35を参照してください。
注意:
これは、「内部エラーのレポート」カテゴリ・レポート・ファイルの簡略版です。
このレポート・ファイルの名前の書式はSupported_Utility_<DATETIME>.csvです。列については、表3-36を参照してください。
注意:
これは、「サポートされているユーティリティのレポート」カテゴリ・レポート・ファイルの簡略版です。
 
項目タイプ。これはPROCINCLUDEまたはPROGRAMになります。
 
項目タイプ。これはUTILITYSTATEMENTCOMMANDまたはPARAMになります。
 
項目タイプ。これはSTATEMENTCOMMANDまたはPARAMになります。
 
 
 
 
ネットワーク・ジョブ入力(NJE)のサポート
この項の内容は次のとおりです。
概要
NJEサポートにより、JCLジョブの場合と同様、ユーザーはバッチ・ランタイムで次の機能を実装できます。
バッチ・ランタイムのm_SetJobExecLocation APIにより、ユーザーはNJEサポートを使用するKSHジョブを開発できます。例:
構成
ジョブ実行サーバー・グループ
API m_JobSetExecLocationでジョブ実行グループとして指定されているサーバー・グループ名を指定する場合は、次のことを確認してください。
指定したサーバー・グループがJESドメインのubbconfigファイルに存在している必要があります。
少なくとも1つのARTJESINITIATORサーバーがそのサーバー・グループにデプロイされている必要があります。
NJEサポートのオン/オフ設定
対応する設定項目はJES構成ファイルにあります。
 
ON: NJEサポートの有効化
OFF: NJEサポートの無効化
NJEサポートがjesconfigで無効化されると、m_SetJobExecLocation <SvrGrpName>文がTuxJESに無視され、ジョブは任意のサーバー・グループ内の任意のARTJESINITIATORで実行される可能性があります。
MPモードの環境変数MT_TMP
MPモードでは、MT_TMPをNFSで構成する必要があり、Tuxedoドメイン内のすべてのノードが同じ値のMT_TMPを持ち、これを共有する必要があります。
MT_TMPは、ファイル$MT_ROOT/CONF/BatchRT.confで構成するか、各ノードでtlistenが開始する前に環境変数としてエクスポート(export)できます。
キューEXECGRP
NJESUPPORTjesconfigで有効な場合、EXECGRPという名前の新しいキューを、既存のキュー・スペースJES2QSPACEに作成する必要があります。EXECGRPが作成されないと、JESはジョブを処理できません。
NJEジョブの例
リスト3-32 ジョブ実行サーバー・グループを指定する例(XEQ)
m_JobBegin -j SAMPLEJCL -s START -v 2.0 -c R
m_JobSetExecLocation "ATLANTA"
while true ;
do
m_PhaseBegin
case ${CURRENT_LABEL} in
(START)
# XEQ ATLANTA
JUMP_LABEL=STEP01
;;
(STEP01)
m_OutputAssign -c "*" SYSPRINT
m_FileAssign -i SYSIN
m_FileDelete ${DATA}/GBOM.J.PRD.ABOMJAW1.ABEND02
m_RcSet 0
_end
m_UtilityExec
JUMP_LABEL=END_JOB
;;
(END_JOB)
break
;;
(*)
m_RcSet ${MT_RC_ABORT:-S999} "Unknown label : ${CURRENT_LABEL}"
break
;;
esac
m_PhaseEnd
done
m_JobEnd
 
前述の例では、ジョブは任意のJESノードで送信できますが、実行できるのはJESのTuxedoサーバー・グループATLANTAに属するARTJESINITIATORのみです。
リスト3-33 ジョブを別のサーバー・グループに送信する例(XMIT)
m_JobBegin -j JOBA -s START -v 2.0
while true;
do
m_PhaseBegin
case ${CURRENT_LABEL} in
(START)
m_FileAssign -i -D \_DML_XMIT_TEST1 SYSIN
m_JobBegin -j TEST1 -s START -v 2.0 -c B
m_JobSetExecLocation "ATLANTA"
while true ;
do
m_PhaseBegin
case ${CURRENT_LABEL} in
(START)
JUMP_LABEL=STEP01
;;
(STEP01)
m_OutputAssign -c "*" SYSPRINT
m_FileAssign -i SYSIN
m_FileDelete ${DATA}/GBOM.J.PRD.ABOMJAW1.ABEND02
m_RcSet 0
_end
 
m_UtilityExec
JUMP_LABEL=END_JOB
;;
(END_JOB)
break
;;
(*)
m_RcSet ${MT_RC_ABORT:-S999} "Unknown label : ${CURRENT_LABEL}"
break
;;
esac
m_PhaseEnd
done
m_JobEnd
_DML_XMIT_TEST1
m_ProgramExec artjesadmin -i ${DD_SYSIN}
JUMP_LABEL=END_JOB
;;
(END_JOB)
break
;;
(*)
m_RcSet ${MT_RC_ABORT:-S999} "Unknown label : {CURRENT_LABEL}"
break
;;
esac
m_PhaseEnd
done
m_JobEnd
 
前述の例では、ジョブTEST1は現在のジョブによって送信され、JESのTuxedoサーバー・グループATLANTAに属するARTJESINITIATORによって実行されます。
ファイル・カタログ・サポート
この項の内容は次のとおりです。
概要
バッチ・ランタイムのファイル・カタログ・サポートにより、ユーザーはボリュームの下にあるデータセットにアクセスできます。ボリュームとはデータセット・キャリアであり、フォルダとして存在します。各データセットはボリュームに属する必要があります。
ファイル・カタログには、各データセットから各ボリュームへのマッピングが含まれています。メインフレームにある既存のカタログ化されたファイルを参照すると、ファイル・カタログがリクエストされてファイルが格納されているボリュームを検出してから、ファイルにアクセスします。
ファイル・カタログ機能が無効の場合、バッチ・ランタイムの動作は、この機能がないだけで他は変わりません。
データベース表
次の表は、バッチ・ランタイムによるファイル・カタログ機能の一般的な管理を示しています。この表では、各行が、ファイルとボリュームの1つのマッピングを表しています。
 
主キー: PK_ART_BATCH_CATALOG
構成変数
次の4つの構成変数をBatchRT.confに追加するか、環境変数として設定する必要があります。
MT_USE_FILE_CATALOG
これがyesに設定されると(MT_USE_FILE_CATALOG=yes)、ファイル・カタログ機能は有効です。それ以外の場合、この機能は無効です。
MT_VOLUME_DEFAULT
新しいデータセットの作成時にボリュームが指定されない場合、バッチ・ランタイムはMT_VOLUME_DEFAULTで定義されるボリュームを使用します。MT_VOLUME_DEFAULTには、1つのボリュームのみを含めます。たとえば、MT_VOLUME_DEFAULT=volume1と指定します。
MT_DB_LOGIN
この変数には、データベース・アクセス情報が含まれます。Oracleでは、この値はusername/password@sid (例: scott/tiger@gdg001)です。
Db2では、この値はyour-database USER your-username USING your-password (例: db2linux USER db2svr USING db2svr)です。
MT_CATALOG_DB_LOGIN
この変数には、ファイル・カタログ・データベースのアクセス情報が含まれます。その形式はMT_DB_LOGINと同じです。ファイル・カタログはデータベースに保存されているので、BatchRTはMT_DB_LOGIN、またはMT_CATALOG_DB_LOGIN経由でアクセスする必要があります。
ファイル・カタログへのアクセスの際、MT_CATALOG_DB_LOGINMT_DB_LOGINよりも優先されます。ファイル・カタログDBがデータDBと同じである場合、構成が必要なのはMT_DB_LOGINのみです。それ以外の場合、両方とも構成する必要があります。
外部シェル・スクリプト
CreateTableCatalog[Oracle|Db2].shまたはDropTableCatalog[Oracle|Db2].shを使用して、データベース表を新規作成または削除できます。
CreateTableCatalog[Oracle|Db2].sh
説明
データベースに表ART_BATCH_CATALOGを作成します。
使用方法
CreateTableCatalog[Oracle|Db2].sh <DB_LOGIN_PARAMETER>
サンプル
CreateTableCatalogOracle.sh scott/tiger@orcl
DropTableCatalog[Oracle|Db2].sh
説明
データベースから表ART_BATCH_CATALOGを削除します。
使用方法
DropTableCatalog[Oracle|Db2].sh <DB_LOGIN_PARAMETER>
サンプル
DropTableCatalogOracle.sh scott/tiger@orcl
外部依存関係
バッチ・ランタイムでファイル・カタログ機能を使用するには、ART Workbenchのファイル・コンバータおよびJCLコンバータがカタログ機能を有効にする必要があります。詳細は、『Oracle Tuxedo Application Rehosting Workbenchユーザー・ガイド』を参照してください。
REXX EXECの起動
MT_REXX_PATHの設定
MT_REXX_PATHのデフォルト値はありません。これは、すべてのREXX EXECが存在するメイン・パスで設定する必要があります。REXXプログラムを${MT_REXX_PATH}の下の適切なサブディレクトリに入れます。これらのサブディレクトリは、REXXプログラムのあるメインフレーム上のPDSに対応します。
REXX EXECの起動
SYSEXECが定義されている場合、BatchRTは、m_ProgramExecが実行するプログラムをREXX EXECとして受け入れます。
DD SYSEXECは、オブジェクトREXXプログラムの場所を示します。
TSOバッチ・コマンド
関連するREXXファイル(REXX APIとTSOコマンド)はすべて、Batch_RT/tools/rexxディレクトリに配置されます。そのディレクトリ構造は次のとおりです。
-- lib
/-- outtrap.rex
/ -- regis_tso_cmd
-- tso
/-- DELETE
/-- LISTDS
/- RENAME
/-- libTSO.so
TSOコマンドは、Batch_RT/tools/rexx/tsoにあります。REXX APIは、Batch_RT/tools/rexx/libディレクトリに保存する必要があります。
注意:
OracleおよびTimesTenデータベースへのCOBOLプログラムのアクセス
ART for Batchは、この機能で次のシナリオをサポートします。
環境変数を設定する
この機能を有効にするには、次の環境変数を設定する必要があります。
 
さらに、次の環境変数を設定する必要があります。
COBOLでのプログラミング
OracleデータベースへのすべてのEXEC SQL文で、接続名を指定する必要はありません。ただし、TimesTenへのすべての操作では、MT_TT_CONNに設定されているとおりにTimesTen接続名を指定する必要があります。
COBOLプログラムの前処理
この機能では、OracleデータベースまたはTimesTenデータベースにアクセスするすべてのCOBOLプログラムはTimesTen Pro*COBOLによって処理される必要があります。
サンプル
リスト3‑34 環境変数の設定の例
export MT_TT_CONN=TTNAME1
export MT_DB=ORA
export MT_DB_LOGIN=user1/pass1@oracle
export MT_DB_LOGIN2=user2/pass2@tt
export TIMESTEN_HOME=/opt/TimesTen/tt
export LD_LIBRARY_PATH=${TIMESTEN_HOME}/lib:${TIMESTEN_HOME}/ttoracle_home/instantclient_11_2:${LD_LIBRARY_PATH}
 
リスト3‑35 OracleデータベースにアクセスするCOBOLプログラムの例
EXEC SQL
SELECT B
INTO :H-VALUE-B
FROM ORATBL01
END-EXEC.
 
リスト3‑36 TimesTenデータベースにアクセスするCOBOLプログラムの例
EXEC SQL DECLARE TTNAME1 DATABASE END-EXEC.
EXEC SQL
AT TTNAME1
SELECT NAME
INTO :H-VALUE-NAME
FROM TTTBL01
END-EXEC.
 
リスト3‑37 COBOLプログラムの前処理の例
export LD_LIBRARY_PATH=${TIMESTEN_HOME}/ttoracle_home/instantclient_11_2;${TIMESTEN_HOME}/ttoracle_home/instantclient_11_2/sdk/procob sqlcheck=syntax lname=SELECTTT.lis iname=SELECTDB.pco oname=SELECTDB.cob
 
リスト3‑38 COBOLプログラムのコンパイルの例(CIT)
cobc -fthread-safe -m -g -G -fmf-gnt SELECTDB.cob -w -fixed -ffcdreg -lcitextfh -t SELECTDB.lst -conf=cit.conf
 
 

Copyright ©1994, 2017,Oracle and/or its affiliates. All rights reserved