OP コマンド(ユーザーセッションの開始)

このドキュメントでは、次のトピックについて説明します。


機能および使用

OP コマンドは、ユーザーセッションの開始を示すために使用します。ユーザーが Adabas にまだ認識されていない場合は、ユーザーキューエレメントが新しく割り当てられ、ユーザーが CL コマンドを発行するまで存在し、Adabas またはオペレータによって終了します。

OP コマンドは、つぎのいずれかに該当する場合指定必須となります。

  • ユーザーが排他制御ユーザーの場合(Adabas コマンドの「概要」を参照)

  • ET コマンドで Adabas システムファイルに格納したユーザーデータを読み込む場合

  • ユーザーがアクセスオンリーユーザーの場合(更新コマンドは許されません)

  • ユーザーに特別な処理優先権を割り当てます。

現在のニュークリアスセッションにおいて、OPTION = OPEN_REQUIRED が使用できない場合の全ユーザーに対して、OP コマンドはオプションです。現在 Adabas に認識されていないユーザーが最初に Adabas コマンドを発行すると、Adabas は内部的に OP コマンドと同等の処理を行います。

セキュリティ保護されたファイルをアクセスするユーザーは、必ずしも OP コマンドを発行する必要はありませんが、そのセキュリティ保護されたファイルを呼び出すコマンドにはすべて、パスワードを指定しなければなりません。

OP コマンドがアクティブな ET ロジックユーザーから発行され、しかもそのユーザーが ET 状態でない(同時にホールド状態のレコードを持つ)場合は、Adabas がユーザーに対して BT コマンドを発行し、OP コマンドに対してレスポンスコード 9 を返します。OP コマンドが別のユーザータイプのアクティブなユーザーから発行される場合は、Adabas が、OP コマンド処理に先立って内部的に CL コマンドを発行します。

ユーザータイプ

Adabas は、ユーザーが行うアクセス/更新の種類によって、いろいろなユーザータイプを認識します。詳細については、「概念および機能」の「ユーザータイプ」を参照してください。

graphics/op_1.png

OP Command, Procedure Flow

graphics/op_2.png

OP Command, Procedure Flow (continued)

graphics/op_3.png

OP Command, Procedure Flow (continued)

コントロールブロック

Field フォーマット  
コールタイプ B F/U
予約(内部使用)   -/-
コマンドコード A F/U
コマンド ID B -/A
File Number B F/U (1)
Response Code B F/A (1)
ISN 下限 B F/A
ISN 数 B F/A
レコードバッファ長(ACB のみ) B F/U
コマンドオプション 1 A F/U
コマンドオプション 2 A F/U
アディション 1 A F/U
アディション 2 A、B -/A
アディション 5 A -/A
コマンドタイム B -/A
ユーザーエリア   F/U

バッファエリア

バッファ  
フォーマットバッファ */–
レコードバッファ F/U
サーチバッファ –/–
バリューバッファ –/–
ISN バッファ –/–
フォーマット:
A 英数字
B 2 進数
x/y Adabasコール前/後 - xとyは、値を取ることができます。
A Adabas によって設定
F ユーザーによって設定
U Adabas コール後も変更なし
- 使用しません
* 使用せず。ただし、コールステートメントのパラメータリストに含まれていなければならない。

(1)このフィールドの意味は、Call タイプに指定された値によって異なります。詳細については、「Adabas の呼び出し」の「コントロールブロック」を参照してください。

コントロールブロック

コマンドコード

OP

コマンド ID

アクセスオンリーユーザーの場合、Adabas は常にこのフィールドに 0 を返します。

ET ロジックユーザーの場合は、Adabas が、このユーザーの前セッションが CL コマンドで正常終了したか、前セッションがない場合にバイナリのゼロを返します。このユーザーが ID ユーザー(アディション 1 が空白でない)であり、現ユーザー ID の先行セッションが CL コマンドで正常終了しなかった場合は、Adabas が、最後に正常終了したユーザートランザクションのシーケンス番号を返します。さらに、レスポンスコード 9 も返ります。

ISN 下限

このフィールドは、ユーザーが非アクティビティタイムリミットを指定するために使用します。

このフィールドにバイナリのゼロが指定されている場合は、Adabas セッションの ADANUC パラメータ(TNAA、TNAE、TNAX)に指定されている、非アクティビティタイムリミットが有効となります。OP コマンドが正常終了した後、Adabas はこのフィールドに Adabas システムリリース情報を返します。これ以前にフィールドに表示されていたタイムアウト情報は、アディション 5 フィールドに返されます。

次のプラットフォーム情報が ISN 下限フィールドに返され、4 バイトのバイナリ値と見なされます。

バイト 内容
上位バイト

データベースのハードウェアアーキテクチャを表すアーキテクチャバイト:

ビット 0x01 設定済み:下位優先
ビット 0x01 未設定:上位優先

ビット 0x04 設定済み:EBCDIC
ビット 0x04 未設定:ASCII

ビット 0x20 設定済み:IEEE 浮動小数点
ビット 0x20 未設定:メインフレームの浮動小数点

これは以下を意味します。
インテルアーキテクチャ(Windows、Linux)のアーキテクチャバイトは 0x21 です。
UNIX(AIX、HPUX、Solaris)z/Linux のアーキテクチャバイトは 0x20 です。
メインフレーム Adabas のアーキテクチャバイトは 0x04 です。

  製品ライン:
2 = オープンシステム
  0
下位バイト ローカル/リモート指標(ローカルニュークリアス = 0、リモートニュークリアス = 1)
ISN 数

ユーザーがトランザクションタイムリミットを指定するために使用します。

このフィールドにバイナリのゼロが指定されている場合は、Adabas セッションの ADANUC に TT パラメータで指定されている非アクティビティタイムリミットが有効となります。OP コマンドが正常終了した後、Adabas はこのフィールドに Adabas システムリリース情報を返します。これ以前にフィールドに表示されていたタイムアウト情報は、アディション 5 フィールドに返されます。

次のバージョン情報が ISN 数フィールドに返され、4 バイトのバイナリ値と見なされます。

バイト 内容
上位バイト 主バージョン
  副バージョン
  SM レベル
下位バイト パッチレベル
Response Code

このフィールドには、コマンドに対するレスポンスコードが返されます。レスポンスコード 0 は、このコマンドが正しく実行されたことを示します。

レコードバッファ長(ACB のみ)

このフィールドには、レコードバッファ長を指定します。指定する長さは、必要な全レコードバッファエントリを格納するのに十分な長さである必要があります。レコードバッファが空の場合は、レコードバッファ長をゼロに設定する必要があります。

Adabas システムファイルに格納されたユーザーデータを取り出す場合は、指定する長さがレコードバッファにユーザーデータが入るだけの十分な長さでなければなりません。そうでない場合は、ユーザーデータの桁落ちが発生します。

コマンドオプション 1

このフィールドに R を指定すると、ユーザーがアクセス/更新するファイルを、レコードバッファに指定したファイルリスト内のファイルだけに制限することを示します。ファイルリスト内にないファイルへのアクセスまたは更新を試みると、レスポンスコード 17 が返されます。R を指定しないと、ファイルリスト内にないファイルのアクセス/更新要求は、後述の「ユーザーキューエレメント」に記述したとおりに処理されます。

このフィールドに「S」を指定すると、サブトランザクションのユーザーセクションが有効になります。ファイルリストが指定されている場合、このオプションは「R」オプションの意味になります。

コマンドオプション 2

このフィールドに E を指定すると、CL または ET コマンドで Adabas システムファイルに格納したユーザーデータがレコードバッファに返されることを示します。

ユーザーデータを指定した CL または ET コマンドのうち、最後に正しく実行されたコマンドのデータが返されます。

このオプションは、ユーザーセッション開始時に、ユーザーデータを格納したセッションと同一ユーザー ID を指定した場合に限り使用できます。

それ以外はすべて、このフィールドに空白をセットしなければなりません。

アディション 1

このフィールドは、ユーザーセッションにユーザー ID を指定する場合に使用します。

ユーザー ID は、ユーザーデータの読み込み/格納をしたい場合、さらに後続のユーザー、または Adabas セッション中にこのデータを使用可能としたい場合に、指定しなければなりません。

次のいずれかの場合は、ユーザー ID を指定する必要があります。

  • ユーザーはユーザーデータの格納、および/または読み込みをするつもりです。そしてユーザーは次のユーザーまたは Adabas セッションの間にこのデータが利用可能であることを望みます。

  • ユーザーは特別な処理プライオリティを割り当てられるはずです。

ユーザー ID の値は、このユーザーに対しユニークでなければならず(他のユーザーが使用していない)、また数字か大文字の値で開始していなければなりません。

上記以外のユーザーは、このフィールドを空白にセットしなければなりません。

アディション 2

コマンドが正しく実行されると、Adabas がこのフィールドに返す値は、ユーザータイプによって異なります。

アクセスオンリーユーザー: 入力値は変わりません。
ET ロジックユーザー: 返る値は、ユーザーデータが格納された、ユーザーが最後に正常終了したトランザクションの ISN です。これが最初のセッションである場合、または ID ユーザーセッションでない場合は、値 0 が返ります。

このフィールドには、一部のレスポンスコードについて詳細情報が返されます。詳細については、『Adabas メッセージおよびコードマニュアル』を参照してください。

アディション 5

ユーザーが ISN 下限フィールドおよび ISN 数フィールドに指定したタイムアウト値は、アディション 5 フィールドの後半 4 バイトに返されます。上位 2 バイトには、ユーザーが指定した非アクティビティタイムリミットがバイナリ形式で含まれ、下位 2 バイトには、ユーザーが指定したトランザクションタイムリミットがバイナリ形式で含まれます。

レコードバッファ

W フィールドのデフォルトエンコード、ローカルタイムゾーン、アクセスや更新の対象ファイル、および実行する更新の種類を、このバッファに指定します。

このバッファの構文形式は以下のとおりです。

[OP_expression,...].

OP_expression は次のいずれかです。

OP_expression 説明
TZ=’timezone’ Olson データベースとしても知られている tz データベースに含まれるタイムゾーンの名前を timezone に指定する必要があります(https://www.iana.org/time-zones)。ロケーションのフルネームを指定する必要があります。例:
America/New_York
WCHARSET=’char_set’ http://www.iana.org/assignments/character-sets にリストされているエンコーディング名を char_set に指定する必要があります。このリスト内の文字セットのほとんどは、ICU でサポートされています。Adabas は、ICU を使用して国際化をサポートしています。この文字セットは、フォーマットバッファやサーチバッファに他の文字セットが指定されていないときに、Adabas ユーザーセッションのレコードバッファやバリューバッファの W フィールドに使用されるデフォルトの文字セットです。
一部の文字セットは、プラットフォーム依存です(UTF-16 など)。対応するプラットフォームに依存しない文字セット、つまり、UTF-16 の代わりに UTF-16BE や UTF-16LE を使用することを強く推奨します。そうでなければ、Adabas は、どの改良型が使用されるかを保証できません。
usage=file_list ここで、usage は次のいずれかになります。
  • ACC または ACCESS:ファイルはアクセスのみになります。

  • UPD または UPDATE:ファイルは更新されます(ET ロジックを意味します)。UPD または . を指定すると、ユーザーは ET ロジックユーザーになります。

  • EXF:ファイルはユーザーの排他制御の下で開かれます。このユーザーセッションがアクティブな間、他のユーザーはファイルにアクセスできません。他のアクティブなユーザーがそのファイルに ACC、EXF、EXU、または UPD パラメータを指定して、OP コマンドを出していなければ、排他制御が与えられます。

  • EXU:ファイルはユーザーの排他制御の下で更新されます。このユーザーセッションがアクティブな間、他のユーザーはファイルを更新できません。他のアクティブなユーザーがそのファイルに EXF、EXU、または UPD パラメータを指定して、OP コマンドを出していなければ、排他制御が与えられます。

file_list の構文は以下のとおりです。
filenumber [,filenumber] ...
ここで、filenumber は、先行するキーワードが適用される Adabas ファイルを示す番号(先行ゼロを許容)です。

TZ および WCHARSET は一度しか指定できません。

特定の usage キーワード内で、ファイル番号が重複していてもかまいません。複数の usage キーワード間で、ファイル番号が重複していてもかまいません。各 usage キーワードは 1 回だけ指定できます。

UPD、EXF、および EXU は、ファイルのアクセスも暗黙的に含んでいます。ACC または UPD が唯一の指定キーワードである場合、ファイルリストは必要ありません。

次のキーワードの組み合わせが使用可能です。

  • ACC + EXF

  • ACC + EXU

  • ACC + UPD

  • EXF + UPD

  • EXU + UPD

  • ACC + EXF + UPD

  • ACC + EXU + UPD

ユーザーまたは Adabas ユーティリティ(UTI で表される)によって現在使用中のファイルを別のユーザーが使用できる場合とできない場合を下記に示します。

ユーザー 2 使用を要求する ユーザー 1 現在使用している
ACC EXF EXU UPD UTI
ACC × ×
EXF × × × × ×
EXU × × × ×
UPD × × ×
UTI* × × × × ×

* ユーティリティには、ユーティリティ実行中に他のユーザーがファイルにアクセスできるものもあります。この場合、ユーティリティは、指定した EXU パラメータを使用して OP コマンドを発行します。

キーワードを指定しない(レコードバッファは . に設定されている)場合、ユーザーは自動的に ET ロジックユーザーになります。この場合、Adabas コントロールブロックでレコードバッファ長をゼロに設定できるため、レコードバッファを用意する必要はありません。

ユーザーキューエレメント

ユーザーがアクティブの間、Adabas はそのユーザーに対するユーザーキューエレメント(UQE)を保持します。UQE は、ユーザーが現在使用中のファイルを示すファイル番号リストを持ちます。ファイルリストは、ユーザーが OP コマンドを出したときに生成され、ユーザーセッション中に変更されることもあります。OP コマンドが発行されていない場合、ファイルリストにはファイルは記載されていません。

ファイルリストの中の各ファイルは、次のいずれかに区分されます。

  • ACC アクセスのみ

  • EXF 他のすべてのユーザーに対して読み取り/書み込み保護

  • EXU アクセスおよび更新(排他的制御下)

  • UPD アクセスおよび更新

  • UTI アクセスおよび更新(Adabas ユーティリティにより使用)

後で、現在はユーザーファイルリストにないファイルにアクセスしようとすると、そのファイルが現在 Adabas ユーティリティで使用中かどうかがチェックされ、使用中でない場合は、そのファイルがユーザーのファイルリストに追加され、ACC とマークされます。

後で、現在はユーザーファイルリストにないファイルを更新しようとすると、以下のチェックが行われます。

  • 要求とユーザータイプが矛盾していないかどうか。例えば、アクセスオンリーユーザーが更新コマンドを発行してはならない。

  • OP コマンドのコマンドオプション 1 フィールドに R が指定されているために、ユーザーのファイルリストが制限されているか?

  • 対象ファイルが別のユーザーまたは Adabas ユーティリティによる排他制御の下で更新されるかどうか。

ファイルがそのユーザーに使用可能であると判断されると、そのファイルはユーザーのファイルリストに追加され、UPD とマークされます。

同ユーザーの前セッションを終了するための OP の使用

次の特殊機能は、ニュークリアスが OPTIONS=OPEN_REQUIRED で開始した場合に限り、有効になります。

例えば、電源を切り、PC をリブートするなどして、ユーザーセッションが CL(CLOSE)コマンドを使用しないで終了する場合、Adabas ニュークリアスは、まだ接続したままであるとみなします。ユーザーが同じユーザー ID で新しいセッションを開始しようとすると、ニュークリアスは新しいプロセス ID のために、この OP コマンドを異なるユーザーから発行されたように扱い、ユーザーにレスポンスコードを返します。

ただし、このユーザーが新しいセッションを開始し続け、最初のセッションが指定した時間枠(約 60 秒)の間、非アクティブのままである場合は、最初のセッションが終了します。この結果、最初のセッションのバックアウトトランザクションコマンド(BT)が発生します。そして、このユーザーの第 2 セッションを開始できます。その間に、最初のセッションが別のコマンドを発行する場合は、レスポンスコード 9 が最初のセッションに対して返され、OPEN REQUIRED を示す情報がコントロールブロックのアディション 2 フィールドに追加されます。詳細については、『メッセージおよびコードマニュアル』のレスポンスコード 9、アディション 2 フィールドの OPEN REQUIRED の値を参照してください。

例 1:アクセスオンリーユーザー(文字セット UTF-16BE を使用)

W フィールドに文字セット UTF-16BE を用いて、アクセスオンリーユーザーセッションをオープンします。

コントロールブロック

Command Code          OP
Record Buffer Length  24 (or larger)

バッファエリア:

Record Buffer         WCHARSET='UTF-16BE',ACC.

例 2:ET ロジックユーザー

ユーザーセッションをオープンし、そのセッション中でファイル 8 と 9 にアクセスし、ファイル 8 と 16 を更新します。また、セッション中にユーザーデータを Adabas システムファイルに格納します。前のセッションで格納されたユーザーデータも読みます。このユーザーのユーザー ID は USER0001 です。

コントロールブロック:

Command Code          OP
Record Buffer Length  15 (or larger)
Command Option 2      E (user data is to be read)
Additions 1           USER0001 (USERID is required if user data
                                is to be stored and/or read)

バッファエリア:

Record Buffer         ACC=9,UPD=8,16.

例 3:ET ロジック未使用排他制御ユーザー

ファイル 10、11、および 12 を排他制御で扱うユーザーセッションをオープンします。ユーザーは ET コマンドを発行せず、Adabas システムファイルから/内にユーザーデータを格納せず、読み込みません。

コントロールブロック:

Command Code          OP
Record Buffer Length  13 (or larger)
Command Option 2      b (user data is not to be stored or read)
Additions 1           bbbbbbbb (USERID is not required)

バッファエリア:

Record Buffer         EXU=10,11,12.

例 4:排他制御更新ユーザー

ファイル 10、11、および12 を排他制御で扱うユーザーセッションをオープンします。ユーザーは ET コマンドを発行します。

コントロールブロック:

Command Code          OP
Record Buffer Length  26 (or larger)
Command Option 2      b (user data is not to be stored or read)
Additions 1           bbbbbbbb (USERID is not required)

バッファエリア:

Record Buffer         EXU=10,11,12,UPD=10,11,12.

例 5:ユーザー定義タイムアウトの値

ファイル 5 および 7 を更新するつもりのユーザーセッションをオープンします。ユーザー ID は USER0002 です。ユーザーセッションは、タイムアウト値 TNAE=30(分)および TT=10(分)で稼動します。

コントロールブロック:

Command Code          OP
Record Buffer Length  8
ISN Lower Limit       1800  (1800 seconds = 30 minutes)
ISN Quantity          600   (600 seconds = 10 minutes)
Additions 1           USER0002

バッファエリア:

Record Buffer         UPD=5,7.