一時ストレージの使用

CICS® では、一時ストレージが、複数のトランザクションで使用できる必要があるデータを格納するための主要な方式です。 一時ストレージ内のデータ項目は、データを格納するプログラムによって動的に割り振られる名前とともにキューに入れられます。一時ストレージは、主一時ストレージと補助一時ストレージという、2 つの異なる方法で実装されます。
  • 主は、キューが動的ストレージ域から取得されたスペースに保存されることを示します。
  • 補助は、キューが入力順 VSAM データ・セットに書き込まれることを示します。
主ストレージおよび補助ストレージには、以下の特性があります。
  • CICS は、主ストレージ内の項目の索引を保持します。
  • 主一時ストレージは、補助ストレージの場合より多くの仮想ストレージを必要とします。存続時間が短いか、または頻繁にアクセスされる、小さいキューに使用してください。
  • 補助一時ストレージは、長時間の保存が必要かまたはあまり頻繁にアクセスされない大量のデータ用に設計されています。
  • キューは、補助一時ストレージにリカバリーできます。
    注: 1 つのトランザクションのみが同時にリカバリー可能一時ストレージ・キューを更新できます。プログラムを設計するときに、エンキューの可能性に注意してください。また、競合を可能な限り削減するために十分な VSAM ストリングがあることを確認する必要もあります。
  • タスクが一時ストレージに書き込もうとしたがそのスペースが使用不可である場合、CICS はタスクを中断します。主ストレージまたは VSAM データ・セット内の必要なスペースを別のタスクが解放するまでは、タスクは再開されません。
  • Rational® COBOL Runtime for zSeries は、セグメント化 converse 中のプログラムに関する情報の保存、または show ステートメントを使用した転送中の書式のコピーの保存に、一時ストレージを使用します。 workDBType ビルド記述子オプションを使用して、主一時ストレージまたは補助一時ストレージのどちらを使用するかを指定できます。

EGL からの一時ストレージへのアクセス

CICS 環境用に生成された EGL プログラムは、シリアル・レコードまたは相対レコードとして CICS 一時ストレージにアクセスできます。一時ストレージにアクセスする場合、以下の I/O ステートメントが有効です。
  • add
  • close
  • delete
  • get
  • get next
  • get forUpdate
  • replace

プログラムを生成するときに、ファイルのリソース関連では、EGL ファイル・タイプが tempaux (補助ストレージ・ファイル) または tempmain (主ストレージ・ファイル) として指定されている必要があります。システム・リソース名 (systemName プロパティー) は、一時ストレージ・ファイルに関連付けられたキュー名です。

一時ストレージ・ファイルは、同時に 1 つのタスクでのみ使用できます。 EGL は、以下の CICS コマンドを生成します。
  • キューに最初にアクセスすると、EGL は、リソース名 EZETEMP-queuename に対して CICS ENQ コマンド (NOSUSPEND オプション) を使用してエンキューします。
  • ファイルが閉じられる (close ステートメントまたはプログラムの終了) とき、またはリカバリー可能リソースがコミットされるときに、EGL は CICS DEQ コマンドを使用してデキューします。

同じファイルにアクセスする非 EGL プログラムは、ファイルへのアクセス中に同じシステム・リソース名に対してエンキューする必要があります。

一時ストレージ内のレコードの前には追加バイトが追加され、レコードの状況を示します。
X'01'
レコードが論理的に削除されたことを示します。
X'00'
レコードが論理的にファイル内に存在することを示します。
追加バイトはレコード定義に追加され、Rational COBOL Runtime for z/Series によって管理されます。追加バイトを EGL レコード定義には含めないでください。ただし、一時ストレージ・ファイルが非 EGL プログラムによっても使用される場合は、EGL の場合と同様に、非 EGL プログラムは、そのバイト用のスペースを割り振り、そのバイトを解釈し、そのバイトを更新する必要があります。 追加バイトの処理は次のようになります。
add または replace
バイトは X'00' に設定されます。
delete
バイトは X'01' に設定され、レコード長は 1 に設定されます。
get next
値が X'01' であるレコードはスキップされます。
get または get forUpdate
値が X'01' のレコードでは、noRecordFound レコード状態が設定されます。
close ステートメントは、一時ストレージのファイルを削除しません。ファイルを削除するには、sysLib.purge() システム関数を使用します。EGL は、sysLib.purge() が使用されると、リソース名 EZETEMP-queuename に対して NOSUSPEND オプションを指定して CICS ENQ コマンドを生成することによりエンキューし、キューの削除後にデキュー (DEQ コマンド) します。