OpenFrame HiDB 정의 유틸리티

본 장에서는 OpenFrame HiDB 데이터베이스를 정의하는 유틸리티에 대해 기술한다.

1. 개요

OpenFrame HiDB 유틸리티 프로그램은 OpenFrame HiDB 엔진과 함께 제공되는 프로그램으로 JCL을 통해 Batch JOB으로 실행되는 프로그램을 의미한다. 유틸리티 프로그램은 Mainframe에서 사용되는 데이터베이스 유틸리티 프로그램과의 호환성을 유지하기 위해 제공되는 프로그램으로, 데이터베이스의 정의, 재편성 및 초기화 기능 등을 제공한다.

다음은 OpenFrame HiDB 데이터베이스를 정의하는 유틸리티 프로그램 목록이다. 각 유틸리티에 대한 설명은 해당 절에서 자세하게 기술한다.

프로그램명 설명

DBDGEN

OpenFrame HiDB 데이터베이스 스키마를 시스템에 정의할 때 사용한다.

PSBGEN

데이터베이스에 대한 논리 구조 및 DC 인터페이스 블록을 정의한다.

2. DBDGEN

DBDGEN 유틸리티는 OpenFrame HiDB 데이터베이스 스키마를 시스템에 정의할 때 사용한다. 데이터베이스 스키마 정보는 데이터베이스 정의 블록(DBD 블록)으로 만들어져서 시스템 라이브러리에 저장된다.

DBDGEN 유틸리티를 사용하면 다음과 같은 유형의 데이터베이스를 정의할 수 있다.

  • HSAM 데이터베이스(SHSAM 포함)

  • HISAM 데이터베이스(SHISAM 포함)

  • HDAM 데이터베이스

  • HIDAM 데이터베이스

  • DEDB 데이터베이스

  • INDEX 데이터베이스

  • LOGICAL 데이터베이스

다음은 DBDGENC0 프로그램과 DFSILNK0 프로그램을 실행시키는 DBDGEN 프러시저의 내용을 보여주는 예로 아래와 같이 2개의 스텝으로 이루어져 있다.

//       PROC  MBR=TEMPNAME,SOUT=A,RGN=4M,SYS2=
//C      EXEC  PGM=DBDGENC0,REGION=&RGN,PARM='OBJECT,NODECK'
//SYSLIB   DD  DSN=IMS.&SYS2MACLIB,DISP=SHR
//SYSLIN   DD  UNIT=SYSDA,DISP=(,PASS),
//             SPACE=(80,(100,100),RLSE),
//             DCB=(BLKSIZE=80,RECFM=F,LRECL=80)
//SYSPRINT DD  SYSOUT=&SOUT,DCB=BLKSIZE=1089,
//             SPACE=(121,(300,300),RLSE,,ROUND)
//SYSUT1   DD  UNIT=SYSDA,DISP=(,DELETE),
//             SPACE=(CYL,(10,5))
//L      EXEC  PGM=DFSILNK0,PARM='XREF,LIST',COND=(0,LT,C)
//SYSLIN   DD  DSN=*.C.SYSLIN,DISP=(OLD,DELETE)
//SYSPRINT DD  SYSOUT=&SOUT,DCB=BLKSIZE=1089,
//             SPACE=(121,(90,90),RLSE)
//SYSLMOD  DD  DSN=IMS.&SYS2DBDLIB(&MBR),DISP=SHR
//SYSUT1   DD  UNIT=SYSDA,DISP=(,DELETE),
//             SPACE=(1024,(100,10),RLSE)

위 DBDGEN 프러시저의 첫 번째 과정인 C 스텝은 컴파일 스텝으로 OpenFrame HiDB 데이터베이스 정의 스크립트를 컴파일하기 위해 DBDGENC0 유틸리티를 실행시켜 오브젝트 모듈을 생성한다. 두 번째 스텝인 L 스텝은 DFSILNK0 유틸리티를 실행시키는 Link-Edit 스텝으로 앞의 컴파일 과정에서 생성된 오브젝트 모듈을 시스템 라이브러리로 복사하는 작업을 수행한다.

2.1. DD 설정

DD 설정 항목은 다음과 같다.

항목 설명

SYSIN DD

OpenFrame HiDB 데이터베이스 정의 스크립트를 포함하는 입력 데이터셋을 지정한다.

SYSLMOD DD

IMS.DBDLIB 등의 DBD 블록을 저장하기 위한 PDS 데이터셋을 지정한다.

2.2. JCL 파라미터

JCL 파라미터 항목은 다음과 같다.

항목 설명

MBR

생성하는 DBD의 이름을 지정한다. 이곳에 지정된 이름은 DBD 문의 NAME 파라미터에 지정된 이름과 동일해야 한다.

SOUT

SYSOUT DD 문장에 할당될 클래스를 지정한다. (기본값: 'A')

SYS2

IMS 시스템 데이터셋의 두 번째 Qualifier를 지정한다. (예: SYS2='IMSA.')

2.3. 명령어 설정

DBDGEN 유틸리티에서는 DBD 컨트롤문을 사용하여 데이터베이스 스키마를 정의한다.

다음은 DBD 컨트롤문에 대한 설명이다.

컨트롤문 설명

DBD 문

데이터베이스 전반에 대한 정보를 지정한다.

DATASET 문

데이터베이스를 구성하는 데이터셋 정보를 지정한다.

AREA 문

DEDB 데이터베이스는 AREA 문으로 데이터셋 정보를 지정한다.

SEGM 문

선행하는 DATASET 문으로 정의되는 데이터셋에 포함되는 세그먼트 정보를 지정한다.

LCHILD 문

선행하는 SEGM 문으로 정의된 세그먼트의 논리 자식 정보를 지정한다.

FIELD 문

선행하는 SEGM 문으로 정의된 세그먼트의 필드 정보를 지정한다.

XDFLD 문

Secondary Index 관계에 있어서 세그먼트 검색 필드 정보를 지정한다.

DBDGEN 문

데이터베이스 정의의 종료를 지정한다.

END 문

컨트롤문의 종료를 지정한다.

FINISH 문

선택적이며 호환성을 위해 존재한다.

DBD 컨트롤문의 기술 순서는 다음의 규칙을 따른다.

  • DBD 문은 DBD 컨트롤문의 제일 앞에 기술한다.

  • DBD 문의 다음에는 반드시 DATASET 문을 기술한다. (DEDB의 경우 DATASET 문 대신 AREA 문 사용)

  • DBD 문에 이어 1개 이상의 DATASET, SEGM, FIELD 문이 있어야 한다. 단, 논리 데이터베이스 정의에는 FIELD, LCHILD 문이 존재해서는 안 된다.

  • HDAM, HIDAM, HISAM(SHISAM) 이외의 데이터베이스 정의에서는 XDFLD 문이 존재해서는 안 된다.

  • FIELD 문은 Secondary Index 관계를 지정하는 LCHILD 문의 다음에 지정하면 안 된다.

  • 기본 인덱스를 지정하는 LCHILD 문 또는 Logical Relationship을 지정하는 LCHILD 문은 Secondary Index 관계를 지정하는 LCHILD 문의 다음에 지정하면 안 된다.

다음은 DBD 컨트롤문의 입력 순서이다.

DBD ...................... 데이터베이스 정의 시작
  DATASET ................ 데이터셋 정보
    SEGM ................. 세그먼트 정보
      FIELD .............. 필드 정보
      LCHILD ............. 논리 자식 정보
      XDFLD .............. 세그먼트 검색 필드
    SEGM
      FIELD
    SEGM
      FIELD
DBDGEN ................... 데이터베이스 정의 종료
END ...................... 컨트롤 문장의 종료
DBD 문

기술하고 있는 데이터베이스의 이름을 지정하고 데이터베이스의 구조에 대한 DL/I 정보를 제공한다. 하나의 데이터베이스 정의 스크립트에는 하나의 DBD 문을 사용할 수 있다.

  • HSAM(SHSAM) 데이터베이스

    다음은 HSAM(SHSAM) 데이터베이스를 위한 DBD 문이다.

    DBD NAME=dbname1,ACCESS={HSAM|SHSAM}
  • HISAM(SHISAM) 데이터베이스

    다음은 HISAM(SHISAM) 데이터베이스를 위한 DBD 문이다.

    DBD NAME=dbname1,ACCESS=({HISAM|SHISAM}[,VSAM])
      [,PASSWD={NO|YES}]
      [,VERSION='n']
  • HDAM 데이터베이스

    다음은 HDAM 데이터베이스를 위한 DBD 문이다.

    DBD NAME=dbname1,ACCESS=(HDAM,{VSAM|OSAM})
       ,RMNAME=(mod[,anch,rbn,bytes])
      [,PASSWD={NO|YES}]
      [,VERSION='n']
  • HIDAM 데이터베이스

    다음은 HIDAM 데이터베이스를 위한 DBD 문이다.

    DBD NAME=dbname1,ACCESS=(HIDAM,{VSAM|OSAM})
      [,PASSWD={NO|YES}]
      [,VERSION='n']
  • DEDB 데이터베이스

    다음은 DEDB 데이터베이스를 위한 DBD 문이다.

    DBD NAME=dbname1,ACCESS=DEDB
       ,RMNAME=(mod,...XCI)
      [,VERSION='n']
  • INDEX 데이터베이스

    다음은 INDEX 데이터베이스를 위한 DBD 문이다.

    DBD NAME=(dbname1[,dbname2]),ACCESS=(INDEX,VSAM)
      [,PASSWD={NO|YES}]
  • LOGICAL 데이터베이스

    다음은 LOGICAL 데이터베이스를 위한 DBD 문이다.

    DBD NAME=dbname1,ACCESS=LOGICAL

다음은 DBD 문의 파라미터에 대한 설명이다.

항목 설명

NAME

현재 기술하고 있는 데이터베이스의 DBD 이름을 지정한다. 단, PSB 이름과 중복된 이름을 사용할 수 없다.

ACCESS

이 데이터베이스에서 사용되는 DL/I와 데이터셋 접근방식을 지정한다.

다음과 같은 값을 사용할 수 있다.

  • HSAM : 접근방식으로 HSAM을 사용한다.

  • SHSAM : 접근방식으로 SHSAM을 사용한다. SHSAM은 한 개의 세그먼트 타입만을 가질 수 있으며 데이터를 저장할 때 세그먼트 Prefix 정보영역이 필요 없다.

  • HISAM : 접근방식으로 HISAM을 사용한다.

  • SHISAM : 접근방식으로 SHISAM을 사용한다. SHISAM은 한 개의 세그먼트 타입만을 가질 수 있으며 데이터를 저장할 때 세그먼트 Prefix 정보영역이 필요 없다.

  • HDAM : 접근방식으로 HDAM를 사용한다.

  • HIDAM : 접근방식으로 HIDAM를 사용한다.

  • DEDB : 접근방식으로 DEDB를 사용한다.

  • INDEX : HIDAM 데이터베이스의 Primary Index를 정의하거나, HDAM 또는 HIDAM 데이터베이스의 Secondary Index를 정의할 때 사용한다.

  • LOGICAL : 현재 기술하는 데이터베이스는 논리 데이터베이스임을 의미한다.

PASSWD

VSAM 패스워드로 DBD 이름을 사용할지의 여부를 결정한다. (기본값: NO)

VERSION

DBD를 식별할 수 있는 문자열을 최대 255자까지 지정할 수 있다.

RMNAME

ACCESS 파라미터 값으로 HDAM 또는 DEDB가 지정이 되었을 때, 데이터베이스 안에 저장되는 데이터를 관리하는 정보를 지정한다.

이 정보에 의해 임의추출(Randomizer) 모듈이 동작하는 방식이 결정된다.

OpenFrame HiDB에서는 VSAM 패스워드를 사용하지 않는다.

DATASET 문

DATASET 문은 데이터베이스 안에서의 데이터셋 그룹을 정의한다.

  • HSAM(SHSAM) 데이터베이스

    다음은 HSAM(SHSAM) 데이터베이스를 위한 DATASET 문이다.

    DATASET DD1=ddname1,DD2=ddname2
          [,BLOCK=(blkfact1,blkfact2)]
          [,RECORD=(reclen1,reclen2)]
  • HISAM(SHISAM) 데이터베이스

    다음은 HISAM(SHISAM) 데이터베이스를 위한 DATASET 문이다.

    DATASET DD1=ddname1,OVFLW=ddname3
          [,BLOCK=(blkfact1,blkfact2)]
          [,SIZE=(size1,size2)]
          [,RECORD=(reclen1,reclen2)]

    SHISAM 데이터베이스는 OVFLW를 기술하지 않는다.

  • HDAM / HIDAM 데이터베이스

    다음은 HDAM 또는 HIDAM 데이터베이스를 위한 DATASET 문이다.

    DATASET DD1=ddname1
          [,BLOCK=size0]
          [,SIZE=(,size1)]
          [,SCAN=cyls]
          [,FRSPC=(fbff,fspf)]
          [,SEARCHA=0|1|2]
  • INDEX 데이터베이스

    다음은 INDEX 데이터베이스를 위한 DATASET 문이다.

    DATASET DD1=ddname1,OVFLW=ddname3
          [,BLOCK=(blkfact1,blkfact2)]
          [,SIZE=(size1,size2)]
          [,RECORD=(reclen1,reclen2)]
  • LOGICAL 데이터베이스

    다음은 LOGICAL 데이터베이스를 위한 DATASET 문이다.

    DATASET LOGICAL

다음은 DATASET 문의 파라미터에 대한 설명이다.

항목 설명

DD1

데이터셋 그룹의 첫 번째 데이터셋의 DD 이름을 지정한다.

데이터베이스 유형에 따라 다음과 같은 의미를 갖는다.

  • HSAM : 입력 데이터셋의 DD 이름을 지정한다.

  • SHSAM : 입력 데이터셋의 DD 이름을 지정한다.

  • HISAM : 기본 데이터셋의 DD 이름을 지정한다.

  • SHISAM : 기본 데이터셋의 DD 이름을 지정한다.

  • HDAM : 데이터셋의 DD 이름을 지정한다.

  • HIDAM : 데이터셋의 DD 이름을 지정한다.

  • INDEX : 기본 데이터셋의 DD 이름을 지정한다.

  • LOGICAL : 잘못된 파라미터 지정이다.

DD2

HSAM(SHSAM) 데이터베이스 유형에서 출력 데이터셋의 DD 이름을 지정한다.

OVFLW

HISAM 데이터베이스 또는 INDEX 데이터베이스 유형에서 오버플로우 데이터셋의 DD 이름을 지정한다.

BLOCK

블록 팩터(blocking factors)를 지정한다. 아래 표에서 자세하게 설명한다.

RECORD

옵션 파라미터로 논리 레코드의 크기를 지정한다. 아래 표에서 자세하게 설명한다.

SIZE

DBDGEN 프러시저에서 VSAM 컨트롤 인터벌 크기를 재정의할 때 사용한다.

SCAN

세그먼트를 삽입할 때 빈 공간을 찾기 위해 검색하는 디바이스의 실린터 개수를 지정한다. OpenFrame HiDB에서는 문법적인 형식만 체크하고 기능적으로 지원하지는 않는다.

FRSPC

HDAM 또는 HIDAM 데이터베이스 유형에서 여유 공간을 얼마만큼 유지할지를 결정한다.

SEARCHA

세그먼트를 삽입할 때 빈 공간을 찾는 알고리즘의 유형을 지정한다. OpenFrame HiDB에서는 문법적인 형식만 체크하고 기능을 지원하지는 않는다.

LOGICAL

LOGICAL 데이터베이스를 정의하고 있는 것을 알려준다.

다음은 앞에서 설명한 BLOCK, RECORD 파라미터에 대한 자세한 설명이다.

  • HSAM(SHSAM) 데이터베이스

    HSAM(SHSAM)은 Unblocked I/O를 사용한다. 따라서 LRECL과 BLKSIZE의 값은 동일하게 지정한다.

    파라미터 설명

    BLOCK

    • blkfact1 : 입력 데이터셋에 대한 블록 팩터를 지정한다. (항상 1)

    • blkfact2 : 출력 데이터셋에 대한 블록 팩터를 지정한다. (항상 1)

    RECORD

    • reclen1 : 입력 데이터셋의 레코드 크기를 지정한다.

    • reclen2 : 출력 데이터셋의 레코드 크기를 지정한다.

  • HISAM(SHISAM), INDEX 데이터베이스

    파라미터 설명

    BLOCK

    • blkfact1 : 기본 데이터셋에 대한 블록 팩터를 지정한다.

    • blkfact2 : 오버플로우 데이터셋에 대한 블록 팩터를 지정한다.

    RECORD

    • reclen1 : 기본 데이터셋의 레코드 크기를 지정한다.

    • reclen2 : 오버플로우 데이터셋에 대한 레코드 크기를 지정한다.

  • HDAM / HIDAM 데이터베이스

    파라미터 설명

    BLOCK

    size0에 오버헤드를 제외한 VSAM 컨트롤 인터벌 크기를 지정한다. VSAM 데이터셋에 대한 기본 오버헤드 값은 5이다.

    RECORD

    지정해도 무시된다.

AREA 문

DEDB 데이터베이스는 AREA 문을 사용해서 데이터를 저장할 데이터셋 영역을 정의한다. DEDB를 정의하는 DBDGEN 스크립트를 작성할 때, 모든 AREA 문은 DBD 문과 첫 번째 SEGM 문 사이에 위치해야 한다.

다음은 DEDB 데이터베이스를 위한 AREA 문이다.

AREA DD1=ddname1
   [,DEVICE=nnnn]
    ,SIZE=size1
    ,UOW=(number1,overflow1)
    ,ROOT=(number2,overflow2)
항목 설명

DD1

정의될 영역의 DD 이름을 지정한다.

DEVICE

물리적인 저장장치의 디바이스 유형을 지정한다.

파라미터를 지정하지 않은 경우 기본값으로 3380이 사용된다.

SIZE

컨트롤 인터벌 크기를 지정한다.

512B, 1KB, 2KB, 4KB, 8KB, 28KB의 값을 사용할 수 있다.

VSAM 데이터셋의 컨트롤 인터벌 크기와 동일하게 지정한다.

UOW

1개의 UOW(Unit of Work)에 사용되는 컨트롤 인터벌 개수를 지정한다.

  • number1 : 1개의 UOW에 사용되는 컨트롤 인터벌 개수이다. (2~32767의 숫자)

  • overflow1 : 동일한 UOW 안에 있는 오버플로우 컨트롤 인터벌 개수이다. number1에 지정된 숫자보다 작은 값이어야 한다.

ROOT

DEDB AREA에 대한 속성을 정의한다.

  • number2 : DEDB AREA에서 사용될 UOW 개수이다.

  • overflow2 : 독립적인 오버플로우 파트에 사용될 UOW 개수이다.

SEGM 문

SEGM 문은 데이터베이스의 세그먼트를 정의한다. 한 데이터베이스 안에서 세그먼트의 계층, 세그먼트의 물리적인 속성, 그리고 다른 세그먼트와의 관계 등을 정의한다.

  • HSAM(SHSAM) 데이터베이스

    다음은 HSAM(SHSAM) 데이터베이스를 위한 SEGM 문이다.

    SEGM NAME=segname1
        ,PARENT=segname2
        ,BYTES=max_bytes
       [,FREQ=frequency]
  • HISAM(SHISAM) 데이터베이스

    다음은 HISAM(SHISAM) 데이터베이스를 위한 SEGM 문이다.

    SEGM NAME=segname1
        ,PARENT=(segname2[(lpsegname,[{VIRTUAL|PHYSICAL}],dbname1)])
        ,BYTES=max_bytes[,min_bytes]
       [,FREQ=frequency]
       [,POINTER|PTR={LPARNT|CTR|PAIRED}]
       [,RULES=([{L|P|V}{L|P|V|B}{L|P|V}],[{LAST|FIRST|HERE}])]
  • HDAM 또는 HIDAM 데이터베이스

    다음은 HDAM 또는 HIDAM 데이터베이스를 위한 SEGM 문이다.

    SEGM NAME=segname1
        ,PARENT=(segname2[,{SNGL|DBLE}][,(lpsegname,[{VIRTUAL|PHYSICAL}],dbname1)])
        ,BYTES=max_bytes[,min_bytes]
       [,POINTER|PTR={HIER|HIERBWD|TWIN|TWINBWD|NOTWIN}
                    ,{LTWIN|LTWINBWD},{LPARNT|CTR|PAIRED}]
       [,RULES=([{L|P|V}{L|P|V|B}{L|P|V}],[{LAST|FIRST|HERE}])]
  • DEDB 데이터베이스

    다음은 DEDB 데이터베이스를 위한 SEGM 문이다.

    SEGM NAME=segname1
        ,PARENT=(segname2[,{SNGL|DBLE}])
        ,BYTES=max_bytes,min_bytes,TYPE={DIR|SEQ}
       [,RULES={HERE|LAST|FIRST}]
  • INDEX 데이터베이스

    다음은 INDEX 데이터베이스를 위한 SEGM 문이다.

    SEGM NAME=segname1
       [,PARENT=0]
        ,BYTES=max_bytes

다음은 SEGM 문의 파라미터에 대한 설명이다.

항목 설명

NAME

현재 정의하고 있는 세그먼트의 이름을 지정한다.

PARENT

현재 정의하고 있는 세그먼트의 부모 세그먼트를 지정한다. 물리적인 부모 세그먼트와 논리적인 부모 세그먼트를 지정할 수 있다.

BYTE[S]

세그먼트의 데이터 부분의 크기를 지정한다. 최대 32760까지 지정할 수 있다.

  • max_bytes : 세그먼트의 최대 데이터 크기를 지정한다. 고정길이 또는 가변길이 세그먼트에 상관없이 반드시 지정해야 한다.

  • min_bytes : 세그먼트의 최소 데이터 크기를 지정한다. 가변길이 세그먼트인 경우에만 기술하며 max_bytes에 기술한 값과 달라야 가변길이 세그먼트로 처리된다.

FREQ

부모 세그먼트의 각각의 인스턴스마다 평균적으로 몇 개의 자식 세그먼트 인스턴스가 있는지 추정값을 지정한다.

POINTER

현재 정의하는 세그먼트의 데이터 앞부분에 저장될 포인터들을 지정한다. 이 포인터들은 현재 세그먼트 인스턴스를 부모 세그먼트 또는 트윈 세그먼트와 관계를 맺게 해준다.

아래의 포인터 유형 중 하나의 값을 가질 수 있다.

  • HIER [H] : 4Byte Hierarchic Forward 포인터를 갖는다.

  • HIERBWD [HB] : 4Byte Hierarchic Forward 포인터와 4Byte Hierarchic Backward 포인터를 갖는다. Hierarchic Backward 포인터는 삭제할 때 성능을 향상시킨다.

  • TWIN [T] : 4Byte 물리 트윈 Forward 포인터를 갖는다.

  • TWINBWD [TB] : 4Byte 물리 트윈 Forward 포인터와 4Byte 물리 트윈 Backward 포인터를 갖는다. 트윈 Backward 포인터는 삭제할 때 성능을 향상시킨다.

  • NOTWIN [NT] : 물리 트윈 Forward 포인터를 사용하지 않도록 설정한다. 물리적인 부모 세그먼트가 2개 이상의 자식 세그먼트를 갖지 않는다면 NOTWIN 설정을 사용할 수 있다.

  • LTWIN [LT] : 실제 논리 자식(Real Logical Child) 세그먼트를 정의할 때 사용한다. 4Byte 논리 트윈 Forward 포인터와 4Byte 논리 트윈 Backward 포인터를 갖는다. 논리 자식을 삭제할 때 좋은 성능을 낸다.

  • LPARNT [LP] : 4Byte 논리 부모 포인터를 갖는다.

  • CTR [C] : 4Byte 카운터 필드를 갖는다. 카운터는 포인터로 연결되지 않는 HISAM 데이터베이스의 논리 부모 세그먼트에 필요하다.

  • PAIRED : 이 세그먼트는 양방향 논리 관계(Bidirectional Logical Relationship)에 포함되어 있음을 나타낸다.

RULES

세그먼트에 대한 추가(Insert), 삭제(Delete), 변경(Replace) 명령을 할 때 지켜야 하는 규칙을 지정한다.

  • FIRST : 새로운 세그먼트 인스턴스는 물리 트윈 세그먼트의 제일 앞에 삽입된다.

  • LAST : 새로운 세그먼트 인스턴스는 물리 트윈 세그먼트의 제일 뒤에 삽입된다.

  • HERE : 새로운 세그먼트 인스턴스는 현재 물리 트윈 세그먼트의 앞에 삽입된다.

TYPE

DEDB 데이터베이스의 종속 세그먼트 유형을 지정한다.

다음 2가지 유형 중 하나를 선택할 수 있다.

  • SEQ : 현재 세그먼트를 순차 독립 세그먼트(Sequential Dependent Segment)로 지정한다.

  • DIR : 현재 세그먼트를 직접 독립 세그먼트(Direct Dependent Segment)로 지정한다.

SOURCE

다음 2가지 용도로 사용된다.

  • 가상 논리 자식 세그먼트를 정의할 때 실제 논리 자식 세그먼트와 연결하기 위해 사용한다.

  • LOGICAL 데이터베이스의 세그먼트를 정의할 때 물리 데이터베이스의 세그먼트와 연결하기 위해 사용한다.

LCHILD 문

LCHILD 문은 2개의 세그먼트 간 Logical Relationship, 2개의 세그먼트 간 HIDAM Primary Index 또는 Secondary Index를 정의한다.

  • HISAM(SHISAM) 데이터베이스

    다음은 HISAM(SHISAM) 데이터베이스를 위한 LCHILD 문이다.

    LCHILD NAME=(segname1,dbname)
         [,POINTER|PTR={DBLE|NONE|SYMB}]
         [,PAIR=segname2]
         [,RULES={LAST|FIRST|HERE}]
  • HDAM 또는 HIDAM 데이터베이스

    다음은 HDAM 또는 HIDAM 데이터베이스를 위한 LCHILD 문이다.

    LCHILD NAME=(segname1,dbname)
         [,POINTER|PTR={DBLE|NONE|INDX|SYMB}]
         [,PAIR=segname2]
         [,RULES={LAST|FIRST|HERE}]
  • INDEX 데이터베이스

    다음은 INDEX 데이터베이스를 위한 LCHILD 문이다.

    LCHILD NAME=(segname1,dbname)
         [,POINTER|PTR={SNGL|SYMB}]
          ,INDEX=fldname

다음은 LCHILD 문의 파라미터에 대한 설명이다.

항목 설명

NAME

segname1에 논리 자식이나 인덱스 포인터 또는 인덱스 대상의 이름을 지정한다. dbname에 segname1에 지정한 세그먼트가 정의되어 있는 데이터베이스 이름을 지정한다.

POINTER

Logical Relationship 또는 인덱스 관계에서 사용되는 포인터를 지정한다.

  • SNGL : 4Byte 논리 자식의 첫 포인터가 사용된다. Logical Relationship 또는 인덱스 관계에서 사용된다.

  • DBLE : 논리 부모 세그먼트에 4Byte 논리 자식의 첫 포인터와 4Byte 논리 자식의 마지막 포인터가 저장된다.

  • NONE : 논리 부모 세그먼트에 논리 자식 포인터가 저장되지 않는다.

  • INDX : HIDAM 데이터베이스에서 특정 세그먼트와 Secondary Index의 연결과 루트 세그먼트와 Primary Index의 연결에 사용된다.

  • SYMB : HISAM, HDAM, HIDAM 데이터베이스에서 Secondary Index의 연결을 위해 사용된다. 대상이 되는 인덱스 DBD의 LCHILD 문에서도 명시되어야 한다.

PAIR

양방향 Logical Relationship에서 물리적인 또는 가상적인 페어(Pair) 세그먼트를 지정하기 위해 사용된다.

RULES

Logical Relationship에서 논리 자식 트윈들 사이에서의 삽입 순서를 결정한다.

  • FIRST : 새로운 논리 인스턴스는 모든 논리 트윈 인스턴스의 맨 앞에 삽입된다.

  • LAST : 새로운 논리 인스턴스는 모든 논리 트윈 인스턴스의 맨 뒤에 삽입된다.

  • HERE : 새로운 논리 인스턴스는 현재 논리 트윈 인스턴스의 앞에 삽입된다.

INDEX

INDEX 데이터베이스의 LCHILD 문장에서 사용된다.

fldname은 HIDAM 주요 인덱스의 루트 세그먼트를 지정하거나, HIDAM Secondary Index의 XDFLD를 나타낸다.

FIELD 문

FIELD 문은 한 세그먼트 안에서의 필드를 정의한다.

  • HSAM(SHSAM) 데이터베이스

    다음은 HSAM(SHSAM) 데이터베이스를 위한 FIELD 문이다.

    FIELD NAME=(fldname1[,SEQ,{U|M}])
         ,BYTES=bytes
         ,START=startpos
        [,TYPE={C|X|P}]
  • HISAM(SHISAM), HDAM, HIDAM 데이터베이스

    다음은 HISAM(SHISAM), HDAM, HIDAM 데이터베이스를 위한 FIELD 문이다.

    FIELD NAME={(fldname1[,SEQ,{U|M}])|systrelfldname}
         ,BYTES=bytes
         ,START=startpos
        [,TYPE={C|X|P}]
  • DEDB 데이터베이스

    다음은 DEDB 데이터베이스를 위한 FIELD 문이다.

    FIELD NAME=(fldname1[,SEQ,U])
         ,BYTES=bytes
         ,START=startpos
        [,TYPE={C|X|P}]
  • INDEX 데이터베이스

    다음은 INDEX 데이터베이스를 위한 FIELD 문이다.

    FIELD NAME=(fldname1[,SEQ,{U|M}])
         ,BYTES=bytes
         ,START=startpos
        [,TYPE={C|X|P}]

다음은 FIELD 문의 파라미터에 대한 설명이다.

항목 설명

NAME

한 세그먼트에서 정의되는 필드의 이름을 지정한다.

  • SEQ : 현재 정의되는 필드가 순서 필드임을 알려준다.

  • U, M : 순서의 유형을 지정한다. U는 순서 필드에 유일한 값만이 저장되고, M은 순서 필드에 같은 값을 갖는 항목이 저장될 수 있는 것을 의미한다.

  • systrelfldname : 시스템 연관 필드를 정의한다. Secondary Index에서 키를 유일하게 만들기 위해 사용되고, CK 또는 SK 2가지 유형이 있다.

BYTE[S]

현재 정의하는 필드의 크기를 지정한다.

START

현재 정의하는 필드의 시작 위치를 지정한다.

TYPE

현재 정의하는 필드의 데이터 타입을 지정한다.

다음과 같은 상수를 사용할 수 있다.

  • C : Alphanumeric Data or a Combination of Types of Data (기본값)

  • P : Packed Decimal Data

  • X : Hexadecimal Data

XDFLD 문

XDFLD 문은 Secondary Index 관계에서 사용되는 색인 필드를 정의한다.

다음은 HISAM(SHISAM), HDAM 또는 HIDAM 데이터베이스를 위한 XDFLD 문이다.

XDFLD NAME=fldname
    [,SEGMENT=segname]
    [,CONST=char]
     ,SRCH=list1
    [,SUBSEQ=list2]
    [,DDATA=list3]
    [,NULLVAL=value1]
항목 설명

NAME

색인 데이터 필드의 이름을 지정한다.

SEGMENT

인덱스 소스 세그먼트의 이름을 지정한다.

SRCH

인덱스 소스 세그먼트의 필드 리스트를 지정한다.

SUBSEQ

Secondary Index의 Subsequence 필드를 지정한다.

DDATA

Secondary Index의 Duplicate Data 필드를 지정한다.

OpenFrame HiDB에서는 XDFLD 문에서 CONST 및 NULLVAL 파라미터를 지원하지 않는다.

DBDGEN, END, FINISH 문

DBD 생성 컨트롤 문장에는 3가지 추가적인 컨트롤문이 있다.

구분 설명

DBDGEN 문

DBD 생성 컨트롤문의 마지막을 나타낸다.

END 문

어셈블리 입력문의 마지막을 나타낸다.

FINISH 문

선택적이며 호환성을 위해 존재한다.

DBDGEN 문과 END 문은 반드시 사용되어야 하지만 FINISH 문은 선택적으로 사용할 수 있다.

2.4. 사용예제

다음은 DBDGEN 프러시저를 사용하여 HIDAM 데이터베이스를 정의하는 JCL 예제이다.

//DBDGEN  JOB MSGLEVEL=1
//       EXEC DBDGEN,MBR=SKILLINV
//C.SYSIN  DD *
       DBD     NAME=SKILLINV,ACCESS=HIDAM
       DATASET   DD1=SKLHIDAM,BLOCK=1648,SCAN=5
*
       SEGM  NAME=SKILL,BYTES=31,PTR=T,PARENT=0
       LCHILD NAME=(INDE,INDEXDB),PTR=INDX
*
       FIELD NAME=(TYPE,SEQ,U),BYTES=21,START=1,TYPE=C
       FIELD NAME=SDCODE,BYTES=10,START=22,TYPE=C
*
       SEGM  NAME=NAME,BYTES=20,PTR=T,PARENT=((SKILL,SNGL))
       FIELD NAME=(STDCLEVL,SEQ,U),BYTES=20,START=1,TYPE=C
*
       SEGM  NAME=EXPR,BYTES=20,PTR=T,PARENT=((NAME,SNGL))
       FIELD NAME=PREVJOB,BYTES=10,START=1,TYPE=C
       FIELD NAME=CLASSIF,BYTES=10,START=11,TYPE=C
*
       SEGM  NAME=EDUC,BYTES=75,PTR=T,PARENT=((NAME,SNGL))
       FIELD NAME=GRADLEVL,BYTES=10,START=1,TYPE=C
       FIELD NAME=SCHOOL,BYTES=65,START=11,TYPE=C
*
       DBDGEN
       FINISH
       END
/*

2.5. 유의사항

DBDGEN 유틸리티 프로그램을 실행한 결과는 다음과 같다.

  • 정상적으로 실행한 경우

    코드 0을 반환한다.

  • 에러가 발생한 경우

    에러가 발생한 경우에는 해당 에러 메시지를 SYSPRINT DD로 출력하고 각 에러에 해당하는 코드를 반환한다.

    DBDGEN 유틸리티 프로그램에서 발생할 수 있는 에러 코드는 다음과 같다.

    코드 설명

    12

    Unrecoverable 에러로 다음의 경우에 발생한다.

    • SYSLIN DD 또는 SYSLMOD DD를 제공하지 않은 경우

    • SYSLIN DD 또는 SYSLMOD DD의 유형이 맞지 않는 경우

    • SYSIN DD 스크립트 문장의 문법 에러가 발생한 경우

    16

    시스템 에러로, 다음의 경우에 발생한다.

    • OpenFrame 시스템 라이브러리 초기화에 실패한 경우

    • SYSLIN DD 또는 SYSLMOD DD OPEN 에러가 발생한 경우

    • SYSIN DD 또는 SYSLIN DD 읽기 에러가 발생한 경우

3. PSBGEN

PSBGEN 유틸리티는 애플리케이션에서 바라보는 HiDB 데이터베이스에 대한 논리 구조 및 데이터 커뮤니케이션과의 인터페이스 블록을 정의한다. 정의된 프로그램 접근 사양(Program Access Specification) 블록은 시스템 라이브러리에 저장된다.

다음은 PSBGENC0 프로그램과 DFSILNK0 프로그램을 실행시키는 PSBGEN 프러시저의 내용을 보여주는 예로, 아래와 같이 2개의 스텝으로 이루어져 있다.

//       PROC  MBR=TEMPNAME,SOUT=A,RGN=4M,SYS2=
//C      EXEC  PGM=PSBGENC0,REGION=&RGN,PARM='OBJECT,NODECK'
//SYSLIB   DD  DSN=IMS.&SYS2MACLIB,DISP=SHR
//SYSLIN   DD  UNIT=SYSDA,DISP=(,PASS),
//             SPACE=(80,(100,100),RLSE),
//             DCB=(BLKSIZE=80,RECFM=F,LRECL=80)
//SYSPRINT DD  SYSOUT=&SOUT,DCB=BLKSIZE=1089,
//             SPACE=(121,(300,300),RLSE,,ROUND)
//SYSUT1   DD  UNIT=SYSDA,DISP=(,DELETE),
//             SPACE=(CYL,(10,5))
//L      EXEC  PGM=DFSILNK0,PARM='XREF,LIST',COND=(0,LT,C)
//SYSLIN   DD  DSN=*.C.SYSLIN,DISP=(OLD,DELETE)
//SYSPRINT DD  SYSOUT=&SOUT,DCB=BLKSIZE=1089,
//             SPACE=(121,(90,90),RLSE)
//SYSLMOD  DD  DSN=IMS.&SYS2PSBLIB(&MBR),DISP=SHR
//SYSUT1   DD  UNIT=SYSDA,DISP=(,DELETE),
//             SPACE=(1024,(100,10),RLSE)

위 PSBGEN 프러시저의 첫 번째 과정인 C 스텝은 컴파일 스텝으로 SYSIN으로 입력된 PSB 정의 스크립트를 컴파일하기 위해 PSBGENC0 유틸리티를 실행시켜 오브젝트 모듈을 생성한다. 두 번째 스텝인 L 스텝은 DFSILNK0 유틸리티를 실행시키는 Link-Edit 스텝으로 앞의 컴파일 과정에서 생성한 오브젝트 모듈을 시스템 라이브러리로 복사하는 작업을 수행한다.

3.1. DD 설정

DD 설정 항목은 다음과 같다.

항목 설명

SYSIN DD

PSB 컴파일러로 컴파일하기 위한 PSB 스크립트 입력 데이터셋을 지정한다.

SYSLMOD DD

IMS.PSBLIB 등의 PSB 블록을 저장하기 위한 PDS 데이터셋을 지정한다.

3.2. JCL 파라미터

JCL 파라미터 항목은 다음과 같다.

항목 설명

MBR

생성하는 PSB의 이름을 지정한다. 이곳에 지정된 이름은 PSBGEN 문의 PSBNAME 파라미터에 지정된 이름과 동일해야 한다.

SOUT

SYSOUT DD 문장에 할당될 클래스를 지정한다. (기본값: 'A')

SYS2

IMS 시스템 데이터셋의 두 번째 Qualifier를 지정한다. (예: SYS2='IMSA.')

3.3. 명령어 설정

PSBGEN 유틸리티에서는 PSB 컨트롤문을 사용하여 PSB 블록을 생성한다.

다음은 PSBGEN 유틸리티를 사용할 경우에 PSB 컨트롤문의 입력 순서를 나타낸 것이다.

PCB TYPE=TP .............. 논리 단말 PCB 정보
PCB TYPE=DB .............. 데이터베이스 PCB 정보
  SENSEG
    SENFLD
    SENFLD
PCB TYPE=DB
  SENSEG
  SENSEG
PSBGEN ................... PSB 블록 정의 종료
END ...................... 컨트롤 문장의 종료

다음은 PSBGEN 유틸리티를 사용할 경우의 PSB 컨트롤문에 대한 설명이다.

컨트롤문 설명

Alternate PCB 문

현재 입력 메시지의 출처 이외의 목적지를 기술하기 위해 사용한다. (PSBGEN 유틸리티를 사용할 경우)

데이터베이스 PCB 문

DL/I 또는 FastPath 데이터베이스를 위한 PCB를 기술한다.

SENSEG 문

애플리케이션이 사용하는 데이터베이스 세그먼트를 선언한다.

SENFLD 문

SENSEG로 지정된 세그먼트에서 애플리케이션이 사용하는 필드를 지정한다.

PSBGEN 문

PSB 블록에 대한 정의의 종료를 지정한다.

END 문

컨트롤문의 종료를 지정한다.

Alternate PCB 문

현재 입력 메시지의 출처 이외의 목적지를 기술하기 위해 사용한다. (PSBGEN 유틸리티를 사용할 경우)

Alternate PCB 문의 형식은 다음과 같다.

PCB TYPE=TP
  [,LTERM|NAME=name]
  [,ALTRESP={NO|YES}]
  [,SAMETRM={NO|YES}]
  [,MODIFY={NO|YES}]
  [,EXPRESS={NO|YES}]
  [,PCBNAME=pcbname]
  [,LIST={YES|NO}]
항목 설명

TYPE

모든 Alternate PCB에 대한 필수 파라미터이다.

LTERM

메시지가 출력될 논리 단말 이름이나 트랜잭션 코드를 지정한다.

ALTRESP

Alternate PCB가 I/O PCB 대신 사용될 수 있는지 지정한다.

SAMETRM

논리 단말이 실제 물리 단말에 할당되어 있는지 지정한다.

MODIFY

이 Alternate PCB가 애플리케이션 안에서 변경 가능한지 지정한다.

EXPRESS

애플리케이션이 ABEND되었을 때, 이 Alternate PCB에서 나온 메시지가 목적 단말로 보내져야 하는지 아니면 제거되어야 하는지를 지정한다.

PCBNAME

PCB 이름을 지정한다. 어셈블러 레이블로 대체할 수 있다.

LIST

애플리케이션이 실행될 때 애플리케이션의 진입 포인트로 전달되는 PCB 목록에 리스트가 포함될지 여부를 결정한다.

데이터베이스 PCB 문

두 번째 유형의 PCB 문은 DL/I 또는 FastPath 데이터베이스를 위한 PCB를 기술한다.

데이터베이스 PCB 문의 형식은 다음과 같다.

PCB TYPE=DB
   ,DBDNAME|NAME=name
  [,PCBNAME=pcbname]
  [,PROCOPT=nnnn]
  [,SB={NO|COND}]
   ,KEYLEN=value
  [,POS={SINGLE|MULTIPLE}]
  [,PROCSEQ=index_dbname]
  [,VIEW=MSDB]
  [,LIST={YES|NO}]
항목 설명

TYPE

모든 DL/I 데이터베이스 PCB에 대한 필수 파라미터이다.

DBDNAME

물리 데이터베이스 이름을 지정한다.

PCBNAME

PCB의 이름을 지정한다. 어셈블러 레이블로 대체할 수 있다.

PROCOPT

PCB 처리 파라미터를 지정한다.

최대 4개의 알파벳 문자를 사용하여 설정할 수 있으며, 다음과 같은 알파벳 문자를 지원한다.

  • G : Get 기능이다.

  • I : Insert 기능이다. (HSAM(SHSAM)에서는 지정하면 안됨)

  • R : Replace 기능이다. (Get 기능 포함, HSAM(SHSAM)에서는 지정하면 안됨)

  • D : Delete 기능이다. (Get 기능 포함, HSAM(SHSAM)에서는 지정하면 안됨)

  • A : Get, Insert, Replace, Delete의 4가지 기능을 포함한다.

    (기본값, HSAM(SHSAM)에서는 지정하면 안됨)

  • L : 데이터베이스를 Load하는 기능이다. (단, HIDAM 제외)

  • GS : 오름차순으로 세그먼트를 가져오는 기능이다. (HSAM(SHSAM)만 해당)

  • LS : 오름차순으로 세그먼트를 Load하는 기능이다. (HIDAM만 해당)

  • O : 애플리케이션 프로그램이 데이터베이스에 읽기 전용으로 접근하는 기능이다. 다른 프로그램에 의해 Hold 또는 수정 중인 세그먼트일지라도 기다리지 않고 바로 접근이 가능해진다. 그러나 O 옵션을 지정한 프로그램에서는 세그먼트를 Hold 또는 수정할 수 없으며 G 옵션과 함께 지정해야 한다.

  • N : 읽기 전용 애플리케이션 프로그램에서 다른 프로그램에 의해 수정되거나 삭제된 세그먼트의 정보를 계속 가지고 있어 잘못된 포인터로 다른 세그먼트를 참조하는 경우가 발생할 수 있다. 이때 기본적으로 프로그램은 즉시 비정상 종료 처리된다. 그러나 N 옵션을 지정한 경우 비정상 종료처리 대신 상태코드에 GG를 설정하여 프로그램에 반환함으로써 처리를 종료할지 계속할지 프로그램에서 결정할 수 있다. N 옵션은 O 옵션과 함께 지정해야 한다.

SB

순차 버퍼링(Sequential Buffering) 기법을 사용할지의 여부를 결정하는 항목으로 미지원 기능이다.

KEYLEN

가장 긴 연쇄 키의 길이를 지정한다. (1~3825)

POS

논리 데이터 구조에서 1개 또는 여러 개의 포지셔닝을 지원할지를 지정한다.

다음과 같은 약자를 사용할 수 있다.

  • SINGLE : 가장 최근에 접근한 세그먼트에 대한 포지션 하나만 유지한다.

    따라서 새로운 세그먼트를 조회한 경우 이전 세그먼트 포지션의 정보는 지워진다. (기본값)

  • MULTIPLE : 접근 중인 세그먼트의 계층경로에 있는 모든 세그먼트에 대한 포지션을 유지한다. 따라서 계층 경로에 있는 각각의 세그먼트에 대한 병렬조회를 하는 경우 GU를 호출하여 포지션을 재설정하지 않아도 된다. (HSAM에서는 지정할 수 없으며 HDAM과 HIDAM에서만 지원하고 있음)

PROCSEQ

데이터베이스에 접근하기 위한 Secondary Index 이름을 지정한다.

VIEW

MSDB 커밋 뷰를 제공하는 항목으로 미지원 기능이다.

LIST

애플리케이션이 실행될 때 애플리케이션의 진입 포인트로 전달되는 PCB 목록에 리스트가 포함될지 여부를 결정한다.

Multiple 포지셔닝에 대한 자세한 내용은 IBM 매뉴얼 중에 "IMS Application Programming: Database Manager"의 "Using Multiple Processing" 섹션을 참고한다.

SENSEG 문

SENSEG 문은 계층적으로 연결되어 있는 데이터 세그먼트를 정의하기 위해 사용한다. 센시티브 세그먼트를 지정할 때는 계층 경로상에 상위 레벨의 세그먼트도 모두 센시티브 세그먼트여야 한다.

SENSEG 문의 형식은 다음과 같다.

SENSEG NAME=name
      ,PARENT=name
     [,PROCOPT=nnnn]
     [,INDICES|SIENTRY=list1]
항목 설명

NAME

DBD를 생성할 때 SEGM 문을 통해 정의되었던 세그먼트의 이름을 지정한다.

PARENT

현재 세그먼트의 부모 세그먼트를 적어준다.

PROCOPT

연관된 애플리케이션에서 사용될 세그먼트 처리 파라미터를 지정한다.

특정 세그먼트만 읽거나 변경할 수 없도록 하는 등의 보안처리를 할 수 있다. 처리가능 파라미터를 4자 이내로 조합하여 지정한다.

지정을 생략한 경우 기본값은 PCB 문의 PROCOPT의 값을 따른다.

  • G : Get 기능이다.

  • I : Insert 기능이다. (HSAM(SHSAM)에서는 지정하면 안됨)

  • R : Replace 기능이다. (Get 기능 포함, HSAM(SHSAM)에서는 지정하면 안됨)

  • D : Delete 기능이다. (Get 기능 포함, HSAM(SHSAM)에서는 지정하면 안됨)

  • A : Get, Insert, Replace, Delete의 4가지 기능을 포함한다.

    (기본값, HSAM(SHSAM)에서는 지정하면 안됨)

  • L : 데이터베이스를 Load하는 기능이다. (단, HIDAM 제외)

  • LS : 오름차순으로 세그먼트를 Load하는 기능이다. (HIDAM만 해당)

INDICES

어떤 Secondary Index가 인덱스 세그먼트에 대한 검색 필드를 담고 있는지 지정한다.

SENFLD 문

SENSEG 문과 함께 사용되어 애플리케이션에서 어떤 필드를 사용할 수 있는지 지정한다. 단, SENFLD 문을 지정했을 경우 그 세그먼트에 대해서는 DLET/REPL/ISRT 콜은 발행할 수 없다.

SENFLD 문의 형식은 다음과 같다.

SENFLD NAME=name,
       START=startpos
     [,REPLACE|REPL={YES|NO}]
항목 설명

NAME

DBD를 생성할 때 FIELD 문을 통해 정의되었던 필드의 이름을 지정한다.

START

사용자 I/O 영역에서 해당 필드의 시작 위치를 지정한다.

주의사항은 다음과 같다.

  • (시작 위치 + 필드 길이)가 32767을 넘어서는 안 된다.

  • 다른 SENFLD 문과 필드 영역이 중복되지 않게 지정한다. 만약 중복되면 애플리케이션의 데이터 영역에서 데이터가 깨지는 현상이 일어날 수 있다.

REPLACE

REPLACE 요청을 통해 해당 필드가 변경될 수 있는지의 여부를 지정한다.

PSBGEN 문

PSBGEN 문은 애플리케이션의 속성을 지정한다.

PSBGEN 문의 형식은 다음과 같다.

PSBGEN PSBNAME=name
     [,LANG={COBOL|PL/I|ASSEM|PASCAL|blank}]
     [,MAXQ={0|nr}]
     [,CMPAT={NO|YES}]
     [,IOASIZE=value]
     [,SSASIZE=value]
     [,IOEROPN={n|(n,WTOR)}]
     [,OLIC={NO|YES}]
     [,GSROLBOK={NO|YES}]
     [,LOCKMAX={0|n}]
항목 설명

PSBNAME

현재 정의하는 PSB 블록의 이름을 지정한다.

LANG

메시지 프로그램 또는 배치 프로그램이 작성된 컴파일러 언어를 지정한다.

다음과 같은 약자를 사용할 수 있다.

  • ASSEMBLY : A 또는 ASSEM

  • COBOL : C

  • PL/I : P 또는 PLI

MAXQ

Qx 명령어 코드를 포함한 데이터베이스 호출의 최대 개수를 지정한다.

CMPAT

BMP 프로그램 또는 메시지 프로그램에서의 호환성을 표시한다. 만약 CMPAT=YES이면 해당 PSB는 맨 앞에 I/O PCB를 포함하고 있는 것으로 간주된다.

IOASIZE

애플리케이션에서 사용하는 I/O 영역의 최대 크기를 지정한다.

SSASIZE

애플리케이션에서 사용하는 SSA의 최대 길이를 지정한다.

LOCKMAX

애플리케이션이 동시에 획득할 수 있는 LOCK의 최대 개수를 지정한다.

OpenFrame HiDB에서는 PSBGEN 문의 IOEROPN, OLIC, GSROLBOK 파라미터는 지원하지 않는다.

END 문

컨트롤문의 종료를 지정한다.

3.4. 사용예제

다음은 PSBGEN 프러시저를 사용하여 PSB 블록을 생성하는 JCL 예제이다.

//PSBGEN  JOB MSGLEVEL=1
//       EXEC PSBGEN,MBR=APPLPGM1
//C.SYSIN  DD *
       PCB    TYPE=TP,NAME=OUTPUT1,PCBNAME=OUTPCB1
       PCB    TYPE=TP,NAME=OUTPUT2,PCBNAME=OUTPCB2
       PCB    TYPE=DB,DBDNAME=PARTMSTR,PROCOPT=A,KEYLEN=100
       SENSEG NAME=PARTMAST,PARENT=0,PROCOPT=A
       SENSEG NAME=CPWS,PARNET=PARTMAST,PROCOPT=A
       SENSEG NAME=POLN,PARENT=PARTMAST,PROCOPT=A
       SENSEG NAME=OPERTON,PARENT=PARTMAST,PROCOPT=A
       SENSEG NAME=INVSTAT,PARENT=OPERTON,PROCOPT=A
       SENSEG NAME=OPERSGMT,PARENT=OPERTON
       PSBGEN LANG=COBOL,PSBNAME=APPLPGM1
       END
/*

3.5. 유의사항

PSBGEN 유틸리티 프로그램을 실행한 결과는 다음과 같다.

  • 정상적으로 실행한 경우

    코드 0을 반환한다.

  • 에러가 발생한 경우

    에러가 발생한 경우에는 해당 에러 메시지를 SYSPRINT DD로 출력하고 각 에러에 해당하는 코드를 반환한다.

    DBDGEN 유틸리티 프로그램에서 발생할 수 있는 에러 코드는 다음과 같다.

    코드 설명

    12

    Unrecoverable 에러로, 다음의 경우에 발생한다.

    • SYSLIN DD 혹은 SYSLMOD DD를 제공하지 않은 경우

    • SYSLIN DD 혹은 SYSLMOD DD의 유형이 맞지 않는 경우

    • SYSIN DD 스크립트 문장의 문법 오류가 발생한 경우

    16

    시스템 에러로, 다음의 경우에 발생한다.

    • OpenFrame 시스템 라이브러리 초기화에 실패한 경우

    • SYSLIN DD 또는 SYSLMOD DD OPEN 에러가 발생한 경우

    • SYSIN DD 또는 SYSLIN DD 읽기 에러가 발생한 경우