데이터베이스 유틸리티

본 장에서는 데이터베이스를 관리하기 위한 유틸리티에 대해 기술한다.

1. 개요

다음은 데이터베이스 유틸리티 목록이다. 각 유틸리티에 대한 설명은 해당 절에서 자세하게 기술한다.

프로그램명 설명

DSNMTV01

응용 프로그램에서 ESQL이나 ODBC와 같은 데이터베이스에 대한 액세스를 사용할때 이에 대한 연결을 수행하는 유틸리티 프로그램이다.

DSNTEP2

DB2 데이터베이스에 SQL을 발행하는 유틸리티 프로그램이다.

DSNTIAD

데이터베이스의 정보에 대한 질의 및 갱신을 하는 데이터 조작언어(DML)를 실행하는 유틸리티 프로그램이다.

DSNTIAUL

IKJEFT01 유틸리티를 통해 DB2 데이터베이스의 테이블 데이터를 OpenFrame 데이터 셋으로 언로드하는 유틸리티 프로그램이다.

DSNUTILB

데이터베이스에 커맨드를 발행하는 유틸리티 프로그램이다.

INZUTILB

DB2 데이터베이스를 테이블 데이터를 OpenFrame 데이터 셋으로 언로드하는 유틸리티 프로그램이다.

2. DSNMTV01

OpenFrame HiDB를 이용해서 DLI/I Call을 이용하면서 동시에 응용 프로그램에서 ESQL이나 ODBC와 같은 데이터베이스에 대한 액세스를 사용할 때 이에 대한 연결을 수행하는 유틸리티 프로그램이다.

2.1. DD 설정

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

항목 설명

DDITV02 DD

데이터베이스의 접속정보 및 수행할 응용 프로그램을 지정한다.

데이터셋에 지정할 파라마터는 다음과 같다.

SSN,LIT,ESMT,RTT,REO,CRC,CONN,PLAN,PROG

각 파라미터별 의미 및 DSNMTV01에서의 지원 여부는 다음과 같다.

  • SSN : 접속 대상의 데이터베이스의 시스템 이름을 지정한다.

  • LIT : Language Interface Token을 의미한다. OpenFrame에서는 이 정보를 무시한다.

  • ESMT : DB2를 사용하는 경우 초기화 모듈 이름을 의미한다. OpenFrame에서는 이 정보를 무시한다.

  • RTT : RTT(Resource Translation Table) 정보는 OpenFrame에서는 무시한다.

  • REO : REO(Region Error Option) 정보는 OpenFrame에서는 무시한다.

  • CRC : CRC(Command Recognition Character) 정보는 OpenFrame에서는 무시한다.

  • CONN : 연결 정보 이름을 지정한다. OpenFrame에서는 이 정보를 무시한다.

  • PLAN : DB2의 PLAN 이름을 의미한다. OpenFrame에서는 이 정보를 무시한다.

  • PROG : 수행할 응용 프로그램 이름을 지정한다.

2.2. 명령어 설정

JCL에서 EXEC PGM으로 DSNMTV01을 직접호출할 수는 없다. JCL에서 DL/I를 호출하기 위한 DFSRRC00 유틸리티를 실행하는 경우에 MBR으로 DSNMTV01을 지정해서 수행한다.

//JOB01   JOB  CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//JOBLIB  DD   DSN=SYS1.COBLIB,DISP=SHR
//STEP    EXEC PGM=DFSRRC00,
//             PARM='DLI,DSNMTV01,HOSPPSB,,0000,,0,,N,O,T'
//SYSOUT  DD   SYSOUT=*
//DDITV02 DD   DSN=DSNMTV01.PARMLIB(SAMPLE),DISP=SHR
//*

2.3. 사용예제

다음은 DFSRRC00 유틸리티에서 PSB로 HOSPPSB를 지정하고, MBR로 DSNMTV01을 지정한 예제이다. DFSRRC00은 PSB에 대한 정보를 로드한 후에 DSNMTV01을 호출해서 DB2Q로 지정된 데이터베이스의 접속 정보를 OpenFrame 환경설정에 dsnmtv01 서브젝트에 설정된 데이터베이스 접속하고, 이후에 TESTPGM이라는 프로그램을 수행한다.

<JCL>

//JOB01   JOB  CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//JOBLIB  DD   DSN=SYS1.COBLIB,DISP=SHR
//STEP    EXEC PGM=DFSRRC00,
//             PARM='DLI,DSNMTV01,HOSPPSB,,0000,,0,,N,O,T'
//SYSOUT  DD   SYSOUT=*
//DDITV02 DD   DSN=DSNMTV01.PARMLIB(SAMPLE),DISP=SHR
//*

<DDITV02 DD>

DB2Q,SYS1,DSNMIN10,,A,-,MP13J120,TESTPGM,TESTPGM

2.4. 관련 환경설정

데이터베이스의 이름과 접속정보에 관한 정보를 지정하기 위해 OpenFrame 환경설정에 dsnmtv01 서브젝트의 섹션들을 설정한다.

  1. 환경설정 항목의 세부 내용은 OpenFrame Batch "환경설정 안내서"를 참고한다.

  2. DSNMTV01에서는 데이터베이스에 대한 연결은 libtdbconnsw 모듈을 이용해서 처리한다. 따라서 libtdbconnsw 모듈이 대상이 되는 데이터베이스에 해당되는 라이브러리를 링크해야 한다.

2.5. 유의사항

DSNMTV01 유틸리티 프로그램이 사용자 애플리케이션을 실행한 결과는 다음과 같다.

  • 정상적으로 실행한 경우

    애플리케이션에서 받은 코드를 반환한다.

  • 에러가 발생한 경우

    해당 에러 메시지를 SYSPRINT DD에 출력하고, 각 에러에 해당하는 코드를 반환한다.

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

    코드 설명

    12

    다음과 같은 경우에 발생한다.

    • DDITV02 DD를 기술하지 않은 경우

    • DDITV02 DD에 기술한 데이터셋 정보가 지정된 포맷에 맞지 않은 경우

    • 데이터베이스 연결이 실패한 경우

    • 수행할 애플리케이션을 찾지 못하였거나 수행하지 못한 경우

3. DSNTEP2

데이터베이스에 SQL을 발행하는 유틸리티 프로그램이다.

SELECT/DELETE/UPDATE/INSERT SQL과 COMMIT/ROLLBACK 문을 사용할 수 있다. SQL을 실행한 후에 'COMMIT' 명령을 내부에서 실행하고 유틸리티가 종료된다.

3.1. DD 설정

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

항목 설명

SYSTSPRT DD

IKJEFT01에서 DSNTEP2를 실행시키는 과정에서의 처리 결과나 에러 메시지를 출력할 데이터셋을 지정한다.

SYSTSIN DD

IKJEFT01에서 DSNTEP2을 실행시키기 위한 DSN 명령어와 RUN 명령어를 지정한다.

SYSPRINT DD

SYSOUT DD

메시지 출력을 위한 출력 데이터셋을 지정한다.

SYSOUT DD와 SYSPRINT DD 둘 다 DSNTEP2에서 나오는 모든 출력이 사용된다. SYSOUT DD와 SYSPRINT DD가 둘 다 설정된 경우 SYSOUT DD가 사용된다.

SYSIN DD

실행할 데이터베이스 SQL 쿼리를 포함하고 있는 입력 데이터셋을 지정하거나 실행할 SQL 쿼리를 직접 정의한다. SYSIN으로 사용한 데이터셋의 lrecl 값이 80이 아니거나, 입력된 SYSIN 레코드 내용 중 72열 이후의 영역에 문자가 존재하는 경우, 유틸리티 에러 코드로 '12’가 반환된다.

3.2. 명령어 설정

DSNTEP2를 실행하기 위해서는 JCL의 EXEC 문장에 다음과 같이 IKJEFT01을 지정하고, SYSTSIN DD에 다음과 같이 DSN 명령어와 RUN 명령어를 지정한다. SYSTSIN의 사용법은 IKJEFT01의 명령어 설정을 참고한다.

//JOB01   JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//STEP    EXEC PGM=IKJEFT01
//SYSTSIN DD *
 DSN SYSTEM(DBPA)
 RUN PROGRAM(DSNTEP2) PLAN(DSNTEP81) LIB('DSN810.RUNLIB.LOAD')
//*

3.3. 사용예제

다음은 IKJEFT01 유틸리티 프로그램이 데이터베이스 시스템과 연결된 후 DSNTEP2 유틸리티 프로그램을 호출하여 SYSIN DD에 기술된 SQL 쿼리를 실행하고, 실행 결과를 SYSPRINT에 출력하는 예이다.

//JOB02    JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//RUNTEP2  EXEC PGM=IKJEFT01,DYNAMNBR=20
//SYSTSPRT DD SYSOUT=*
//SYSTSIN  DD *
 DSN SYSTEM(DBPA)
 RUN PROGRAM(DSNTEP2) PLAN(DSNTEP81) LIB('DSN810.RUNLIB.LOAD')
//*
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
  SELECT * FROM DSN8810.PROJ;
/*

위의 명령을 수행하여 아래와 같은 결과를 얻는다.

###### DSNTEP2 DB INFO : USERNAME=tibero,PASSWORD=****,DATABASE=tb_rbtest
##### time check - begin #####
PAGE    1
***INPUT STATEMENT:
    SELECT *
    FROM DSN8810.PROJ;
       +-----------------------------------+
       ! COLONE               ! COLTWO     !
       +-----------------------------------+
     1_! AAA                  !        392 !
     2_! AAA                  !        105 !
       +-----------------------------------+
SUCCESSFUL RETRIEVAL OF          2 ROW(S)
****************************************** Bottom of Data ******************************************
##### time check - end : elapsed time(sec) = 0.000983 #####

다음은 SYSIN DD에 'UPDATE' 명령을 입력하여 실행 결과를 SYSPRINT에 출력하는 예시이다.

//JOB02    JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//RUNTEP2  EXEC PGM=IKJEFT01,DYNAMNBR=20
//SYSTSPRT DD SYSOUT=*
//SYSTSIN  DD *
 DSN SYSTEM(DBPA)
 RUN PROGRAM(DSNTEP2) PLAN(DSNTEP81) LIB('DSN810.RUNLIB.LOAD')
//*
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
  UPDATE TEST_TABLE SET COLONE = 'TESTVALUE'
/*

위의 명령을 수행하여 아래와 같은 결과를 얻는다.

###### DSNTEP2 DB INFO : USERNAME=tibero,PASSWORD=****,DATABASE=tb_rbtest
##### time check - begin #####
PAGE    1
***INPUT STATEMENT:
    UPDATE TEST_TABLE
    SET COLONE = 'TESTVALUE' ;
NUMBER OF ROWS AFFECTED 2
****************************************** Bottom of Data ******************************************
##### time check - end : elapsed time(sec) = 0.000350 #####

3.4. 관련 환경설정

  • 데이터베이스 접속 정보

    데이터베이스의 이름과 접속정보에 관한 정보는 OpenFrame 환경설정에 ikjeft01 서브젝트, SYSTEM:{system} 섹션에 설정한다. IKJEFT01에서 DSN 커맨드로 지정한 시스템명에 해당하는 접속 정보를 이용한다.

    ikjeft01, 서브젝트 환경설정 항목의 세부 내용은 OpenFrame Batch "환경설정 안내서"를 참고한다.

3.5. 유의 사항

DSNTEP2 유틸리티 프로그램이 Batch 애플리케이션을 실행한 결과는 다음과 같다.

  • 정상적으로 실행한 경우

    애플리케이션에서 받은 코드를 반환한다.

  • 에러가 발생한 경우

    해당 에러 메시지를 SYSPRINT DD에 출력하고, 각 에러에 해당하는 코드를 반환한다.

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

    코드 설명

    0

    명령을 정상적으로 처리한 경우 반환되는 코드이며 일부 정보성 메시지가 출력될 수 있다.

    4

    다음과 같은 경우에 발생한다.

    • 데이터베이스 수행 중 Warning이 발생한 경우

    • UPDATE/DELETE를 수행해 영향받은 레코드가 없는 경우

    8

    다음과 같은 경우에 발생한다.

    • 데이터베이스 정보를 지정하지 않은 경우

    • SYSREC00 DD를 기술하지 않은 경우

    • SYSIN DD를 기술하지 않은 경우

    • SQL 수행 중 에러가 발생한 경우

    12

    다음과 같은 경우에 발생한다.

    • 내부 라이브러리 사용중에 에러가 발생한 경우

    • 데이터베이스 연결에 실패한 경우

    • SYSIN에 대해 LRECL 값이 맞지 않거나 72행 이후의 영역에 문자가 존재하는 경우

4. DSNTIAD

데이터베이스의 정보에 대한 질의 및 갱신을 하는 데이터 조작언어(DML)를 실행하는 유틸리티 프로그램이다. DB2뿐만 아니라 Oracle, Tibero에서도 데이터 조작언어를 실행하기 위해 사용된다.

4.1. DD 설정

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

항목 설명

SYSTSPRT DD

IKJEFT01에서 DSNTIAD를 실행시키는 과정에서의 처리 결과나 에러 메시지를 출력할 데이터셋을 지정한다.

SYSTSIN DD

IKJEFT01에서 DSNTIAD를 실행시키기 위한 DSN 명령어와 RUN 명령어를 지정한다.

SYSPRINT DD

SYSOUT DD

메시지 출력을 위한 출력 데이터셋을 지정한다.

SYSOUT DD와 SYSPRINT DD 둘 다 DSNTIAD에서 나오는 모든 출력이 사용된다. 둘 다 설정된 경우 SYSOUT DD가 사용된다.

SYSIN DD

실행할 데이터베이스 SQL 쿼리를 포함하고 있는 입력 데이터셋을 지정하거나 실행할 SQL 쿼리를 직접 정의한다.

한 라인은 최대 72문자를 넘을 수 없으며, 라인 계속 문자로 "^"을 사용한다.

4.2. 명령어 설정

DSNTIAD를 실행하기 위해서는 JCL의 EXEC 문장에 다음과 같이 IKJEFT01을 지정하고, SYSTSIN DD에 다음과 같이 DSN 명령어와 RUN 명령어를 지정한다. SYSTSIN의 사용법은 IKJEFT01의 명령어 설정을 참고한다.

//JOB01   JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//STEP    EXEC PGM=IKJEFT01
//SYSTSIN DD *
 RUN PROGRAM(DSNTIAD) PLAN(DSNTEP81) LIB('DSN810.RUNLIB.LOAD')
//*

4.3. 사용예제

다음은 IKJEFT01 유틸리티 프로그램이 데이터베이스 시스템과 연결된 후 DSNTIAD 유틸리티 프로그램을 호출하여 SYSIN DD에 기술된 SQL 쿼리를 실행하고, 실행 결과를 SYSPRINT에 출력하는 예이다.

DSNTIAD가 지원하는 명령은 삽입(INSERT), 수정(UPDATE), 삭제(DELETE)이며, 하나의 컨트롤 스테이트먼트에 여러 개의 SQL 문이 들어가는 것이 가능하다. 다수의 SQL 문 실행 중 총 10개의 SQL 문에서 에러가 발생하는 경우 에러를 반환한다.

//JOB02    JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//RUNTEP2  EXEC PGM=IKJEFT01,DYNAMNBR=20
//SYSTSPRT DD SYSOUT=*
//SYSTSIN  DD *
 RUN PROGRAM(DSNTIAD) PLAN(DSNTEP81) LIB('DSN810.RUNLIB.LOAD')
//*
//SYSPRINT DD SYSOUT=*
//SYSIN    DD *
INSERT INTO DSNTAID_GROUP(GROUPNAME, OWNER, SUPGROUP, SUBGRPS, MODEL,
        DATA, CREATION, FLAGS)
VALUES('TESTGRP3', 'JUNG', NULL, NULL, NULL, NULL, '20101005', 0);
DELETE FROM DSNTAID_GROUP WHERE GROUPNAME = 'TESTGRP2';
UPDATE DSNTAID_GROUP SET OWNER = 'TEST01' WHERE GROUPNAME = 'TESTGRP1';
/*

4.4. 관련 환경설정

데이터베이스의 이름과 접속정보에 관한 정보는 OpenFrame 환경설정에 ikjeft01 서브젝트의 SYSTEM:{system} 섹션의 키들에 설정한다.

ikjeft01 서브젝트의 설정방법에 대한 자세한 내용은 OpenFrame Batch "환경설정 안내서"를 참고한다.

4.5. 유의사항

DSNTIAD 유틸리티 프로그램이 Batch 애플리케이션을 실행한 결과는 다음과 같다.

  • 정상적으로 실행한 경우

    애플리케이션에서 받은 코드를 반환한다.

  • 에러가 발생한 경우

    해당 에러 메시지를 SYSPRINT DD에 출력하고, 각 에러에 해당하는 코드를 반환한다.

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

    코드 설명

    0

    명령을 정상적으로 처리한 경우 반환되는 코드이며 일부 정보성 메시지가 출력될 수 있다.

    4

    대상 데이터베이스에서 SQL을 수행할 때 Warning이 발생한 경우이다.

    또는 대상 결과 집합이 없는 경우에도 발생한다.

    8

    대상 데이터베이스에서 SQL을 수행할 때 에러가 발생한 경우이다.

    12

    SYSIN에 기술한 SQL이 유효하지 않은 경우이다.

4.6. 기타 사항

DSNTIAD는 ODBC(Open DataBase Connectivity)와 OCI(Oracle Call Interface)를 이용한 버전이 있다. 다음은 OpenFrame에서의 DSNTIAD 지원 방법에 대한 설명이다.

  • ODBC는 DBMS의 종류에 관계없이 DB 오퍼레이션을 수행하기 위해 DBMS와 애플리케이션 사이에 단계를 두어서 DBMS와 애플리케이션의 종속성을 제거하는 기술로 이를 위해 ODBC 매니저와 ODBC 드라이버가 필요하다.

  • OCI는 Oracle 데이터베이스를 사용하기 위해 Oracle에서 제공하는 API로 OCI를 사용하기 위해서는 Oracle 클라이언트에 포함된 OCI 라이브러리가 필요하다.

    ODBC 버전의 DSNTIAD는 Tibero, DB2, Oracle 등의 DBMS를 지원하고, OCI 버전의 DSNTIAD는 Oracle 버전만을 지원한다.

5. DSNTIAUL

IKJEFT01 유틸리티를 통해 DB2 데이터베이스의 테이블 데이터를 OpenFrame 데이터셋으로 언로드하는 유틸리티 프로그램이다.

SYSIN 데이터셋에 언로드를 수행할 SQL을 지정한다. 기본적으로 INZUTILB와 동일한 동작을 수행하며, INZUTILB는 EXEC문에 직접 실행할 수 있지만, DSNTIAUL은 IKJEFT01에서 수행한다.

5.1. DD 설정

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

항목 설명

SYSIN DD

데이터베이스 테이블을 UNIX 파일로 변환하기 위한 입력 데이터셋을 지정한다.

SYSPRINT DD

메시지 출력을 위한 출력 데이터셋을 지정한다. 만약 SYSOUT과 SYSPRINT DD가 모두 존재하는 경우에는 IKJEFT01이 출력하는 메시지는 SYSOUT에, DSNTIAUL이 출력하는 메시지는 SYSPRINT에 출력된다. 그 이외의 경우에는 IKJEFT01과 DSNTIAUL이 모두 SYSPRINT 또는 SYSOUT DD에 메시지를 출력한다.

SYSTSIN DD

DSNTIAUL을 실행시키기 위한 DSN 명령어와 RUN 명령어를 지정한다.

SYSPUNCH DD

DSNUTILB를 실행하여 데이터베이스의 테이블 구조 백업 파일을 로드할 때 로드 정보가 필요하다. 해당 정보를 저장할 데이터셋을 지정한다.

사용하지 않을 경우 DUMMY로 지정한다.

SYSRECnn DD

출력 데이터셋을 지정한다.

DSNTIAUL은 한번 수행으로 최대 100개의 백업 파일을 출력 데이터셋에 생성할 수 있다. SYSIN DD의 입력 데이터셋에서 지정한 하나의 SELECT 문이나 데이터베이스 테이블 이름에 대해 데이터 언로드 결과가 차례대로 저장된다.

출력 데이터셋의 개수는 입력 데이터셋의 SELECT 문 또는 데이터베이스 테이블 이름 개수와 동일해야 한다.

nn은 00 ~ 99까지 설정할 수 있으며, 출력 데이터셋의 번호를 지정한다.

이 DD에 지정한 데이터셋이 새롭게 생성되는 데이터셋이면서 JCL을 통해 별도의 LRECL을 지정하지 않으면, 내려받는 데이터셋의 LRECL은 테이블의 column 수와 길이에 따라 결정된다.

5.2. 명령어 설정

DSNTIAUL을 실행하기 위해서는 JCL의 EXEC 문장에 다음과 같이 IKJEFT01을 지정하고 SYSTSIN DD에 다음과 같이 DSN 명령어와 RUN 명령어를 지정하고, PARM 명령으로 'SQL' 파라미터를 명시한다. SYSTSIN의 사용법은 IKJEFT01의 명령어 설정을 참고한다.

//JOB01   JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//STEP    EXEC PGM=IKJEFT01
//SYSTSIN DD *
 RUN PROGRAM(DSNTIAUL) PLAN(DSNTEP81) LIB('DSN810.RUNLIB.LOAD') PARM('SQL')
//*

만약 SQL쿼리를 사용하지 않고, 테이블 명 만을 사용하여 UNLOAD 수행하고자 하는 경우에는 별도의 PARM 명령을 사용하지 않는다.

//JOB01   JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//STEP    EXEC PGM=IKJEFT01
//SYSTSIN DD *
RUN PROGRAM(DSNTIAUL) PLAN(DSNTEP81) LIB('DSN810.RUNLIB.LOAD')
//*

5.3. 사용예제

다음은 IKJEFT01 유틸리티 프로그램이 데이터베이스 시스템과 연결된 후 DSNTIAUL 유틸리티 프로그램을 호출하여 DSN8810.PROJ라는 데이터베이스 테이블에서 데이터와 구조를 DSN8UNLD.SYSREC00과 DSN8UNLD.SYSPUNCH로 각각 백업하는 예이다.

//JOB02    JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//UNLOAD   EXEC PGM=IKJEFT01,DYNAMNBR=20
//SYSTSPRT DD SYSOUT=*
//SYSTSIN  DD *
 RUN PROGRAM(DSNTIAUL) PLAN(DSNTEP81) LIB('DSN810.RUNLIB.LOAD') PARM('SQL')
//*
//SYSPRINT DD SYSOUT=*
//SYSREC00 DD DSN=DSN8UNLD.SYSREC00,
//         UNIT=SYSDA,SPACE=(32760,(1000,500)),
//         DISP=(NEW,CATLG),VOL=SER=SCR03
//SYSPUNCH DD DSN=DSN8UNLD.SYSPUNCH,
//         UNIT=SYSDA,SPACE=(800,(15,15)),DISP=(NEW,CATLG),
//         VOL=SER=SCR03,RECFM=FB,LRECL=120,BLKSIZE=1200
//SYSIN    DD *
 SELECT * FROM DSN8810.PROJ
/*

다음은 위의 예시에서 SQL 을 사용하지 않고 테이블 명을 사용해 내려받기 위해 SYSTSIN과 SYSIN을 수정한 것이다.

//JOB02    JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//UNLOAD   EXEC PGM=IKJEFT01,DYNAMNBR=20
//SYSTSPRT DD SYSOUT=*
//SYSTSIN  DD *
 RUN PROGRAM(DSNTIAUL) PLAN(DSNTEP81) LIB('DSN810.RUNLIB.LOAD')
//*
//SYSPRINT DD SYSOUT=*
//SYSREC00 DD DSN=DSN8UNLD.SYSREC00,
//         UNIT=SYSDA,SPACE=(32760,(1000,500)),
//         DISP=(NEW,CATLG),VOL=SER=SCR03
//SYSPUNCH DD DSN=DSN8UNLD.SYSPUNCH,
//         UNIT=SYSDA,SPACE=(800,(15,15)),DISP=(NEW,CATLG),
//         VOL=SER=SCR03,RECFM=FB,LRECL=120,BLKSIZE=1200
//SYSIN    DD *
 DSN8810.PROJ
/*

5.4. 관련 환경설정

데이터베이스의 이름과 접속정보에 관한 정보는 OpenFrame 환경설정에 ikjeft01 서브젝트의 SYSTEM:{system} 섹션의 키들에 설정한다.

ikjeft01 서브젝트의 설정방법에 대한 자세한 내용은 OpenFrame Batch "환경설정 안내서"를 참고한다.

5.5. 유의사항

DSNTIAUL 유틸리티 프로그램이 Batch 애플리케이션을 실행한 결과는 다음과 같다.

  • 정상적으로 실행한 경우

    애플리케이션에서 받은 코드를 반환한다.

  • 에러가 발생한 경우

    해당 에러 메시지를 SYSPRINT DD에 출력하고, 각 에러에 해당하는 코드를 반환한다.

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

    코드 설명

    0

    명령을 정상적으로 처리한 경우 반환되는 코드이며 일부 정보성 메시지가 출력될 수 있다.

    4

    데이터베이스 수행 중 Warning이 발생한 경우이다.

    8

    다음과 같은 경우에 발생한다.

    • 데이터베이스 정보를 지정하지 않은 경우

    • SYSREC00 DD를 기술하지 않은 경우

    • SYSIN DD를 기술하지 않은 경우

    • SQL 수행 중 에러가 발생한 경우

6. DSNUTILB

데이터베이스에 커맨드를 발행하는 유틸리티 프로그램이다.

OpenFrame에서는 LOAD 커맨드, UNLOAD 커맨드, QUIESCE 커맨드와 TEMPLATE 커맨드를 지원한다. LOAD 커맨드는 데이터셋에 저장된 데이터를 데이터베이스의 테이블에 적재하기 위한 용도로 사용된다. UNLOAD 커맨드는 데이터베이스 테이블에 존재하는 레코드를 데이터셋에 저장하기 위해 사용한다. QUIESCE 커맨드는 대상 데이터베이스에 체크포인트를 지정 위한 용도로 사용된다. 마지막으로 TEMPLATE 커맨드는 UNLOAD에 사용할 PDS 데이터셋을 Allocate 하기 위해 사용한다.

Tibero 환경에서 구동하는 DSNUTILB는 LOAD와 UNLOAD 커맨드 수행시 입력 또는 출력하는 데이터셋 이름 또는 테이블 이름에 맞는 Copybook 파일을 요구한다. 해당 Copybook 파일을 이용하여 Tibero에서 DB2 'DECIMAL' 컬럼의 Packed Decimal과 Zoned Decimal 값을 처리할 수 있다.

  1. QUIESCE 커맨드는 시스템 구조상 DSNUTILB에서 지원하는데 제약사항이 있어, 사용자가 작성한 모듈을 호출하는 형태로 제공한다.

  2. Tibero 환경에서 DSNUTILB가 LOAD와 UNLOAD 커맨드 수행 시 요구하는 Copybook 파일은 INDDN과 UNLDDN 옵션에 사용하는 데이터셋 이름을 사용한다. 해당 이름을 가진 Copybook 파일이 존재하지 않을 때는 대상 테이블 이름을 가진 Copybook 파일의 존재 여부를 확인하고, 해당 파일 또한 존재하지 않을 경우 에러가 발생한다.

6.1. DD 설정

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

항목 설명

SYSIN DD

데이터베이스 수행할 명령어를 기술한다.

SYSPRINT DD

메시지 출력을 위한 출력 데이터셋을 지정한다.

LOAD와 UNLOAD의 경우에 SYSIN에서 LOAD 대상의 DD를 기술하므로, SYSIN의 INDDN 구문에서 지정한 DD명을 추가로 작성해야한다.

6.2. 명령어 설정

본 절에서 DSNUTILB의 명령어에 대해서 설명한다.

EXEC

DSNUTILB를 실행하기 위해서는 JCL의 EXEC 문장에 다음과 같이 지정한다.

//STEP EXEC PGM=DSNUTILB[,PARM='system,[uid],[utproc]']
항목 설명

system

시스템명을 명시하며, OpenFrame 환경설정에 ikjeft01 서브젝트의 SYSTEM:{system} 섹션에서 해당 시스템의 사용자 정보를 읽어온다.

uid

DB2가 Mainframe에 설치된 경우 Stored Procedure를 호출할 때 UID 정보를 전달하며, 이외에는 무시한다.

utproc

무시한다.

LOAD

LOAD 명령어 구문은 다음과 같다.

LOAD DATA
    INDDN ddname1
    [REPLACE]
    INTO TABLE table_name [field_name [POSITION ( field_position : field_length )]]
    [DELIMITED [COLDEL del_char1][CHARDEL del_char2][DECPT del_char3]]
    [WORKDDN (ddname2, ddname3)]
    [ENFORCE NO]
    [DISCARDS discard_number]
    [DISCARDDDN discard_ddname]
    [ERRDDN SYSERR]
    [MAPDDN SNAP]
항목 설명

INDDN

LOAD 대상의 데이터셋을 지정한 DD명을 기술한다.

DELIMITED

LOAD 대상이 되는 데이터셋의 레코드 형식이 구분자에 기반한 문자열 형태일 때에 사용한다. UNLOAD 명령이나 DSNTIAUL 유틸리티를 이용해 작성한 데이터셋이 'DELIMITED' 옵션을 통해 작성된 것이라면 사용할 수 있다. 이 옵션을 사용한 경우, 필드 정보에 지정한 길이와 위치 정보는 무시된다.

  • COLDEL : column 데이터의 구분자를 지정한다. 별도 지정이 없다면 ','(comma)를 사용한다.

  • CHARDEL : 문자열을 나타내는 데이터에 사용할 구분자를 지정한다. 별도 지정이 없다면 '"'(double quotation)을 사용한다.

  • DECPT : 숫자 데이터의 소수점 구분자를 지정한다. 별도 지정이 없다면 '.'(period)를 지정한다.

DISCARDS

LOAD에 실패한 데이터셋 레코드의 허용 갯수를 지정한다. LOAD에 실패한 레코드가 이 숫자를 초과하면 유틸리티는 에러를 리턴하고 종료한다. 지정하지 않은 경우에는 0을 사용하며, 0인 경우에는 LOAD에 실패한 레코드 숫자에 무관하게 LOAD를 속행한다.

DISCARDDN

LOAD에 실패한 데이터셋 레코드를 기록하는 DD명을 기술한다. 지정하지 않은 경우에는 'SYSDISC’를 사용한다. JCL에 별도의 DISCARDDN을 위한 데이터셋이 지정되어있지 않다면 실패 레코드를 기록하지 않는다.

REPLACE

LOAD 대상의 테이블에 대해서 삭제를 수행할지 여부를 지정한다.

REPLACE를 기술한 경우에는 기존의 테이블 데이터를 삭제하고, 지정하지 않은 경우에는 삭제하지 않는다.

INTO TABLE

LOAD 대상 테이블 이름과 컬럼 정보를 기술한다. 필드의 경우에는 데이터셋에서의 위치 정보와 길이 정보를 기술한다. 필드 정보를 지정하지 않은 경우 테이블이 가진 column의 순서와 길이에 따라 데이터셋으로 부터 읽어들일 각 column의 위치 정보가 결정된다.

WORKDDN, ENFORCE, ERRDDN, MAPDDN 항목은 OpenFrame에서는 지원하지 않는 항목이다.

UNLOAD

UNLOAD 명령어 구문은 다음과 같다.

UNLOAD DATA
    UNLDDN ddname1 | (ddname1)
    PUNCHDDN  ddname2
    FROM TABLE (table_name [field_name field_type(field_length) [CLOBF template_ddname] [EXTERNAL] ])
    [WHEN (where_condition)]
    [DELIMITED [COLDEL del_char1][CHARDEL del_char2][DECPT del_char3]]
항목 설명

UNLDDN

UNLOAD 대상의 데이터셋을 지정한 DD명을 기술한다.

PUNCHDDN

UNLOAD 수행 시 TABLE에 속한 column의 이름, 길이, 위치를 기록할 데이터셋의 DD명을 기술한다. 이 데이터셋에 작성된 구문들은 LOAD 명령에 활용할 수 있다.

DELIMITED

UNLOAD 수행 시 레코드 형식을 구분자에 기반한 문자열 형식으로 지정하고자 할 때 사용한다. 이 옵션을 사용하여 UNLOAD 수행 한 데이터셋은 LOAD 명령 수행 시 반드시 DELIMITED 옵션을 사용해야 한다. 이 옵션을 사용한 경우, PUNCHDDN DD에 길이와 위치 정보는 작성되지 않는다.

  • COLDEL : column 데이터의 구분자를 지정한다. 별도 지정이 없다면 ','(comma)를 사용한다.

  • CHARDEL : 문자열을 나타내는 데이터에 사용할 구분자를 지정한다. 별도 지정이 없다면 '"'(double quotation)을 사용한다.

  • DECPT : 숫자 데이터의 소수점 구분자를 지정한다. 별도 지정이 없다면 '.'(period)를 지정한다.

FROM TABLE

UNLOAD 대상 테이블 이름을 지정한다. 내려받기 위한 필드를 지정하고자 하는 경우에는 필드 명칭과 타입, 길이 정보를 명시한다.

  • CLOBF template_ddname : 내려받고자 하는 필드의 타입이 LOB인 경우에는 TEMPLATE 구문을 통해 별도의 PDS를 생성하고 이 키워드와 template_ddname를 지정하여 내려받는다.

  • EXTERNAL : 내려받고자 하는 데이터를 문자열 형식으로 받고자 하는 경우 사용한다. 예를들어 DECIMAL 타입의 컬럼에 EXTERNAL 을 사용하면 packed decimal 형식의 데이터가 아닌, 숫자를 문자열로 표현하여 내려받게 된다.

QUIESCE

QUIESCE 명령어 구문은 다음과 같다.

QUIESCE TABLESPACE tablespace_name
        ...
항목 설명

TABLESPACE

QUIESCE를 처리할 대상 테이블스페이스 이름을 기술한다.

TEMPLATE

TEMPLATE 명령어 구문은 다음과 같다.

TEMPLATE ddname DSN 'dsname' DSNTYPE(dsntype) UNIT(unit) SPACE(primary,secondary) [CYL]
항목 설명

DSN

UNLOAD 명령 중에 사용할 데이터셋 이름을 지정하고, ddname으로 Allocation 한다. 이 데이터셋은 UNLOAD 명령의 FROM TABLE 구문에서 LOB 타입의 필드를 내려받을 때에 사용한다.

DSNTYPE

Allocate 수행할 데이터셋의 종류를 지정한다. 현재는 PDS 만을 지원한다.

UNIT, SPACE, CYL 항목은 OpenFrame에서는 지원하지 않는 항목이다.

6.3. 사용예제

본 절에서는 각 명령어 예제를 설명한다.

LOAD

다음은 DSNUTILB 유틸리티 프로그램을 실행하여 UNIX 파일로 백업된 DSN8UNLD.SYSREC00 파일을 SYSIN DD에 기술한 정보로 LOAD하는 예이다.

//JOB01    JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//RUNLOAD  EXEC PGM=DSNUTILB
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSREC   DD DSN=DSN8UNLD.SYSREC00,DISP=(SHR,KEEP)
//SYSIN    DD *
LOAD DATA
 INDDN SYSREC
 REPLACE
 LOG NO
 SORTDEVT DISK
 INTO TABLE
 TEST_TABLE
 (
 PO_NBR POSITION ( 1: 11 ) CHAR
 )
 WORKDDN (SYSUT101,SORTOUT)
 ENFORCE NO
 DISCARDDN SYSDISC
 ERRDDN SYSERR
 MAPDDN SMAP
/*
//
UNLOAD

다음은 DSNUTILB 유틸리티 프로그램을 실행하여 TEMPLATE 구문을 이용해 SYS1.TSTLIB PDS를 Allocate 수행한 다음, SYSREC00 DD에 UNLOAD를 수행하는 기능이다. 이때 DATA_XML Column은 LOB 타입의 Column 데이터를 SYS1.TSTLIB PDS 내에 'DATA_XML' 이라는 멤버로 내려받게 된다.

//ULDT1    JOB
//STP1     EXEC PGM=DSNUTILB,PARM='DBTW,A,B'
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSPUNCH DD SYSOUT=*
//SYSREC00 DD DSN=ULDTEST.ULD,DISP=(NEW,CATLG,DELETE)
//SYSIN    DD *
TEMPLATE LOBFRW DSN 'SYS1.TSTLIB'
                DSNTYPE(PDS) UNIT(3390)
                SPACE(50,250) CYL
UNLOAD DATA FROM TABLE DATA_UNLOAD HEADER NONE
  (
   NUMBER     CHAR(10)
  ,QUOTE_ID       DECIMAL
  ,CLASS_ID       CHAR(08)
  ,DATA_XML     VARCHAR CLOBF LOBFRW
  ,ADDED_DATE     TIMESTAMP EXTERNAL(26)
  ,ADDED_LOGON    CHAR(15)
  ,REVISED_DATE   TIMESTAMP EXTERNAL(26)
  ,REVISED_LOGON  CHAR(15)
  )
  WHEN (ADDED_DATE >= (CURRENT_TIMESTAMP - 1 YEAR))
       UNLDDN     SYSREC00
       PUNCHDDN   SYSPUNCH
       DELIMITED  COLDEL X'09'
       SHRLEVEL CHANGE
/*
QUIESCE

다음은 DSNUTILB 유틸리티 프로그램을 실행하여 DEFSPACE라는 테이블스페이스에 QUIESCE를 수행하는 예제이다.

//JOB01    JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//RUNLOAD  EXEC PGM=DSNUTILB
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSIN    DD *
 QUIESCE TABLESPACE DEFSPACE
/*
//

6.4. 관련 환경설정

  • 데이터베이스 접속 정보

    데이터베이스의 이름과 접속정보에 관한 정보는 OpenFrame 환경설정에 ikjeft01 서브젝트의 SYSTEM:{system} 섹션에 기술한다.

    $ ofconfig list -n NODE1 -s ikjeft01 -sec "SYSTEM:DBPA"
    
    ===================================================================================
        SUBJECT     |    SECTION    |         KEY          |            VALUE
    ===================================================================================
        ikjeft01    |  SYSTEM:DBPA  |       DATABASE       |           oframe3
                    |               |        DBAUTH        |            PUBLIC
                    |               |        DBTYPE        |            TIBERO
                    |               |       INSTANCE       |           oframe3
                    |               |       PASSWORD       |             tmax
                    |               |       USERNAME       |            tibero
    ===================================================================================
  • Tibero용 DSNUTILB를 위한 Copybook 경로 지정

    Tibero 환경에서 구동하는 DSNUTILB의 경우 UNLOAD와 LOAD 커맨드 수행 중 DB2의 'DECIMAL' 컬럼의 처리를 위해 각 테이블에 필요한 Copybook 파일의 경로를 지정한다. OpenFrame 환경설정에 dbutil 서브젝트의 DIRECTORY 섹션에 기술한다. Copybook의 파일명은 데이터셋 이름 또는 테이블 이름을 사용하며, 확장자로 '.cpy’를 사용해야 한다.

    $  ofconfig list -n NODE1 -s dbutil -sec DIRECTORY -k DBUTIL_COPYBOOK_DIR
    
    ===================================================================================
        SUBJECT     |    SECTION    |         KEY          |           VALUE
    ===================================================================================
         dbutil     |   DIRECTORY   | DBUTIL_COPYBOOK_DIR  |   ${OPENFRAME_HOME}/data
    ===================================================================================
  • Tibero용 DSNUTILB를 위한 'NVARCHAR/NCHAR' 컬럼 대응 지정

    Tibero 환경에서 구동하는 DSNUTILB가 UNLOAD와 LOAD 커맨드를 수행할 때, 명령을 수행할 테이블의 컬럼 중 NVARCHAR 또는 NCHAR가 존재하는 경우 이 컬럼의 길이를 어떻게 설정할 것인지를 정한다. 'EBCDIC’으로 설정한 경우에는 NVARCHAR, NCHAR의 길이 설정과 동일한 바이트 길이를 따르고, NORMAL인 경우에는 Tibero ESQL의 Dynamic SQL이 결정하는 바이트 길이에 따른다. OpenFrame 환경설정에 dbutil 서브젝트의 DSNUTILB 섹션에 기술한다. NVARCHAR, NCHAR 컬럼에 대응하는 COBOL의 필드는 타입이 'PIC N(n)'으로 선언되어야 한다.

    $  ofconfig list -n NODE1 -s dbutil -sec DIRECTORY-k DBUTIL_COPYBOOK_DIR
    
    ===================================================================================
        SUBJECT     |    SECTION    |         KEY          |           VALUE
    ===================================================================================
         dbutil     |   DSNUTILB    |   NVARCHAR_LENGTH    |   EBCDIC
    ===================================================================================
  • QUIESCE 처리를 위한 모듈 지정

    QUIESCE 커맨드는 사용자가 지정한 모듈을 호출하는 방식으로 동작한다. QUIESCE를 처리하는 경우 QUIESCE 처리를 수행한 모듈의 PATH를 OpenFrame 환경설정에 dbutil 서브젝트에 기술한다.

    $ ofconfig list -n NODE1 -s dbutil -sec DSNUTILU
    
    ===================================================================================
        SUBJECT     |    SECTION    |         KEY        |           VALUE
    ===================================================================================
        dbutil      |   DSNUTILU    |        PATH        |   ${OPENFRAME_HOME}/temp
    ===================================================================================
  • QUIESCE 커맨드의 사용자 정의함수 프로토타입

    QUIESCE 사용자 정의함수는 다음과 같이 정의되어야 한다. DSNUTILB에서는 uid_name에 EXEC 문장에서 지정한 PARM에서 uid를 전달하고, SYSIN에서 지정한 문장을 statement에 전달한다.

    int DSNUTILU(char *uid_name, char *statement)
    {
        ...
    }
  1. OpenFrame 환경설정에 대한 자세한 정보는 "OpenFrame 환경설정 안내서"를 참고한다.

  2. Tibero용 DSNUTILB가 아닌 경우, DSNUTILB에서는 데이터베이스에 대한 연결은 libtdbconnsw 모듈을 이용해서 처리한다. 따라서 LOAD 커맨드의 경우에는 libtdbconnsw 모듈이 대상이 되는 데이터베이스에 해당되는 라이브러리를 링크해야 한다. QUIESCE를 사용하는 경우에는 DSNUTILB에서 별도로 데이터베이스에 대한 접속을 수행하지 않는다.

6.5. 유의사항

DSNUTILB 유틸리티 프로그램이 Batch 애플리케이션을 실행한 결과는 다음과 같다.

  • 정상적으로 실행한 경우

    애플리케이션에서 받은 코드를 반환한다.

  • 에러가 발생한 경우

    해당 에러 메시지를 SYSPRINT DD에 출력하고, 각 에러에 해당하는 코드를 반환한다.

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

    코드 설명

    0

    명령을 정상적으로 처리한 경우 반환되는 코드이며 일부 정보성 메시지가 출력될 수 있다.

    4

    데이터베이스 수행 중 Warning이 발생한 경우이다.

    8

    다음과 같은 경우에 발생한다.

    • SYSIN을 잘못 기술한 경우

    • 데이터베이스 정보를 지정하지 않은 경우

    • Tibero용 DSNUTILB에서 테이블에 대응하는 Copybook 파일을 찾지 못한 경우

    • QUIESCE 등을 수행하기 위한 외부 모듈을 찾지 못한 경우

7. INZUTILB

DB2 데이터베이스를 테이블 데이터를 OpenFrame 데이터셋으로 언로드하는 유틸리티 프로그램이다. SYSIN 데이터셋에 언로드를 수행할 SQL을 지정한다.

7.1. DD 설정

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

항목 설명

SYSIN DD

DB2 데이터베이스에 수행할 SELECT SQL을 지정한다.

SYSREC DD

출력 데이터셋을 지정한다. SQL을 수행한 결과를 저장할 출력 데이터셋을 지정한다.

7.2. 명령어 설정

본 절에서는 INZUTILB의 명령어에 대해서 설명한다.

EXEC

INZUTILB를 실행하기 위해서는 JCL의 EXEC 문장에 다음과 같이 지정한다.

//STEP EXEC PGM=INZUTILB
SYSIN DD

DB2에 발행할 SQL을 기술한다.

//SYSIN DD *
 SELECDT * FROM EMPLOYEE
/*

7.3. 사용예제

다음은 INZUTILB 유틸리티 프로그램을 실행하여 DB2의 EMPLOYEE 테이블을 TEST.EMPLOYEE 데이터셋으로 언로드하는 예이다. SYSIN에는 SQL 문을 1개만 지정할 수 있다.

//JOB01    JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//UNLOAD   EXEC PGM=INZUTILB
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSREC   DD DSN=TEST.EMPLOYEE,DISP=(NEW,CATLG,DELETE)
//SYSIN    DD *
 SELECT * FROM EMPLOYEE
/*
//

7.4. 관련 환경설정

데이터베이스의 이름과 접속정보를 OpenFrame 환경설정에 ikjeft01 서브젝트의 SYSTEM:{system} 섹션의 키들에 설정한다.

  1. 환경설정 항목의 세부 내용은 OpenFrame Batch "환경설정 안내서"를 참고한다.

  2. INZUTILB에서는 데이터베이스에 대한 연결은 libtdbconnsw 모듈을 이용해서 처리한다. 따라서 libtdbconnsw 모듈의 대상이 되는 데이터베이스에 해당되는 라이브러리를 링크해야 한다.

7.5. 유의 사항

INZUTILB 유틸리티 프로그램이 Batch 애플리케이션을 실행한 결과는 다음과 같다.

  • 정상적으로 실행한 경우

    애플리케이션에서 받은 코드를 반환한다.

  • 에러가 발생한 경우

    해당 에러 메시지를 SYSPRINT DD에 출력하고, 각 에러에 해당하는 코드를 반환한다.

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

    코드 설명

    0

    명령을 정상적으로 처리한 경우 반환되는 코드이며 일부 정보성 메시지가 출력될 수 있다.

    4

    대상 데이터베이스에서 SQL을 수행할 때 Warning이 발생한 경우이다.

    또는 대상 결과 집합이 없는 경우에도 발생한다.

    16

    다음과 같은 경우에 발생한다.

    • 데이터베이스 접속 정보를 지정하지 않은 경우

    • SYSREC DD를 기술하지 않은 경우

    • SYSIN DD를 기술하지 않은 경우

    • SQL 수행 중에 에러가 발생한 경우