注意:
UEX2 および UEX12 は、Adabas
ニュークリアスセッションでは相互に排他的であり、指定できるのはどちらか一方だけです。
このユーザー出口は、マルチログデータセットの切り替え時に、Adabas ニュークリアスから制御を受け取ります。これは、切り替える前のログデータセットを Adabas が再び使用する前に、そのログデータセットをコピーすることが目的です。 この切り替えは、マルチデータセットのデータプロテクションログと、マルチデータセットのコマンドログのいずれか、または両方がセッションで有効な場合にのみ実行されます。
ユーザー出口ルーチンの役割は、ADARES ユーティリティの該当機能(CLCOPY または PLCOPY)を実行するためのプロシージャを起動することです。
ユーザー出口 12 は、次の場合に起動されます。
マルチ PLOG/CLOG データセットをコピーする必要がある場合に、Adabas ニュークリアスが起動されたとき
ログデータセットが切り替えられたとき
Adabas ニュークリアスのシャットダウン中
ユーザー出口には、ログのタイプ(PLOG または CLOG)と、マルチログデータセットのステータスに関する情報が渡されます。
ユーザー出口は、次のうちいずれかの処理を実行できます。
コールを無視し、Adabas が処理を継続できるように制御を返す
格納スペースがなくなったログデータセットをコピーするジョブをサブミットし、コピー元のログデータセットを空のデータセットとして扱う(ADARES ユーティリティ)
指定時間だけ待機し、PLOG/CLOG データセットのステータス情報を更新して、ユーザー出口を再度コールするように Adabas に指示する 待機状態の間、処理対象のログタイプに応じたログレコードを生成する可能性があるコマンドは、処理できません。
ユーザー出口 12 のサンプルは、Adabas のインストール手順を実行すると作成されます。 詳細は、『Adabas インストールマニュアル』を参照してください。
ユーザー出口が、標準の BASSM R14,R15 アセンブラ命令を使用してコールされます。 すべてのレジスタは、制御が受け取られときに保存され、Adabas に制御を返す直前にリストアされる必要があります。 他のセクションで説明しているように、レジスタ 15 にはアクションコードが格納されます。
注意:
ユーザー出口 12 は、ユーザー出口のコール時にアクティブだったものと同じ AMODE 値をコール元プログラムに返す必要があります。
値を返すアセンブラ命令としては、BSM 0,R14 が適しています。
このドキュメントでは、次のトピックについて説明します。
必要に応じて、ユーザー出口は、それ自体の処理を初期化することができます。 また、ユーザー出口は、そのリソースの状態を記録するために、EX12PARM パラメータブロックのフィールド EX12USER に、任意の値を格納することもできます。 このフィールドは、ユーザー出口が専用で使用するフィールドとして扱われますが、その出口の後続の処理でも使用することができます。 出口が初めてコールされたときに、このフィールドはゼロに設定されますが、それ以降は変更されることはありません。
終了時は、必要な後処理を行うために、ユーザー出口が再度コールされます。
MACRO EX12PARM .********************************************************************** .* * .* Name Ex12Parm * .* * .* Component ADABAS User Exit * .* * .* Function Parameter list for User Exit 12 * .* (replacement for User Exit 2 for use when there are * .* more than 2 PLOGs or CLOGs) * .* * .* Parameters None * .* * .* Restrictions None * .* * .* Notes None * .* * .********************************************************************** .* EX12PARM DSECT , User Exit 12 Parameter List * EX12HDR DS 0F Common header section * EX12USER DS F Reserved for the user. This field + is initialized to zero before the + exit is called the first time, and + will not be altered by ADABAS after + that. It can be used to maintain + information across invocations. * EX12LOGT DS X Log type EX12PLOG EQU C'P' PLOG EX12CLOG EQU C'C' CLOG * EX12TYPE DS X Call type EX12TBEG EQU C'S' Nucleus start EX12TSW EQU C'W' Log switch EX12TEND EQU C'T' Nucleus termination DS XL2 Reserved * EX12NLOG DS F Number of logs EX12DBID DS F Database ID EX12NUCI DS F Nucleus ID * EX12PLGN DS F Current session PLOG number + (zero for CLOGs) EX12NCMP DS F Log just completed EX12STAT DS X Flags of next log in sequence EX12WNUC EQU X'80' Being written by the nucleus EX12FULL EQU X'40' Completed by the nucleus EX12RES EQU X'20' Being copied by ADARES EX12CL5 EQU X'08' CLOGLAYOUT=5 EX12UNUS EQU X'00' Unused and/or copied DS XL3 Reserved DS 4F Reserved * EX12HDRL EQU *-EX12HDR Length of header section * EX12ENT DSECT , EX12LOG DS 0F Start of individual log data set + entries. This section is repeated + for the number of logs specified in + field EX12NLOG * EX12LTIM DS XL8 Time stamp of write to log data set EX12LNUM DS F Number of log data set EX12LFLG DS X Flags (mapped as in EX12STAT) DS XL3 Reserved DS 4F Reserved * EX12LOGL EQU *-EX12LOG Length of a log data set entry * * MEND
パラメータ | 使用方法 |
---|---|
R15 = 0 | ニュークリアスは処理を続行します。 |
R15 > 0 | R15 の値は、ユーザー出口 12 を再度コールするまでの待機時間の秒数として扱われ、その間、すべてのログデータセットのステータスが最新のまま維持されます。 待機状態の間は、ログエントリを作成する可能性があるコマンドは、処理できません。 |
サンプルのユーザー出口は、アセンブラ言語で記述されています。 このサンプルの機能は次のとおりです。
コールされたログの用途とタイプを示すメッセージを発行します。
空ではないすべてのログデータセットのステータスとタイムスタンプを示すメッセージを発行します。
格納スペースのないログデータセットが存在し、出口が最後にコールされたときとステータスが異なるログデータセットが 1 つでもある場合は、出口は 80 バイトのレコードを入力ファイルから読み込み、出力ファイルに書き込みます。 ? という文字のオカレンスはすべて、PLOG イベントと CLOG イベントのどちらを処理するために出口が起動されたのかによって、P または C に置き換えられます。 したがって、ログタイプに応じたイベントに基づいて、入力ファイルは正しく処理されます。 通常、入力ファイルにはジョブ制御ステートメントが存在し、出力ファイルの出力先はジョブ実行キューになります。
格納スペースが残っているログデータセットが 1 つでもあれば、出口はコール元に戻り、R15 をゼロに設定するので、Adabas は処理を継続します。
どのログデータセットにも格納スペースがない場合、出口はコール元に戻りますが、R15 をゼロ以外に設定するので、Adabas は R15 の秒数だけ待機し、待機時間が終わると、ログデータセットのステータスを最新のまま維持した状態で出口を再びコールします。 デフォルトの待機時間は 30 秒です。
z/OS では、付属のサンプルユーザー出口 UX12SAMP の形式は、ソースとロードモジュールです。どちらも変更や再アセンブルせずに、そのまま使用することができます。
ユーザー出口のソースとロードモジュールは、それぞれ Adabas ソースとロードライブラリに収録されています。 ユーザー出口 UX12ASML をアセンブルするジョブは、Adabas ジョブライブラリに収録されています。 また、ジョブライブラリには、サンプルジョブ UX12CJOB も収録されており、カスタマイズしたり、ADARES ユーティリティの PLCOPY または CLCOPY 機能を起動するユーザー出口からサブミットしたりできます。
サンプルユーザー出口を次のようにしてアクティブにします。
ADARUN NxLOG={2-8} の他に、Adabas ニュークリアスに ADARUN UEX12=UX12SAMP を指定します。
ユーザー出口から DDNAME COPYJOB 配下のジョブをサブミットできるように、ジョブ制御モデルを設定してください。
DD ステートメントは次のように指定します。
//INTRDR2 DD SYSOUT=(*,INTRDR)
注意:
PLCOPY または CLCOPY ジョブをサブミットするときに使用する DD ステートメントは、サンプルのユーザー出口 2
でもユーザー出口 12 でも同じです。
VSE では、付属のサンプルユーザー出口 UX12SAMP の形式はソースとフェーズです。どちらも変更や再アセンブルせずに、そのまま使用することができます。
ソース A.book とフェーズは、Adabas VSE サブライブラリに収録されています。 ユーザー出口 UX12ASML.X をアセンブルするジョブは、Adabas サブライブラリにも収録されています。 また、サンプルジョブ UX12CJOB.X も収録されており、カスタマイズしたり、ADARES ユーティリティの PLCOPY または CLCOPY 機能を起動するユーザー出口からサブミットしたりできます。
サンプルユーザー出口を次のようにしてアクティブにします。
ADARUN NxLOG={2-8} の他に、Adabas ニュークリアスに ADARUN UEX12=UX12SAMP を指定します。
ユーザー出口から DLBL COPYJOB 配下のジョブをサブミットできるように、ジョブ制御モデルを設定してください。
BS2000 では、付属のサンプルユーザー出口 UX12SAMP の形式は、ソースとオブジェクトモジュールです。どちらも変更や再アセンブルせずに、そのまま使用することができます。
ユーザー出口のソースは、Adabas ソースライブラリに収録されています。 ユーザー出口 UX12ASML をアセンブルするジョブは、Adabas ジョブライブラリに収録されています。 また、ジョブライブラリには、サンプルジョブ UX12CJOB も収録されており、ADARES ユーティリティの PLCOPY または CLCOPY 機能を起動する UX12SAMP からサブミットすることができます。
サンプルユーザー出口を次のようにしてアクティブにします。
ADARUN NxLOG={2-8} の他に、Adabas ニュークリアスに ADARUN UEX12=UX12SAMP を指定します。
マシンがジョブ変数を処理できる場合は、Adabas ニュークリアスジョブに次のステートメントを入力してください。
/SET-JV-LINK LINK-NAME=*DDJBDSF,- / JV-NAME=#JV.DSF /MODIFY-JV JV-ID=JV-NAME(JV-NAME=#JV.DSF),- / VALUE='ENTER-JOB FROM-FILE=*LIB-ELEM(,- /LIB=library,ELEM=dsfjob),- /JOB-CLASS=JCDSF'
ここでは次の内容を表しています。
library | ライブラリ |
dsfjob | 手順 2 でカスタマイズしたジョブが存在するメンバ |
マシンがジョブ変数を処理できない場合は、次のジョブがサブミットされます。
(ADABAS.SRC,UX12CJBP,J)
PLCOPY ジョブの場合は上記のとおりです。
(ADABAS.SRC,UX12CJBC,J)
CLCOPY ジョブの場合は上記のとおりです。
データベース ID をパラメータとして指定するサンプルジョブは、Adabas ソースライブラリ ADAvrs.SRC に収録されています。
このジョブでは目的を果たせない場合は、付属のソース UX12SAMP を修正してください。
BS2000 システムのユーザー出口 12 を使用している場合には、従来のリリースと異なり、ADARES CLCOPY または PLCOPY ジョブの名前はユーザー出口にハードコードされていません。 したがって、次に説明するように、/ENTER ジョブを指定する方法が 2 つあります。
完全な /ENTER ジョブコマンドを含むジョブ変数を作成します。 例としては、次のようなものがあります。
/DCLJV ENTER.ADARES.PLCOPY,LINK=*DDJBPLC /SETJV *DDJBx12,C'ENTER-PROC(srclib,ux12cjbx),(DB=dbid),J-N=X12COPY'
ここでは次の内容を表しています。
srclib | UX12CJBx(J) が収録されているライブラリです。x は、PLCOPY ジョブの場合には P、CLCOPY ジョブの場合には C にそれぞれ置き換わります。 |
ux12cjbx | それぞれのプロシージャジョブの J 要素名です。 |
dbid | このニュークリアスのデータベース ID です。 |
/ENTER コマンドのすべてのオペランドを使用できます。 /DCLJV ステートメントを指定すると、他の指定よりも優先されます。 必要な場合は、ニュークリアスセッション中にジョブ変数の内容を変更できます。
リンク名 *DDJBPLC を使用して ADARES PLCOPY ジョブを割り当て、*DDJBCLC を使用して ADARES CLCOPY ジョブを割り当てます。
JV 指定を省略します。 ユーザー出口 12 は、次のコマンドを発行するようになります。
'ENTER-PROC RES.EPdbid.xLCO,(DB=dbid),J-N=xL12<dbid>'
データベースを起動する前に、データベースのジョブデッキからジョブ要素を抽出する場合には、次のコードを使用します。
/DELETE-FILE RES.EPdbid.CLCO /SET-JOB-STEP /DELETE-FILE RES.EPdbid.PLCO /SET-JOB-STEP /ASS-SYSDTA *SYSCMD /STA-LMS //O srclib //EXT-E (,ux12cjbc,J),RES.EPdbid.CLCO //EXT-E (,ux12cjbp,J),RES.EPdbid.PLCO //END /ASS-SYSDTA *P
ここでは次の内容を表しています。
dbid | P/CLCOPY データベースのデータベース ID です。この ID は、プロシージャでは &DBID. になります。 |
srclib | テンプレートのコピープロシージャが収録されているソースライブラリです。 |
ux12cjbc | 出口 12 の ADARES CLCOPY ジョブを実行するプロシージャです。 |
ux12cjbp | 出口 12 の ADARES PLCOPY ジョブを実行するプロシージャです。 |
注意:
BS2000 システムの場合、ユーザー出口 12 の供給形態は、ソース要素およびオブジェクト要素の両方です。