TSAM RDB
본 절에서는 데이터를 Copybook 필드 별로 변환하여 관리할 수 있도록 VSAM 데이터셋을 정의하는 기능을 설명한다.
1. VSAM 데이터셋 정의 과정
TSAM RDB에서 IDCAMS를 통해 VSAM 데이터셋을 정의할 경우 수행되는 과정은 다음과 같다.
-
데이터셋과 동일한 이름의 Copybook을 파싱하여 이에 매핑되는 소스 코드를 생성한다.
-
생성된 소스 코드와 템플릿 파일(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 형태로 데이터를 저장하기 때문에 Migration 과정에서 변환 이슈는 존재하지 않지만 TSAM RDB에서는 필드 단위로 나눈 데이터를 변환하는 과정에서 데이터 검증이 처리가 추가되어 마이레이션 과정에서 오류가 발생할 수 있다. |
AIX를 생성하는 경우 기존 TSAM과 다르게 별도의 테이블을 생성하지 않고, CLUSTER 테이블에 INDEX를 생성하여 처리한다.
다음은 TSAM RDB에서 AIX 생성한 결과 예이다.
$ 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
OCCURS 필드를 IDCAMS 옵션에 따라 단일 또는 풀어진 형태의 컬럼으로 생성 가능하다.
다음은 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 -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
기본적으로 Copybook에 정의된 필드에 맞게 컬럼이 생성되지만, VB 형태의 레코드를 처리하기 위해 단일 컬럼을 갖는 형태(BULK)로도 VSAM 데이터셋을 생성할 수 있다. 다만, 단일 컬럼을 갖기 위해서는 일반 필드와 이 필드를 재정의하는 필드만으로 구성한 Copybook이 작성되어야 한다.
다음은 단일 컬럼(BULK)을 갖는 VSAM KSDS 데이터셋을 정의하기 위해 사용되는 Copybook 파일의 작성과 해당 Copybook을 사용하여 데이터셋을 정의하는 예이다.
<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의 경우 RDB 버전이 아닌 기존 ESQL TSAM과 동일하게 VSAM KSDS로 생성되며, RDB 버전의 특징에 맞게 Copybook이 요구된다. 다만, 일반적인 VSAM KSDS 생성과 다르게 Copybook 파일 이름 앞에 논리 볼륨의 이름이 붙어 있어야 한다.
다음은 TSAM RDB 버전에서 ISAM 데이터셋을 정의하기 위해 사용되는 Copybook 파일과 해당 Copybook을 활용하여 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 데이터셋을 정의하는 절차는 다음과 같다.
-
Copybook 디렉터리 내 데이터셋과 동일한 이름의 Copybook 파일(예: 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
-
데이터셋 테이블 및 Shared Object 파일(예: 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
AIX를 정의하는 절차는 데이터셋을 정의하는 절차와 동일하다.
다음은 VSAM KSDS 데이터셋의 AIX를 정의하는 예와 그 결과를 예이다.
<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