설치 및 시작하기
본 장에서는 OpenFrame NDB에 대한 구성과 설치를 위한 준비과정과 설치를 위한 환경설정 방법에 대해 기술한다.
1. 구성 및 준비
OpenFrame NDB(Network Database, 이하 NDB)는 Fujitsu Mainframe의 AIM/DB 제품에 대응되는 TmaxSoft의 OpenFrame 제품으로 사용하기 위해서는 시스템적으로 몇 가지 준비사항이 필요하다.
다음은 NDB의 주요 구성요소에 대한 설명이다.
-
NDB Nucleus
NDB의 중심이 되는 영역이다. 입력 받은 ADL을 분석하거나 NDB 데이터를 처리하고 관련 메모리 버퍼 및 저장 공간 등을 관리하는 기능을 담당한다.
-
인터페이스
Fujitsu AIM/DB와 동일한 인터페이스를 제공하여 COBOL, PL/I, C 등의 기존 프로그램을 그대로 사용할 수 있도록 한다.
-
스키마 정보
NDB에서 ndbadlgen 툴을 이용하여 스키마의 정보를 토대로 NDB 메타 테이블에 저장하게 된다. ndbadlgen 툴에 대한 자세한 설명은 OpenFrame NDB 시스템 툴 을 참고한다.
2. 디렉터리 구조
OpenFrame AIM 설치가 완료되면 NDB와 관련된 툴, 유틸리티 및 라이브러리 파일들이 제대로 설치되었는지 확인한다.
다음은 NDB와 관련된 툴, 유틸리티 및 라이브러리 파일들이 설치된 위치를 나타내는 OpenFrame 디렉터리 구조이다.
${OPENFRAME_HOME} |---- bin |---- cobcopy |---- subscpy |---- config |---- data |---- ndb |---- lib |---- temp |---- lib |---- scripts |---- util
- bin
-
NDB가 제공하는 툴이 저장되는 위치이다. NDB 툴 프로그램은 NDB의 생성, 삭제, 변경 등 NDB 운영에 필요한 기능과 데이터 마이그레이션에 관련된 기능을 제공하여, 시스템 운영자의 작업에 편의성을 높여주는 역할을 한다. 하위에 위치하는 툴에 대한 자세한 설명은 OpenFrame NDB 시스템 툴 을 참고한다.
- cobcopy/subscpy
-
subsc 툴에 의해 만들어진 서브스키마의 copybook이 저장되는 위치이다. subsc 툴에 대한 자세한 설명은 OpenFrame NDB 시스템 툴 을 참고한다.
- config
-
환경설정 파일이 저장되는 위치이다. 하위에 위치하는 환경설정 파일에 대한 자세한 설명은 "OpenFrame 환경설정 안내서"를 참고한다.
- data
-
NDB의 에러코드 파일이 저장된다.
- ndb/lib
-
다음은 하위 디렉터리에 대한 설명이다.
디렉터리 설명 lib
NDB의 각 스키마의 레코드 I/O에 필요한 .so 파일이 저장된다.
temp
ndbmgr schm dmlgen으로 만들어진 각 스키마의 레코드에 따른 .tbc 파일이 저장되는 위치이다. ndbmgr schm dmlgen 툴에 대한 자세한 설명은 OpenFrame NDB 시스템 툴 을 참고한다.
- lib
-
NDB에서 제공되는 라이브러리가 저장되는 위치이다. 다음은 NDB의 라이브러리 및 기능에 대한 설명이다.
라이브러리 설명 libndb.so
NDB 레코드의 조회, 저장, 변경 등의 데이터 입출력 처리와 인덱싱 관리 등의 주요 기능을 제공한다.
libndbcom.so
NDB에서 공통으로 사용하는 기능을 처리한다.
libndbddl.so
NDB 레코드 조회, 저장, 변경 등을 위한 테이블과 인덱스를 생성 및 삭제 처리한다.
libndbdml.so
NDB 레코드의 조회, 저장, 변경, 데이터 입출력 처리 등의 주요 기능을 제공한다.
libndbmeta.so
NDB 데이터베이스를 정의하거나 데이터베이스에 접근하는 애플리케이션의 특성을 기술하는데 사용되는 ADL을 처리하여 메타 데이터를 저장한다.
libndbrstd.so
NDB의 레코드 자원에 RESTRICT와 INHIBIT을 수행해 자원을 폐색하거나 자원이 폐색되어있는지 확인한다.
- scripts
-
NDB의 DML 작업의 I/O를 위해 공통적으로 사용되는 기능을 템플릿의 형태로 해당 경로에 저장되어 제공된다.
- util
-
NDB가 제공하는 유틸리티가 저장되는 위치이다. NDB는 데이터베이스를 구축하고 운영하기 위해 필요한 여러 가지 독립적인 유틸리티들을 제공한다. 이러한 유틸리티 중 NDB 데이터베이스, 인덱스 및 확장 인덱스의 운영을 지원하기 위한 기능들이 제공되는 프로그램을 NDB 유틸리티라고 한다. 하위에 위치하는 유틸리티에 대한 자세한 설명은 OpenFrame NDB 유틸리티 를 참고한다.
3. 시작하기
본 절에서는 NDB를 사용하기 위한 절차 및 방법, 애플리케이션 예제 등을 설명한다. 또한 스키마를 작성하고 NDB 데이터베이스를 생성하는 방법과 애플리케이션을 통한 NDB DML 사용법을 알아본다.
3.2. DB 스키마 생성
NDB 데이터베이스를 생성하기 전에 스키마 파일을 작성해야 한다. 스키마 파일은 사용하고자 하는 데이터베이스의 물리적, 논리적 구조와 더불어 레코드 유형, 관련 확장 인덱스 정보 등을 담고 있다.
스키마 파일은 스키마 명령을 사용하여 NDB를 정의한다. 스키마 명령에 대한 자세한 설명과 사용법은 Fujitsu사의 “OS IV AIM ADL REFERENCE MANUAL (V20L10)”을 참고한다. |
다음은 생성할 NDB 데이터베이스의 구조를 나타낸 그림이다.
다음 예제는 위 NDB 데이터베이스 생성을 위한 DB 스키마 파일의 내용이다.
*********************** * SCHEMA ENTRY * *********************** SCHEMA NAME IS SCHOOL FOR DB ; SCHEMA GROUP NAME IS SG01 ; AUTHOR IS RONA ; DATE-WRITTEN 2019.12.05 ; REMARKS CREATE SCHOOL TABLE. *********************** * RECORD ENTRY * *********************** RECORD NAME IS CLASS1 ; LOCATION MODE IS INDEX USING CLA-NAME. 01 CLA-AREA ; PIC X(2). 01 CLA-NAME ; PIC X(30). 01 CLA-TEL ; PIC 9(10). RECORD NAME IS SUBJECT. 01 SUB-NAME ; PIC X(20). 01 SUB-TEL ; PIC 9(10). RECORD NAME IS TEACHER ; LOCATION MODE IS INDEX USING TEA-NAME. 01 TEA-NAME ; PIC X(20). 01 TEA-ED ; PIC X(2). 01 TEA-BD ; PIC 9(8). 01 TEA-NO ; PIC 9(8). RECORD NAME IS STUDENT. 01 STU-NAME ; PIC X(20). 01 STU-BD ; PIC X(2). *********************** * SET ENTRY * *********************** SET NAME IS CLASUB ; OWNER IS CLASS1 ; MEMBER IS SUBJECT LINKED TO PRIOR. SET NAME IS SUBTEA ; OWNER IS SUBJECT ; INSERTION IS LAST ; MEMBER IS TEACHER LINKED TO PRIOR. SET NAME IS TEASTU ; OWNER IS TEACHER ; MEMBER IS STUDENT LINKED TO PRIOR. *********************** * RANGE ENTRY * *********************** *********************** * RANGE TEARNG * *********************** RANGE NAME IS TEARNG ; RECORD NAME IS TEACHER ; LOCATION KEY IS TEA-ED ; STRETCHED BY 4 TIMES ; DIVIDED RECORD SIZE IS 512 ; RATE IS 100 ; LOGICAL PAGE IS 1 ; ALARM POINT IS 70 FOR PRIME. SUBRANGE NAME IS TEASRG0000 ; PRIME IS 2700 ; LOCATION VALUE IS '00' THRU '09'. SUBRANGE NAME IS TEASRG0001 ; PRIME IS 2700 ; LOCATION VALUE IS '10' THRU '19'. *********************** * RANGE CLARNG * *********************** RANGE NAME IS CLARNG ; RECORD NAME IS CLASS1, SUBJECT ; LOCATION KEY IS CLA-AREA ; STRETCHED BY 4 TIMES ; DIVIDED RECORD SIZE IS 512 ; RATE IS 100 ; LOGICAL PAGE IS 1 ; ALARM POINT IS 70 FOR PRIME. SUBRANGE NAME IS CLASRG0000 ; PRIME IS 2700 ; LOCATION VALUE IS '00' THRU '09'. SUBRANGE NAME IS CLASRG0001 ; PRIME IS 2700 ; LOCATION VALUE IS '10' THRU '19'. *********************** * RANGE STURNG * *********************** RANGE NAME IS STURNG ; RECORD NAME IS STUDENT ; LOCATION KEY IS STU-BD ; STRETCHED BY 4 TIMES ; LOGICAL PAGE IS 1 ; ALARM POINT IS 70 FOR PRIME. SUBRANGE NAME IS STUSRG0000 ; PRIME IS 2700 ; LOCATION VALUE IS '00' THRU '09'. SUBRANGE NAME IS STUSRG0001 ; PRIME IS 2700 ; LOCATION VALUE IS '10' THRU '19'. *********************** * DATASET ENTRY * *********************** DATASET NAME IS TSDAT.SHCOOL.H01 ; PAGE CONTAINS 32632 . VOLUME IS DEFVOL ; UNIT NAME IS F6425 ; EXTENT-ID IS 1 ; LOCATE IS TEARNG(TEASRG0000). DATASET NAME IS TSDAT.SCHOOL.H02 ; PAGE CONTAINS 32632 . VOLUME IS DEFVOL ; UNIT NAME IS F6425 ; EXTENT-ID IS 2 ; LOCATE IS TEARNG(TEASRG0001). DATASET NAME IS TSDAT.SCHOOL.H03 ; PAGE CONTAINS 32632 . VOLUME IS DEFVOL ; UNIT NAME IS F6425 ; EXTENT-ID IS 3 ; LOCATE IS CLARNG(CLASRG0000). DATASET NAME IS TSDAT.SCHOOL.H04 ; PAGE CONTAINS 32632 . VOLUME IS DEFVOL ; UNIT NAME IS F6425 ; EXTENT-ID IS 4 ; LOCATE IS CLARNG(CLASRG0000). DATASET NAME IS TSDAT.SCHOOL.H05 ; PAGE CONTAINS 32632 . VOLUME IS DEFVOL ; UNIT NAME IS F6425 ; EXTENT-ID IS 5 ; LOCATE IS STURNG(STUSRG0000). DATASET NAME IS TSDAT.SCHOOL.H06 ; PAGE CONTAINS 32632 . VOLUME IS DEFVOL ; UNIT NAME IS F6425 ; EXTENT-ID IS 6 ; LOCATE IS STURNG(STUSRG0001). ******************************* * EXTENDED INDEX ENTRY * ******************************* EXTENDED INDEX NAME IS TEAXENT USING TEA-NO OF TEACHER. END.
위와 같이 작성된 스키마 파일을 스키마 디렉터리에 등록해야 한다.
다음과 같이 UNIX 프롬프트 상에서 ndbadlgen 툴을 실행하면 스키마 파일의 메타 데이터가 메타 테이블에 등록된다.
$ ndbadlgen store -p <schema-file-name>
3.3. XIF 스키마 생성
확장 인덱스를 이용하기 위해서는 아래의 예제와 같은 XIF 스키마 파일을 작성해야 한다. XIF 스키마 생성 방법은 DB 스키마 생성에서 설명한 방법과 동일하다.
************************ * XIFSCHEMA ENTRY * ************************ XIFSCHEMA NAME IS SCHXIF ; SCHEMA NAME IS SCHOOL. ************************ * RECORD ENTRY * ************************ RECORD NAME IS TEAXENT. ************************ * RANGE ENTRY * ************************ RANGE NAME IS TEAXRG ; RECORD NAME IS TEAXENT ; LOGICAL PAGE IS 1 ; RATE IS 100 ; RESIDENT BLOCK IS 3 USING STATIC ; ALARM POINT IS 70 ; DEGENERATE IS 10. * * ; PRIME IS 1698. * ************************ * DATASET ENTRY * ************************ DATASET NAME IS TSDAT.TSTXIF01.H1 ; PAGE CONTAINS 2932 . VOLUME IS DEFVOL ; UNIT IS F6425 ; EXTENT-ID IS 1 ; LOCATE TEAXRG. END.
다음과 같이 UNIX 프롬프트 상에서 ndbadlgen 툴을 실행하여 XIF 스키마 등록 작업을 진행한다.
$ ndbadlgen store -p <xif-schema-file-name>
4. 애플리케이션 예제
본 절에서는 생성한 스키마 파일을 기준으로 NDB를 사용하는 COBOL 애플리케이션의 예제를 설명한다.
4.1. 서브스키마 생성
애플리케이션을 사용하기 전에 먼저 사용하기 원하는 대상 NDB 데이터베이스의 레코드와 세트 정보가 담긴 서브스키마를 생성한다.
다음은 서브스키마의 예제이다.
************************ * SUBSCHEMA * ************************ SUBSCHEMA NAME IS SCHSUB ; SCHEMA NAME IS SCHOOL. ************************ * RECORD * ************************ 01 CLASS1. 01 SUBJECT. 01 TEACHER. 01 STUDENT. ************************ * SET * ************************ SET CLASUB. SET SUBTEA. SET TEASTU. END.
서브스키마 생성 방법은 다음과 같다.
$ ndbadlgen store -p <sub-schema-file-name>
애플리케이션을 실행하기 전에 프로그램 실행 환경에 대해 기술한 PED 파일을 아래와 같이 작성하여 등록한다. 각 애플리케이션을 위한 PED 파일의 등록은 jxdddms 툴을 이용한다.
$ jxdddms store -p <ped-file-name>
******************* * PED ENTRY * ******************* PED NAME IS CLARNGCR ; SWAP POINT IS NOTHING. ******************* * AP ENTRY * ******************* AP NAME IS CLACOB ; TRANSACTION-POINT IS SYSTEM . ******************* * DATABASE ENTRY * ******************* DATABASE NAME IS SCHSUB ; ACCESS MODE IS UPDATE FOR SCHOOL ; PAGE BUFFER IS 10 ; INDEX BUFFER IS 10 ; EXTENDED INDEX BUFFER IS 10 ; INCLUSION SCHEMA IS SCHOOL ; EXCLUSIVE UNIT IS RANGE. * END.
4.2. CLARNG RANGE에 데이터 생성
다음은 CLARNG RANGE에 데이터를 생성하는 COBOL 애플리케이션 예제로 NDB 데이터베이스의 CLASS1 레코드와 SUBJECT 레코드에 값을 저장한다. NDB를 사용하기 위해서는 먼저 READY 명령과 함께 서브스키마 이름을 명시하여 데이터 조작을 준비하고 STORE 명령으로 실제 데이터를 저장한다. NDB 사용이 종료되면 FINISH 명령으로 NDB 처리를 종료한다.
IDENTIFICATION DIVISION. PROGRAM-ID. 'CLACOB'. ENVIRONMENT DIVISION. CONFIGURATION SECTION. SOURCE-COMPUTER . FACOM . OBJECT-COMPUTER . FACOM . SUBSCHEMA-NAME. 'SCHSUB'. DATA DIVISION. *----------------------------------------------------------------* WORKING-STORAGE SECTION. *----------------------------------------------------------------* 01 WK-EOF-FLG PIC X(01) VALUE SPACE. *----------------------------------------------------------------* PROCEDURE DIVISION. *----------------------------------------------------------------* * MAIN CONTROL * *----------------------------------------------------------------* MAIN-CONTROL-PROC SECTION. READY. MOVE "01" TO CLA-AREA OF CLASS1. MOVE "EXERCISE" TO CLA-NAME OF CLASS1. MOVE 01012345678 TO CLA-TEL OF CLASS1. STORE 'CLASS1'. DISPLAY 'CLA-AREA :' CLA-AREA OF CLASS1. DISPLAY 'CLA-NAME :' CLA-NAME OF CLASS1. DISPLAY 'CLA-TEL :' CLA-TEL OF CLASS1. DISPLAY 'STORE DBECB :' DBECB OF FCOM. MOVE "YOGA" TO SUB-NAME OF SUBJECT. MOVE 01012345678 TO SUB-TEL OF SUBJECT. STORE 'SUBJECT'. DISPLAY 'CLA-AREA :' CLA-AREA OF CLASS1. DISPLAY 'CLA-NAME :' CLA-NAME OF CLASS1. DISPLAY 'CLA-TEL :' CLA-TEL OF CLASS1. DISPLAY 'STORE DBECB :' DBECB OF FCOM. FINISH. MAIN-CONTROL-EXIT. DISPLAY '*** CLARNGCOB END ***'.
4.3. TEARNG RANGE에 데이터 생성
다음은 TEARNG RANGE에 데이터를 생성하는 애플리케이션에서 사용하는 PED 파일 예제이다.
******************* * PED ENTRY * ******************* PED NAME IS TEARNGCR ; SWAP POINT IS NOTHING. ******************* * AP ENTRY * ******************* AP NAME IS TEACOB ; TRANSACTION-POINT IS SYSTEM . ******************* * DATABASE ENTRY * ******************* DATABASE NAME IS SCHSUB ; ACCESS MODE IS UPDATE FOR SCHOOL ; PAGE BUFFER IS 10 ; INDEX BUFFER IS 10 ; EXTENDED INDEX BUFFER IS 10 ; INCLUSION SCHEMA IS SCHOOL ; EXCLUSIVE UNIT IS RANGE. * END.
다음은 TEARNG RANGE에 데이터를 생성하는 COBOL 애플리케이션의 예제로 INPUT 파일에서 데이터를 읽어 NDB 데이터베이스의 TEACHER 레코드에 저장한다.
<TEACOB.jcl>
//TEARNG JOB CLASS=A,MSGCLASS=A //*--------------------------------------------------------------------* //DBTST EXEC PGM=TEACOB,TIME=(,30) //STEPLIB DD DSN=SYS1.USERLIB,DISP=SHR //AIMPED DD SUBSYS=(AIM,TEARNGCR,APG01,00),DISP=SHR //SYSOUT DD SYSOUT=* //SSYSIN DD DSN=TEARNG.INFILE,DISP=SHR //SSYSOUT DD SYSOUT=* //
<TEARNG.INFILE>
RONANAM 021993021403
<TEACOB.COBOL>
IDENTIFICATION DIVISION. PROGRAM-ID. 'TEACOB'. ENVIRONMENT DIVISION. CONFIGURATION SECTION. SUBSCHEMA-NAME. 'SCHSUB'. SOURCE-COMPUTER . FACOM . OBJECT-COMPUTER . FACOM . INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT IN-FILE ASSIGN TO SSYSIN. DATA DIVISION. FILE SECTION. FD IN-FILE. 01 IN-DATA. 02 IN-TEANAME PIC X(20). 02 IN-TEAED PIC X(2). 02 IN-TEABD PIC 9(8). 02 IN-TEANO PIC 9(8). WORKING-STORAGE SECTION. PROCEDURE DIVISION. OPEN INPUT IN-FILE. MAIN-CONTROL-PROC SECTION. READY 'SCHSUB'. READ IN-FILE. MOVE IN-DATA TO TEACHER. STORE 'TEACHER' FINISH. CLOSE IN-FILE.
4.4. STURNG RANGE에 데이터 생성
다음은 STURNG RANGE에 데이터를 생성하는 애플리케이션에서 사용하는 PED 파일의 예제이다.
******************* * PED ENTRY * ******************* PED NAME IS STURNGCR ; SWAP POINT IS NOTHING. ******************* * AP ENTRY * ******************* AP NAME IS STUCOB ; TRANSACTION-POINT IS SYSTEM . ******************* * DATABASE ENTRY * ******************* DATABASE NAME IS SCHSUB ; ACCESS MODE IS UPDATE FOR SCHOOL ; PAGE BUFFER IS 10 ; INDEX BUFFER IS 10 ; EXTENDED INDEX BUFFER IS 10 ; INCLUSION SCHEMA IS SCHOOL ; EXCLUSIVE UNIT IS RANGE. * END.
다음은 STURNG RANGE의 데이터를 생성하는 COBOL 애플리케이션의 예제로 INPUT 파일에서 데이터를 읽어 IN-ID가 'T’인 경우 TEACHER 레코드에서 검색하고, 'T’가 아닌 경우는 NDB 데이터베이스의 STUDENT 레코드에 저장한다.
<STUCOB.jcl>
//STURNG JOB CLASS=A,MSGCLASS=A //*--------------------------------------------------------------------* //DBTST EXEC PGM=STUCOB,TIME=(,30) //STEPLIB DD DSN=SYS1.USERLIB,DISP=SHR //AIMPED DD SUBSYS=(AIM,STURNGCR,APG01,00),DISP=SHR //SYSOUT DD SYSOUT=* //SSYSIN DD DSN=STURNG.INFILE,DISP=SHR //SSYSOUT DD SYSOUT=* //
<STURNG.INFILE>
TRONANAM 02
<STUCOB.COBOL>
IDENTIFICATION DIVISION. PROGRAM-ID. 'STUCOB'. ENVIRONMENT DIVISION. CONFIGURATION SECTION. SUBSCHEMA-NAME. 'SCHSUB'. SOURCE-COMPUTER . FACOM . OBJECT-COMPUTER . FACOM . INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT IN-FILE ASSIGN TO SSYSIN. DATA DIVISION. FILE SECTION. FD IN-FILE. 01 IN-DATA. 02 IN-ID PIC X(1). 02 IN-TEACHER. 03 IN-TEA-NAME PIC X(20). 03 IN-TEA-ED PIC X(2). 02 IN-STU REDEFINES IN-TEACHER. 03 IN-STU-NAME PIC X(20). 03 IN-STU-BD PIC X(2). WORKING-STORAGE SECTION. PROCEDURE DIVISION. OPEN INPUT IN-FILE. MAIN-CONTROL-PROC SECTION. READY 'SCHSUB'. READ-DATA. READ IN-FILE AT END GO TO END-APP. IF IN-ID NOT = 'T' GO TO ST-STU. GT-TEA. DISPLAY 'IN-TEA-NAME :' IN-TEA-NAME. DISPLAY 'IN-TEA-ED :' IN-TEA-ED. MOVE IN-TEA-NAME TO TEA-NAME OF TEACHER. MOVE IN-TEA-ED TO TEA-ED OF TEACHER. FIND ANY 'TEACHER'. GO TO READ-DATA. ST-STU. MOVE IN-STU TO STUDENT. STORE 'STUDENT'. GO TO READ-DATA. END-APP. FINISH. CLOSE IN-FILE. STOP RUN.