VSAMデータセット

本章では、VSAMデータ形式、VSAMデータセットの種類、代替索引とスフィアおよびVSAMデータセットの管理方法について記述します。

1. 概要

1970年代に、IBMは3つのデータセット構造(順次・索引・直接アクセス)を統合した新しいアクセス方式と関連ユーティリティ・プログラムを開発しました。この新しいアクセス方式は、その当時、仮想記憶オペレーティング・システム(Virtual Storage Operating System)であるOS/VS1、OS/VS2と関連付けされ、VSAM(Virtual Storage Access Method、仮想記憶アクセス方式)と呼ばれることになります。

VSAMは、データの格納や検索に使用される技術であるアクセス方式の1つです。VSAMは、GET/PUTインターフェースを使用して、ディスク・デバイスとアプリケーション間でデータを送受信します。すべてのVSAMデータセットはカタログに登録される必要があり、テープ・デバイス・ボリュームには格納できません。

OpenFrameでは、VSAMに対応する製品としてTSAMをサポートしています。TSAMは、下部ストレージ技術としてデータベースを使用します。TSAMクライアントとサーバーの間では別のTSAMプロトコルを使用しているため、SQLオーバーヘッドがありません。また、大量のバッチ処理のための適切な通信プロトコルを実装するなど、性能向上を図っています。

2. VSAMデータ形式

VSAMデータセットに保存されるデータ構造は、論理レコード単位でソートされます。論理レコードは、VSAMインターフェースを介してユーザーに渡される、ユーザー・レコードです。

VSAMデータセットでの論理レコードの格納方式は、非VSAMデータセットとは異なります。VSAMは、レコードを制御インターバル(Control Interval)に格納します。制御インターバルとは、VSAMがデータ・レコードとレコード制御データを格納するディスク・デバイスの連続的な領域です。VSAMレコードを読み取るときは、そのレコードが含まれている制御インターバル全体をメモリにあるVSAM入出力バッファーに読み込みます。

制御インターバル

各VSAMデータセットの制御インターバルのサイズはそれぞれ異なりますが、1つのデータセットにあるすべての制御インターバルのサイズは同じです。アクセス方式サービスのDEFINEコマンドを使用して、VSAMデータセットの制御インターバルのサイズを指定することができます。

figure 3 1
制御インターバル

制御インターバルは以下の要素で構成されています。

  • 論理レコード(Logical Records)

  • 空き領域(Free Space)

  • 制御情報(Control Information)

    制御情報は、1つのCIDF(Control Interval Definition Field:制御インターバル定義フィールド)と、1つまたはそれ以上のRDFs(Record Definition Fields:レコード定義フィールド)から構成されます。CIDFは4バイトであり、空き領域のサイズと位置が記録されます。RDFsは3バイトであり、各レコードのサイズ・データが格納されます。

以下は、制御インターバルで使用する主要用語についての説明です。

用語 説明

制御領域(Control Area)

VSAMデータセットの連続的な制御インターバルをまとめて制御領域といいます。実際、VSAMデータセットは1つまたはそれ以上の制御領域から構成されています。1つの制御領域内にある制御インターバルの数は、VSAMによって決定されます。

スプリット(Splits)

空き領域がない制御インターバルにレコードを追加する場合、該当する制御インターバルではスプリットが発生します。該当する制御インターバルに格納されていたレコードの半分程度が別の制御インターバルに移され、新規レコードは元の制御インターバルに追加されます。

スパン・レコード(Spanned Records)

スパン・レコードは、制御インターバルのサイズより大きいレコードです。VSAMデータセットを定義するときに、SPANNEDパラメータを使用して1つのレコードが複数の制御インターバルにまたがって格納されるようにします。

データ・レコードのサイズが頻繁に変更されるデータセットや、平均レコードのサイズが制御インターバルのサイズより大きいデータセットでスパン・レコードを使用すると、ディスク容量の無駄な使用を軽減することができます。

コンポーネント

VSAMデータセットを構成する個別パートをコンポーネントといいます。データ・コンポーネントと索引コンポーネントの2種類があります。

KSDS/VRDSは、データ・コンポーネントと索引コンポーネントを持っており、ESDS/RRDSは、データ・コンポーネントのみを持っています。

クラスター

クラスターは、最大2つで構成された関連コンポーネントの集合です。すべてのVSAMデータセットはクラスターとして定義されます。KSDSは、1つのクラスターは、1つのデータ・コンポーネントと1つの索引コンポーネントから構成されます。

RRDS/ESDSは、索引コンポーネントがないクラスターとみなされますが、一貫性を保つために、データセットを処理するときにクラスター名が使用されます。

OpenFrameでは、TSAMの下部ストレージの技術としてリレーショナル・データベースを使用しているため、前述の制御インターバルや制御領域などの技術は使用されません。

以下は、OpenFrame TSAMでVSAMデータセットをサポートするために使用されるデータベースの要素です。

Mainframe VSAM OpenFrame TSAM 説明

ストレージ・ボリューム

表領域

ボリュームを表領域にマッピング

クラスター

クラスターを1つの表にマッピング

レコード

1レコードを1行にマッピング

3. VSAMデータセットの種類

VSAMは、索引、レコード番号、あるいは相対アドレスの順にデータ・レコードを格納、処理します。また、固定長レコードと可変長レコードに対する順次処理と直接処理も行うことができます。

VSAMは、以下の4つの方式でデータセットを構成します。

方式 説明

KSDS(Key Sequenced Data Set、キー順データセット)

キー順のデータセットです。

ESDS(Entry Sequenced Data Set、入力順データセット)

入力順のデータセットです。

RRDS(Relative Record Data Set、相対レコード・データセット)

レコード番号別のデータセットです。

RRDSは、レコードの長さによって以下の2つに分けられます。

  • RRDS(Fixed-length Relative Record Data Set): 固定長RRDS

  • VRDS(Variable-length Relative Record Data Set): 可変長RRDS

LDS(Linear Data Set、線形データセット)

線形データセットです。

TSAMではLDSはサポートしていません。

日立メインフレームでは、LDS形式をFDS(Flat Data Set)形式に分類します。

3.1. KSDS(キー順データセット)

KSDS(Key Sequenced Data Set)のレコードは、レコードのキー順にデータセットに格納されます。

KSDSのキーは、レコードの特定のフィールドであり、以下の特性があります。

  • すべてのレコードのキーの長さと位置は同じです。

  • 同じキー値を持つ2つ以上のレコードは格納できません。

  • キー値が格納された後は、レコードのキー値を変更できません。

KSDSは、固定長レコードと可変長レコードの両方をサポートします。新規レコードを追加する場合、キー値の昇順で適切な位置に挿入されます。

KSDSを効率的に管理するために、VSAMはデータセットにデータを格納するデータ・コンポーネントと、キー値の順にレコードに迅速なアクセスを可能にする索引コンポーネントを作成します。

3.2. ESDS(入力順データセット)

ESDS(Entry Sequenced Data Set)は、レコードが入ってくる順に格納されるという点で非VSAMデータセットと似ており、新規レコードはデータセットの最後に追加されます。

ESDSに格納されたレコードは削除できません。ただし、削除するレコード内容の一部に削除の印を付ける方法で、当該レコードをアプリケーションで論理的に削除することができます。

ESDSではレコードの更新は可能ですが、レコード長の変更はできません。レコード長の変更が必要な場合は、アプリケーション・レベルでレコード削除の印を付け、新しい長さのレコードをデータセットの末尾に追加する方法を使用します。ただし、データセットが使用されるアプリケーションでこのような処理が頻繁に行われることが予想される場合は、最初からKSDSを使用することをお勧めします。

ESDSは、索引コンポーネントは含まれていませんが、代替索引を使用することは許可されています。代替索引については、代替索引とスフィアを参照してください。

3.3. RRDS(相対レコード・データセット)

固定長レコードのためのRRDS(Relative Record Data Set)は、レコードを事前に区画されたスロットに格納します。各スロットには番号が付けられ、レコードはレコードに付けられた番号に該当するスロットに格納されます。RRDSの1つのデータ・ブロックには、複数の固定長スロットが作成されます。

データ・ブロックのサイズは、(レコードの固定長 x1ブロックに格納できるレコード数 + ブロック管理に使用されるオーバーヘッドのサイズ)のように指定してください。そうでない場合、RRDSの内部に使用できないスペースが生じます。ただし、このスペースは1つの固定長レコードより大きくなることはないため、クリティカルな問題が生じることはありません。

RRDSは固定長でレコードを格納するため、レコード番号が分かれば、簡単な計算でそのレコードの位置を検索でき、データ・レコードに効率的にアクセスすることができます。ただし、格納されているレコードの長さが固定されている点や、レコード番号でデータ・レコードを区別するという概念が、アプリケーションのドメインに適していない場合が多いため、管理するオブジェクト数が限定されている特別な場合に限って使用されます。

3.4. VRDS(可変長データセット)

VRDSは、可変長レコードを格納するRRDSです。ユーザーの観点からは、VRDSとRRDSは同じ方式で使用できます。すなわち、使用できるアクセス方式とレコードの指定に使用される引数が同じです。しかし、VSAMの内部から見ると、VRDSデータセットは、KSDS(キー順データセット)のように、索引コンポーネントとデータ・コンポーネントを使用してレコードを管理しています。

索引コンポーネントが必要な理由は、レコードの長さが固定されていないため、レコード番号だけではレコードが格納されている位置を容易に検索できないためです。一方、KSDSの管理と異なる点は、KSDSは索引コンポーネントのキーにレコードの一部であるキー領域を使用するのに対し、VRDSではレコードとは別にユーザーが提供するレコード番号を索引コンポーネントのキーとして使用しています。索引レコードの索引情報は、KSDSと同じレコードの先頭アドレスの位置(相対バイト・アドレス:RBA)を使用します。

OpenFrameではRRDSで固定長・可変長レコードをすべて処理するので、VRDSはサポートしません。

4. VSAMデータセット名

VSAMデータセットは、クラスター名とコンポーネント名を指定して作成することができます。

OpenFrameシステムでVSAMデータセットを作成するとき、クラスター名のみ指定し、コンポーネント名を指定しない場合は、コンポーネントの命名規則に従って名前を作成します。

コンポーネント名は次の3つの規則に従って指定されます。

  • クラスターの最後の名前セグメントが「CLUSTER」の場合

    • 最後の名前セグメントをデータ・コンポーネントは「DATA」に変更

    • 索引コンポーネントは「INDEX」に変更

    以下の例は、クラスターの名前が「TMAX.TEST.KSDS01.CLUSTER」の場合に、規則に従って生成されたデータ・コンポーネント、索引コンポーネントの名前を示します。

    クラスター名   : TMAX.TEST.KSDS01.CLUSTER
    データ・コンポーネント : TMAX.TEST.KSDS01.DATA
    索引コンポーネント : TMAX.TEST.KSDS01.INDEX
  • クラスター名の長さが38字より小さいか等しい場合

    • データ・コンポーネントは「.DATA」を追加

    • 索引コンポーネントは「.INDEX」を追加

    以下の例は、クラスターの名前が「TMAX.TEST.KSDS01.INFO」の場合に、規則に従って生成されたデータ・コンポーネント、索引コンポーネントの名前を示します。

    クラスター名   : TMAX.TEST.KSDS01.INFO
    データ・コンポーネント : TMAX.TEST.KSDS01.INFO.DATA
    索引コンポーネント : TMAX.TEST.KSDS01.INFO.INDEX
  • クラスター名の長さが39字より大きいか等しい場合

    • データ・コンポーネントは「.D」を追加

    • 索引コンポーネントは「.I」を追加

    以下の例は、クラスターの名前が「TMAX.TEST.KSDS01.RESOURCE.FROM.REGION01」の場合に、規則に従って生成されたデータ・コンポーネント、索引コンポーネントの名前を示します。

    クラスター名   : TMAX.TEST.KSDS01.RESOURCE.FROM.REGION01
    データ・コンポーネント : TMAX.TEST.KSDS01.RESOURCE.FROM.REGION01.D
    索引コンポーネント : TMAX.TEST.KSDS01.RESOURCE.FROM.REGION01.I

    クラスターの名前の長さが43~44字の場合、3番目の規則に従ってコンポーネントの名前の長さは45~46字になり、データセット名の長さ制限エラーが発生します。したがって、VSAMデータセットの名前はクラスター名のみ指定し、コンポーネントの名前は指定しない場合は、42文字に制限します。

5. 代替索引とスフィア

本節では、代替索引とスフィアの概念について記述します。

5.1. 代替索引

アクセス方式サービスを使用して、KSDSとESDS(基本クラスター)に代替索引(AIX:Alternate Index)を定義できます。代替索引は、基本クラスター・レコードに基本キー以外のキー・フィールドでアクセスする方法を提供します。

代替索引を使用すると、同じ情報を持つデータセットをアプリケーションごとに複数コピーして管理する必要がありません。

基本クラスター・レコードのどの部分も代替索引のキーとして使用できます。さらに、基本レコードの同じ部分を代替キーとして使用する代替索引を複数作成することも可能です。代替キーは、基本クラスター自体の基本キーとは異なり、1つのデータセット内のレコード間で一意である必要はありません。つまり、1つの代替キーに複数のレコードが対応できますが、OpenFrameではサポートしていません。

代替索引は、事実索引コンポーネントとデータ・コンポーネントから構成される独立したKSDSです。代替索引のレコードは、代替キーと基本クラスターのデータを指すポインター情報を含んでいます。OpenFrameでは、独立したKSDSとしてではなく、基本クラスターの表にデータベースの索引を作成する方法で処理します。

figure 3 2
代替索引
代替索引のアクセス・パス

代替索引を使用してKSDSやESDSを処理する前に、まずアクセス・パスを定義する必要があります。アクセス・パスは、代替索引を使用して基本クラスターを処理するときに使用されるカタログ・エントリです。

アクセス・パスは、IDCAMS(JSCVSUT/KQCAMS)ユーティリティのDEFINE PATHコマンドを使用して定義します。代替索引を使用して基本クラスターを処理するためには、各代替索引に対して少なくとも1つ以上のアクセス・パスが定義されている必要があります。アクセス・パスは概念的に、基本クラスターと代替索引のペアとみなされます。

アプリケーションがパスを使用すると、基本クラスターと代替索引データセットが一緒に開かれます。基本クラスターとそれに関連したすべての代替索引の集合をスフィア(Sphere)といいます。

5.2. スフィア

スフィア(Sphere)は、基本クラスターと基本クラスターの代替索引の集合です。基本クラスターの代替索引は、1つの代替キーと多数の基本キーを持つレコードから構成されるKSDSクラスターです。

スフィアの概念を導入すると、ベースとなるデータセットへのアクセス方式が追加されます。順次アクセス方式や直接アクセス方式といった区別ではなく、基本データセットの基本キー以外のキーを使用したアクセス方式です。これを、データへの複数のアクセス・パスが存在するといいます。

代表的な例として、COBOLアプリケーションのALTERNATE KEY文によるデータセットの使用を挙げることができます。VSAMアクセス方式は、KSDSやESDSに対し複数の代替キーを使用した順次および直接アクセス方式を提供します。このようなアクセス方式を、アクセス・パスを使用したアクセス方式といいます。

6. VSAMデータセットの管理

VSAMデータセットは、アクセス方式サービスのコマンドを使用して定義します。

以下は、VSAMデータセットを管理する方法についての説明です。

  1. すべてのVSAMデータセットは、カタログに登録する必要があります。新規カタログを使用したい場合は、アクセス方式サービスのDEFINE USERCATALOGコマンドを使用して新規カタログを作成します。

  2. VSAMデータセットは、アクセス方式サービスのDEFINE CLUSTERコマンドを使用してカタログに定義できます。OpenFrameでは、JCL(DISP=NEW)を使用してVSAMデータセットを作成する方法はサポートしていません。

  3. アクセス方式サービスのREPROコマンドの使用するか、別のユーザー・プログラムを作成して、VSAMデータセットにデータをロードします。

  4. 選択的に代替索引を基本クラスターに関連付けて使用したい場合は、アクセス方式サービスのDEFINE ALTERNATEINDEX、DEFINE PATH、BLDINDEXコマンドを使用します。

前述した全段階でVSAMデータセットの処理結果を確認するには、アクセス方式サービスのLISTCATまたはPRINTコマンドを使用します。LISTCATまたはPRINTコマンドは、VSAMデータセットに関連する問題を見つけ、修正するときに有用です。

6.1. VSAMデータセットの概念

6.1.1. クラスターの概念

KSDSの場合、クラスターはデータ・コンポーネントと索引コンポーネントの組み合わせです。クラスターは、索引コンポーネントとデータ・コンポーネントを、まるで1つのコンポーネントであるかのように扱うことができます。また、固定長RRDSやESDSの場合は、索引コンポーネントなしで、データ・コンポーネントだけでクラスターとみなされますが、これは他のデータセットとの統一性を考慮してデータセットを処理するためです。

6.1.2. VSAMデータセットの定義

アクセス方式サービスのDEFINE CLUSTERコマンドを使用して、VSAMデータセットを定義することができます。クラスターを定義する際、クラスターを記述するために以下のカタログ・エントリが登録されます。

  • クラスターを1つのコンポーネントであるかのように使用するためのクラスター項目

  • クラスターのデータ・コンポーネントを記述するためのデータ項目

  • KSDSの場合、クラスターの索引コンポーネントを記述するための索引項目

クラスターのすべての属性がカタログに記録されます。カタログには、データセットの管理やレコードの入出力のためのすべての情報を提供します。

アクセス方式サービスを使用してVSAMデータセットを定義する場合、以下のようなパラメータを指定できます。

パラメータ 説明

INDEXED|NOINDEXED|NUMBERED

VSAMデータセットの種類を指定します。

  • Key-Sequenced(キー順)

  • Entry-Sequenced(入力順)

  • Relative Record(相対レコード)

RECORDSIZE

平均または最大データ・レコードの長さを指定します。固定長データセットの場合、平均レコード長と最大レコード長を同じく指定します。

KEYS

KSDSでレコード内のキーの位置と長さを指定します。

CATALOG

クラスターが定義されるカタログの名前を指定します。

VOLUMES

クラスターのための領域が割り当てられるボリューム・シリアル番号を指定します。

RECORDS|KILOBYTES| MEGABYTES|

TRACKS|CYLINDERS

クラスターのためのディスク領域のサイズを指定します。

CONTROLINTERVALSIZE

VSAMが使用する制御インターバルの大きさを指定します。OpenFrameではサポートしていません。

SPANNED

レコードが制御インターバルにまたがって格納できるか否かを指定します。OpenFrameではサポートしていません。

6.2. VSAMデータセットの処理

6.2.1. VSAMデータセットのロード

VSAMデータセットが定義されると、ソース・データセットから定義済みのVSAMデータセットにレコードをロードすることができます。ロードされるVSAMデータセットの種類によって、ソース・データセットは特定の順にソートされている必要があります。

  • ESDSにロードされるデータ・レコード

    特に決まった順序はありません。レコードの特定フィールドではなく、レコードが追加された順にソートされます。

  • KSDSにロードされるデータ・レコード

    入力データセットに重複キーがなく、昇順にソートされている必要があります。

  • RRDSにロードされるデータ・レコード

    昇順にソートされている必要があります。順次にロードされる場合は、VSAMがロードされる順に相対レコード番号を与えます。

データセットのロードは、以下の2つの方法で行います。

  • REPROを使用してデータセットをロード

    アクセス方式サービスのREPROコマンドを使用すると、順次データセットやVSAMデータセットからレコードを抽出し、VSAMアクセス方式のすべてのデータセットにロードすることができます。

  • プログラムを作成してデータセットをロード

    プログラムを作成してKSDSにロードするためには、まず、データ・レコードをキー順にソートした後、順次に格納します。

6.2.2. データセットのコピー

様々な理由により、データセットをコピーしたり、2つのデータセットを1つにまとめたりする場合があります。たとえば、テスト用のコピー・データセットを作成する場合や、他の目的で2つのコピーを作成する場合です。また、データセットを更新する前にバックアップ用としてコピーしておく必要もあります。このような場合、アクセス方式サービスのREPROコマンドを使用してデータセットをコピーすることができます。

以下のような場合に、REPROを使用してデータセットをコピーすることができます。

  • VSAMデータセットをコピーして新規VSAMデータセットを作成する場合

  • 順次データセットをコピーして新規順次データセットを作成する場合

  • 順次データセットをコピーしてVSAMデータセットに変換する場合

  • VSAMデータセットをコピーして順次データセットに変換する場合

  • VSAMデータセットをコピーして自動的に再編成をする場合

  • PDSやPDSE(Partitioned DataSet Extended)などの各メンバーをコピーする場合

KSDSにコピーする場合、入力データセットのデータ・レコードは重複するキーなしで、昇順にソートされている必要があります。

VSAMデータセットがキー順にコピーされる場合、以下のような再構成(reorganization)が自動的に実行されます。

  • 論理レコードの物理的な位置ソート

  • データセットの内部的な空き容量の分配

  • VSAM索引コンポーネントの再構成

6.2.3. データセットの出力

データセットの使用中に問題が生じた場合、アクセス方式サービスのPRINTコマンドを使って、VSAMデータセットの一部あるいは全レコードを出力することができます。

この際、論理レコードのデータ内容のみ出力され、システムが管理している制御フィールドは出力されません。出力された各レコードは、以下のいずれかの方法で区別されます。

  • ESDSの場合は、相対バイト・アドレス(RBA)

  • KSDSの場合は、キー値(KEY)

  • RRDSの場合は、レコード番号(RRN)

6.2.4. データセットの削除

アクセス方式サービスのDELETEコマンドを使用すると、データセットまたはカタログを削除することができます。DELETEコマンドは、ボリュームからデータセットを削除し、カタログからデータセットの項目を削除します。

6.3. 代替索引とアクセス・パス

6.3.1. 代替索引の定義

代替索引は、関連する基本レコードの代替キー順に索引項目を格納している、もう1つのKSDSです。代替索引は、クラスターのデータ・コンポーネントにあるレコードを検索する、また別の方法を提供します。

代替索引は、KSDSクラスターとESDSクラスターに対し定義することができます。代替索引を構成する手順は、以下のとおりです。

  1. DEFINE CLUSTERコマンドを使用して、基本クラスターを定義します。

  2. REPROコマンドを使用するか、プログラムを作成して、基本クラスターをロードします。

  3. DEFINE ALTERNATEINDEXコマンドを使用して、代替索引を定義します。

  4. DEFINE PATHコマンドを使用して、代替索引を基本クラスターに関連付けます。

  5. BLDINDEXコマンドを使用して、代替索引を構成します。

PATHを定義して代替索引を基本クラスターに関連付け、BLDINDEXコマンドで代替索引を構成することは、OpenFrameでは必須ではありません。

VSAMデータセットでは、代替索引を記述するために次の3つのカタログ・エントリを使用します。

  • 代替索引をKSDSに記述する代替索引項目

  • 代替索引のデータ・コンポーネントを記述するデータ項目

  • 代替索引の索引コンポーネントを記述する索引項目

非一意キーを持つ代替索引を定義する際には、レコード・サイズをなるべく大きく指定して、すべての非一意キーが処理されるようにする必要があります。同じ代替キーを持つすべてのレコードの基本キー値は、1つの代替索引レコードに格納されます。

6.3.2. 代替索引の管理

VSAMは、代替索引が常に基本クラスターと同期化されているとみなしているので、データセットを開く際に毎回同期化をチェックしません。

代替索引にUPGRADE属性を定義した場合、代替索引と関連付けられた基本クラスターが変更されると、代替索引も一緒に変更されます。この場合、基本クラスターが出力モードで開かれると、基本クラスターに関連付けられたすべての代替索引も自動的に開かれます。

OpenFrameでは基本クラスター表にデータベース索引を作成する方法で代替索引を作成するので、UPGRADE/NOUPGRADE属性はサポートしませんが、基本的な動作はUPGRADE属性を指定した場合と同じです。

6.3.3. アクセス・パスの定義

代替索引を定義した後、DEFINE PATHコマンドを使用して基本クラスターと代替索引との関係を定義する必要があります。アクセス・パスは、基本クラスターと代替索引のペアを示します。アクセス・パスを使用してデータセットにアクセスする場合、JCLのDSNAMEパラメータにアクセス・パス名を記述します。

ユーザー・プログラムからアクセス・パスでデータを処理する場合、代替索引と基本クラスターが同時に開かれます。基本クラスターのデータは、代替索引のキーを使用して読み取り/書き込みが行われます。

6.4. データセットの確認とジョブ処理

6.4.1. カタログ・エントリのリスト

VSAMデータセットが定義された後、アクセス方式サービスのLISTCATコマンドを使用すると、カタログに登録されている項目の一部あるいは全部を確認できます。

LISTCATコマンドは、カタログに登録されている次の情報を表示します。

  • SMS属性を含む全てのオブジェクトの属性

  • 作成日と有効期限

  • データセットの構造

  • データセットの使用統計

  • スペースの割り当て情報およびボリューム情報

6.4.2. ブラウジング

以下は、ブラウジングをサポートするインターフェースです。

インターフェース 説明

START_BR

TSAMで任意のレコードを読み取るときと同じ方法でブラウジングを始めます。

ブラウザーのポインターを初期化するだけで、レコードは読み取りません。

READ_NEXT

START_BRインターフェースで指定した開始位置からレコードを順次読み取ります。

READ_PREV

データセットを逆順に読み取ります。

RESET_BR

ブラウジングが始まったら、現在ブラウジングするポインターを変更します。

READ_NEXTまたはREAD_PREVインターフェースのパラメータのRIDFLDを変更しても、ブラウジング・ポインターが変更されます。

6.4.3. トランザクション

トランザクションは、一度に処理する必要がある1つ以上のジョブから成る論理的な単位です。

以下は、トランザクションをサポートするインターフェースです。

インターフェース 説明

COMMIT

現在のトランザクションをコミットします。

ROLLBACK

現在のトランザクションをロールバックします。

6.4.4. 中間コミット

OpenFrameのTSAMはRDB表で実装されているので、作業内容を表に反映するためにはデータベースにコミットを要求する必要があります。バッチ作業などで更新する内容がたまりすぎてパフォーマンスが低下する問題を防止するために、OpenFrameはコマンドを1024個ごとにデータベースにコミットし、最終的に作業が正常に終了したときには残りの変更内容をコミットします。

そのため、ジョブが実行中に異常終了しても、中間コミットされたデータはロールバックされずにデータベースに反映されるため、データセットの状態はジョブの実行前と異なる状態になることがあります。また、ホスト・システムのVSAMは、非VSAMと同様に、変更内容が即座にストレージへ反映されるため、OpenFrameの動作とは異なります。

7. VSAM形式のISAM/BDAMデータセット

ISAMデータセットは内部的にVSAMのKSDSデータセット形式にマッピングされます。

BDAMデータセットは、OpenFrame環境設定のdsサブジェクトDATASET_DEFAULTセクションのUSE_BDAM_AS_TSAMキーのVALUE項目を「YES」に指定した場合、内部的にVSAM形式で生成されます。基本的にはRRDS形式にマッピングされますが、ACTUAL KEYを使用するBDAMデータセットはKSDS形式にマッピングされます。

内部的にはVSAMですが、実際は非VSAMデータセットであるため、VSAMとは異なり、異なるボリューム名で同じ名前のデータセットを作成することができます。したがって、RDBの表名は「V{VOLUME_NAME}_{DATASET_NAME}」形式で生成されます。表名の先頭に「V」が付くのは、ボリューム名が数字で始まる可能性があり、表名が数字で始まるのを防ぐためです。

表名の先頭に付ける「V」は、表名および関連するSQLにのみ適用されます。一方、コピーブックなどのデータセットと関連付けられたファイルが存在する場合、ファイル名には「V」を付けず、「{VOLUME_NAME}_{DATASET_NAME}」形式になります。

以下は、USE_BDAM_AS_TSAMキーのVALUE項目を「YES」に指定し、ボリューム名が「DEFVOL」、ISAM/BDAMデータセット名が「TMAX.TEST.DATASET」の場合、各項目の名前がどのように構成されるかを示す例です。

ボリューム名:DEFVOL
ISAM/BDAMデータセット名:TMAX.TEST.DATASET

RDB表の名前:VDEFVOL_TMAX_TEST_DATASET
ライブラリファイルの名前:DEFVOL_TMAX_TEST_DATASET.so
コピーブックファイルの名前:DEFVOL_TMAX.TEST.DATASET.cpy