TSAM RDB
本付録では、データをコピーブックのフィールドごとに変換して管理できるように、VSAMデータセットを定義する機能について説明します。
1. VSAMデータセットの定義プロセス
TSAM RDBでIDCAMSを使用してVSAMデータセットを定義するプロセスは以下のとおりです。

-
データセットと同じ名前のコピーブックを解析し、それにマッピングするソースコードを作成します。
-
作成されたソースコードとテンプレート・ファイル(TSAM_@.template)を結合します。
-
完成されたソース・ファイルをシェル・スクリプト(tsam_compile.sh)でコンパイルして、DSNAME.soを作成します。
-
DSNAME.soに定義されているtsrdb_create APIを呼び出して、データセットのテーブルを作成します。
2. TSAM RDBの特徴
本節では、TSAM RDBの主な特徴について説明します。
TSAM RDBはレコードをフィールド単位に分割した後、各フィールドのタイプに合わせてデータを変換してテーブルに保存します。
以下は、従来のTSAMとTSAM RDBの違いです。
-
従来のTSAM
KEY DAT -------------------- ------------------------------------------------------- 30303031303030303030 3030303130303030303030303034303030303030 ... 30303032303030303030 3030303230303030303030303033303030303030 ... 30303033303030303030 3030303330303030303030303032303030303030 ... 30303034303030303030 3030303430303030303030303031303030303030 ...
-
TSAM RDB
FLD_KEY FLD_AKEY FLD_DAT ---------- ---------- ------------------------------------------------------- 0001000000 0004000000 ... 0002000000 0003000000 ... 0003000000 0002000000 ... 0004000000 0001000000 ...
従来のTSAMではデータをBLOB型で保存するため、移行の際に変換に関する問題は発生しませんでしたが、TSAM RDBではフィールド単位でデータを変換し、その際にデータの検証処理プロセスが追加されたため、移行の際にエラーが発生することがあります。 |
代替索引(AIX)を作成する場合は、従来のTSAMとは異なって、別のテーブルを作成せずにクラスター・テーブルに索引を作成します。
以下は、TSAM RDBで代替索引を作成した例です。
$ idcams define AIX -n SAMPLE.KSDS.AIX -r SAMPLE.KSDS -k 10,10 -l 80,80
COLUMN_NAME TYPE CONSTARINT ------------------- ---------------------------- ------------------------ FLD_KEY NUMBER(10) PRIMARY KEY FLD_AKEY VARCHAR(10) FLD_DAT VARCHAR(60) INDEX_NAME TYPE COLUMN_NAME ---------------------- ------------------------- ------------------------ SAMPLE_KSDS_AIX_INDEX NORMAL FLD_AKEY SAMPLE_KSDS_KEY NORMAL FLD_KEY
idcamsツールのオプション設定に従って、OCCURSフィールドのすべてのエレメントをデータベース表の1つの列として作成するか、エレメントごとに列を作成することができます。
以下は、OCCURSフィールドのすべてのエレメントをデータベース表の1つの列として作成する例です。
<SAMPLE.KSDS.cpy>
01 REC. 03 FLD-KEY PIC 9(10). 03 FLD-OCC PIC X(10) OCCURS 5 TIMES. 03 FLD-DAT PIC X(20). : :
$ idcams define CL -n SAMPLE.KSDS -o KS -k 10,0 -l 80,80 -O
COLUMN_NAME TYPE CONSTARINT ------------------- ---------------------------- ------------------------ FLD_KEY NUMBER(10) PRIMARY KEY FLD_OCC VARCHAR(50) FLD_DAT VARCHAR(20) INDEX_NAME TYPE COLUMN_NAME ------------------- ---------------------------- ------------------------ SAMPLE_KSDS_KEY NORMAL FLD_KEY
以下は、OCCURSフィールドのエレメントごとに列を作成する例です。
<SAMPLE.KSDS.cpy>
01 REC. 03 FLD-KEY PIC 9(10). 03 FLD-OCC PIC X(10) OCCURS 5 TIMES. 03 FLD-DAT PIC X(20). : :
$ idcams define CL -n SAMPLE.KSDS -o KS -k 10,0 -l 80,80
COLUMN_NAME TYPE CONSTARINT ----------------------- ----------------------- ------------------------- FLD_KEY NUMBER(10) PRIMARY KEY FLD_OCC1 VARCHAR(10) FLD_OCC2 VARCHAR(10) FLD_OCC3 VARCHAR(10) FLD_OCC4 VARCHAR(10) FLD_OCC5 VARCHAR(10) FLD_DAT VARCHAR(20) INDEX_NAME TYPE COLUMN_NAME ----------------------- ----------------------- ------------------------- SAMPLE_KSDS_KEY NORMAL FLD_KEY
基本的にコピーブックに定義されたフィールドに合わせて列が作成されますが、VB形式のレコードを処理するためにデータベース表の1つの列(BULK)でVSAMデータセットを作成することもできます。ただし、その場合は、一般フィールドとこのフィールドを再定義するフィールドだけで構成されたコピーブックが作成される必要があります。
以下は、1つの例(BULK)を持つVSAM KSDSデータセットを定義するために使用されるコピーブック・ファイルを作成し、そのコピーブックを使用してデータセットを定義する例です。
<BULK.KSDS.cpy>
01 REC. 03 FLD-DAT PIC 9(80). 03 FLD-BULK PIC X(80) REDEFINES FLD-DAT. : :
$ idcams define CL -n BULK.KSDS -o KS -k 10,0 -l 80,80
COLUMN_NAME TYPE CONSTARINT ----------------------- ------------------------ ------------------------ FLD_DAT VARCHAR(80) BULK_KSDS_COL VARCHAR(10) INDEX_NAME TYPE COLUMN_NAME ----------------------- ------------------------ ------------------------ BULK_KSDS_KEY FUNCTION-BASED NORMAL - EXPRESSION COLUMN -
再定義フィールドは、フィールド・タイプに関係なく、文字型の列が作成されます。 |
ISAMの場合は、既存のESQL TSAMと同様にVSAM KSDSが生成され、RDBバージョンの特徴に合わせてコピーブックが要求されます。ただ、一般的なVSAM KSDSの作成とは異なって、コピーブック・ファイル名の前に論理ボリューム名が付けられる必要があります。
以下は、TSAM RDBバージョンでISAMデータセットを定義するために使用されるコピーブック・ファイルとこのコピーブックを使用してdscreateツールでISAMデータセットを定義する例です。
<DEFVOL_SAMPLE.ISAM.cpy>
01 REC. 03 FLD-KEY PIC X(10). 03 FLD-DAT PIC X(70). : :
$ dscreate SAMPLE.ISAM -o IS -k 10 -p 0 -l 80 -v DEFVOL
COLUMN_NAME TYPE CONSTARINT ----------------------------- -------------------- ---------------------- FLD_KEY VARCHAR(10) PRIMARY KEY FLD_DAT VARCHAR(70) INDEX_NAME TYPE COLUMN_NAME ----------------------------- -------------------- ---------------------- DEFVOL_SAMPLE_ISAM_KEY NORMAL FLD_KEY
3. 使用例
VSAMデータセットを定義する手順は以下のとおりです。
-
コピーブック・ディレクトリに、データセットと同じ名前のコピーブック・ファイル(例: SAMPLE.KSDS.cpy)を作成します。
<SAMPLE.KSDS.cpy>
01 REC. 03 FLD-KEY PIC 9(10). 03 FLD-AKEY PIC X(10). 03 FLD-DAT PIC X(60). : :
-
idcamsツールまたはユーティリティでVSAMデータセットを定義します。
$ idcams define CL -n SAMPLE.KSDS -o KS -k 10,0 -l 80,80
-
データセット・テーブルと共有オブジェクト・ファイル(例: SAMPLE.KSDS.so)の作成を確認します。
COLUMN_NAME TYPE CONSTARINT ------------------------ ----------------------- ------------------------ FLD_KEY NUMBER(10) PRIMARY KEY FLD_AKEY VARCHAR(10) FLD_DAT VARCHAR(60) INDEX_NAME TYPE COLUMN_NAME ------------------------ ----------------------- ------------------------ SAMPLE_KSDS_KEY NORMAL FLD_KEY
代替索引を定義する手順はデータセットを定義する手順と同じです。
以下は、VSAM KSDSデータセットの代替索引を定義する例とその結果の例です。
<SAMPLE.KSDS.cpy>
01 REC. 03 FLD-KEY PIC 9(10). 03 FLD-AKEY PIC X(10). 03 FLD-DAT PIC X(60). : :
$ idcams define AIX -n SAMPLE.KSDS.AIX -r SAMPLE.KSDS -k 10,10 -l 80,80
COLUMN_NAME TYPE CONSTARINT ------------------------ ----------------------- ------------------------ FLD_KEY NUMBER(10) PRIMARY KEY FLD_AKEY VARCHAR(10) FLD_DAT VARCHAR(60) INDEX_NAME TYPE COLUMN_NAME ------------------------ ----------------------- ------------------------ SAMPLE_KSDS_AIX_INDEX NORMAL FLD_AKEY SAMPLE_KSDS_KEY NORMAL FLD_KEY