OpenFrame HiDB 유틸리티

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

1. 개요

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

프로그램명 설명

DFSURGL0

HD 재편성 Unload 유틸리티인 DFSURGU0에서 생성한 데이터셋을 HD 데이터베이스로 Reload한다.

DFSURGU0

HDAM, HIDAM, 또는 HISAM 편성법으로 정의된 데이터베이스를 순차 데이터셋(SDS)으로 Unload한다.

2. DFSURGL0

DFSURGL0 유틸리티는 HD 재편성 Unload 유틸리티인 DFSURGU0에서 생성한 데이터셋을 입력으로 하여 HDAM, HIDAM 또는 HISAM 데이터베이스로 Reload한다.

DFSURGL0 유틸리티 프로그램은 다음과 같은 기능을 수행한다.

  • DFSURGU0 유틸리티가 생성한 재편성용 Unload 데이터셋을 HDAM, HIDAM, HISAM 데이터베이스로 Reload

  • Logical Relationship 및 Secondary Index 정보가 담긴 워크 데이터셋 생성

  • 데이터베이스 Reload 후 세그먼트 통계 정보 출력

HiDB의 DFSURGL0 유틸리티는 IBM IMS/DB의 DFSURGL0 유틸리티에 대응한다.

2.1. EXEC 설정

EXEC 문장의 설정은 다음과 같다.

PGM=DFSRRC00,PARM='ULU,DFSURGL0,dbd-name'
항목 설명

PGM

DFSURGL0 유틸리티는 IMS/DB 사용 프로그램의 실행 유틸리티인 DFSRRC00을 통해 실행된다.

PARM

  • ULU,DFSURGL0 : 유틸리티 Region의 DFSURGL0을 실행한다.

  • dbd-name : Reload 대상 데이터베이스의 DBD 이름을 지정한다.

2.2. DD 설정

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

항목 설명

IMS DD

EXEC 문장에서 파라미터로 입력한 DBD가 위치하는 라이브러리를 지정한다.

(필수 항목)

database DD

Unload 대상 데이터베이스 데이터셋을 지정한다. (필수 항목)

데이터베이스 DD 이름은 반드시 DBD에서 기술된 DD 이름과 동일해야 한다. HIDAM 데이터베이스인 경우 관련 인덱스 데이터셋도 함께 지정해야 한다.

SYSPRINT DD

DFSURGL0 유틸리티의 메시지가 출력된다. (필수 항목)

DFSUINPT DD

HD 재편성 Unload 유틸리티인 DFSURGU0에서 생성한 데이터셋으로 Reload 대상 입력 데이터셋을 지정한다. (필수 항목)

입력 데이터셋을 DUMMY로 기술한 경우 HDAM, HIDAM 데이터베이스는 데이터셋 초기화(pre-format)작업이 수행된다.

DFSURWF1 DD

Reload 대상 데이터베이스가 세그먼트 간의 Logical Relationship을 갖는 경우 생성할 작업용 데이터셋을 지정한다.

데이터셋은 Prefix Resolution 유틸리티인 DFSURGL0에서 입력 데이터셋으로 사용되며 Reload할 때 발생한 Logical Relationship 또는 Secondary Index 관련 정보가 담긴다.

DFSURCDS DD

HiDB에서는 문법 오류만 검사하고 사용하지 않는다.

DFSURLOG DD

Reload 작업에 대한 로그를 출력할 데이터셋을 지정한다. (선택 항목)

Reload 작업이 실패할 경우 원인이 되는 세그먼트 데이터를 찾을 때 유용하다. 로그 데이터셋에는 Reload 입력 데이터셋의 세그먼트 순번, 세그먼트 이름, 상태코드, 세그먼트 키값이 기록된다.

2.3. 명령어 설정

OpenFrame의 DFSURGL0 유틸리티는 명령어를 사용하지 않는다. 따라서 IBM Mainframe의 컨트롤 문장이 기술되더라도 무시한다.

2.4. 통계 정보

데이터베이스 Reload 작업이 정상적으로 종료되면 다음과 같은 통계 정보를 SYSPRINT DD에 출력한다.

*** HIERARCHICAL DIRECT DB REORG RELOAD ***

          SEGMENT  LEVEL  STATISTICS

        TOTAL SEGMENTS BY SEGMENT TYPE
 ===========================================
 SEGMENT   SEGMENT
 NAME      LEVEL       RELOADED  DIFFERENCE
 -------------------------------------------
 PBM01VAA     1            9628
 PBM01VAD     2            9628
 PBM01VAE     2               0
 PBM01VAB     2           28243
 PBM01VAF     3           28243
 PBM01VAC     3           15586
 PBM01VAG     2               0
 -------------------------------------------
          TOTAL SEGMENTS IN DATABASE
 UNLOADED          RELOADED      DIFFERENCE
    91328             91328
 ===========================================
  • SEGMENT LEVEL STATISTICS 필드 항목

    다음은 출력 내용 중 SEGMENT LEVEL STATISTICS의 필드 항목에 대한 설명이다.

    항목 설명

    SEGMENT NAME

    같은 라인의 통계 정보가 적용되는 세그먼트 이름이다.

    SEGMENT LEVEL

    데이터베이스 내 세그먼트의 계층 레벨 번호이다.

    RELOADED

    데이터베이스에 Reload된 세그먼트 인스턴스의 총 개수이다.

    DIFFERENCE

    Reload 건수와 Unload 건수가 일치하면 공백으로 표시된다.

    Reload 건수가 더 많은 경우는 플러스(+) 기호, Unload 건수가 더 많은 경우는 마이너스(-) 기호와 해당 건수가 함께 표시된다.

  • TOTAL SEGMENTS IN DATABASE 필드 항목

    다음은 출력 내용 중 TOTAL SEGMENTS IN DATABASE의 필드 항목에 대한 설명이다.

    항목 설명

    UNLOADED

    HD 재편성 Unload 유틸리티인 DFSURGU0에서 Unload할 때 계수한 모든 세그먼트 인스턴스들의 개수이다.

    RELOADED

    HD 재편성 Reload 유틸리티인 DFSURGL0에서 Reload할 때 계수한 모든 세그먼트 인스턴스들의 개수이다.

    DIFFERENCE

    Reload 건수와 Unload 건수가 일치하면 공백으로 표시된다. 같지 않으면 차이나는 건수가 표시된다.

2.5. 사용예제

다음은 HD 재편성 Unload 유틸리티인 DFSURGU0에서 생성한 TMAX01.DB1 데이터셋을 DFSUINPT DD로 지정하여 TMAX01DB DBD에서 정의한 데이터베이스로 Reload하는 예제이다.

//DFSURGL0    JOB   MSGLEVEL=1,MSGCLASS=X,CLASS=A,REGION=4096K
//*******************************************************************
//*    R E L O A D  ( H I D A M )
//*******************************************************************
//STEP020    EXEC   PGM=DFSRRC00,PARM='ULU,DFSURGL0,TMAX01DB'
//STEPLIB      DD   DSN=IMSVS.RESLIB,DISP=SHR
//IMS          DD   DSN=IMS.DBDMOD,DISP=SHR
//SYSPRINT     DD   SYSOUT=*
//DFSUINPT     DD   DSN=TMAX01.DB1,DISP=SHR
//DFSURWF1     DD   DSN=TMAX01.DFSURWF1,UNIT=3380,
//             SPACE=(TRK,(5000,500),RLSE),
//             DCB=(BLKSIZE=1008,LRECL=300,RECFM=VB),
//             DISP=(,CATLG,DELETE)
//DFSURCDS     DD   DSN=TMAX01.DFSURCDS,DISP=SHR
//TMAX01I1     DD   DSN=TMAX01.IX1,DISP=SHR
//TMAX01D1     DD   DSN=TMAX01.DD1,DISP=SHR
//TMAX01D2     DD   DSN=TMAX01.DD2,DISP=SHR

TMAX01I1 DD는 인덱스 데이터셋을 지정한 것이며 TMAX01D1과 TMAX01D2 DD는 데이터베이스의 데이터셋을 지정한 것이다. DFSURWF1 DD는 Logical Relationship 정보가 들어있는 TMAX01.DFSURWF1 데이터셋을 지정한 것으로, Reload 중 생성되며 Prefix Resolution 유틸리티인 DFSURGL0에서 입력 데이터셋으로 사용된다.

2.6. 유의사항

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

  • 정상적으로 실행한 경우

    코드 0을 반환한다.

  • 에러가 발생한 경우

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

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

    코드 설명

    4

    Reload 대상 세그먼트가 존재하지 않는 경우에 발생한다.

    8

    Reload 건수와 Unload 건수가 불일치하는 경우에 발생한다.

    16

    프로그램 처리 에러 또는 시스템과 관련된 에러로 다음의 경우가 해당된다.

    • OpenFrame 시스템 라이브러리 초기화 실패

    • 데이터베이스 Reload 작업의 실패

    • 기타 DFSURGL0 유틸리티 프로그램 에러

3. DFSURGU0

DFSURGU0 유틸리티는 HDAM, HIDAM 또는 HISAM 액세스 메소드로 정의된 데이터베이스를 읽어 데이터베이스 재편성에 필요한 순차 데이터셋(SDS)을 생성한다.

DFSURGU0 유틸리티 프로그램으로 다음과 같은 기능을 수행한다.

  • HDAM, HIDAM, HISAM 데이터베이스의 재편성용 Unload 데이터셋 생성

  • Unload 데이터셋의 세그먼트 통계 정보 출력

HiDB의 DFSURGU0 유틸리티는 IBM IMS/DB의 DFSURGU0 유틸리티에 대응한다.

3.1. EXEC 설정

EXEC 문장의 설정은 다음과 같다.

PGM=DFSRRC00,PARM='ULU,DFSURGU0,dbd-name,[formatopt]'
항목 설명

PGM

DFSURGU0 유틸리티는 IMS/DB 사용 프로그램의 실행 유틸리티인 DFSRRC00을 통해 실행된다.

PARM

  • ULU, DFSURGU0 : 유틸리티 Region의 DFSURGU0을 실행한다.

  • dbd-name : Unload 대상 데이터베이스의 DBD 이름을 지정한다.

  • [formatopt]

    • NOSEGNAME : 출력 형식에서 segment 이름을 생략한다.

    • -IXPDTFDV : 출력 형식을 원본 DB의 데이터 출력 형식에 맞춘다.

3.2. DD 설정

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

항목 설명

IMS DD

EXEC 문장에서 파라미터로 입력한 DBD가 위치하는 라이브러리를 지정한다. (필수 항목)

database DD

Unload 대상 데이터베이스 데이터셋을 지정한다. (필수 항목)

데이터베이스 DD 이름은 반드시 DBD에서 기술된 DD 이름과 동일해야 한다. HIDAM 데이터베이스인 경우 관련 인덱스 데이터셋도 함께 지정해야 한다.

SYSPRINT DD

DFSURGU0 유틸리티의 메시지가 출력된다. (필수 항목)

DFSURGU1 DD

데이터베이스를 Unload하여 출력할 순차 데이터셋을 지정한다. (필수 항목)

Unload 데이터셋의 포맷은 OpenFrame 표준 HiDB 마이그레이션 데이터 포맷을 참조한다.

3.3. 명령어 설정

OpenFrame의 DFSURGU0 유틸리티는 명령어를 사용하지 않는다. 따라서 IBM Mainframe의 내용이 기술되더라도 무시한다.

3.4. 통계 정보

데이터베이스 Unload 작업이 정상적으로 종료되면 다음과 같은 통계 정보를 SYSPRINT DD에 출력한다.

 ******************** HIERARCHICAL DIRECT DB REORG UNLOAD **********************

                     D A T A B A S E    S T A T I S T I C S
 SEGMENT LEVEL STATISTICS                          RECORD LEVEL STATISTICS
 ===============================================================================
 MAXMUM  AVG    MAXIMUM  AVG      SEGMENT  SEGMENT TOTAL SEGMENTS  AVG COUNT PER
 TWINS   TWINS  CHILDREN CHILDREN NAME     LEVEL   BY SEG TYPE     DB RECORD
 -------------------------------------------------------------------------------
       1  1.00      1873  8.48    PBM01VAA       1           9628        1.00
       1  1.00         0  0.00    PBM01VAD       2           9628        1.00
       0  0.00         0  0.00    PBM01VAE       2              0        0.00
     567  2.93        12  1.55    PBM01VAB       2          28243        2.93
       1  1.00         0  0.00    PBM01VAF       3          28243        2.93
      11  0.55         0  0.00    PBM01VAC       3          15586        1.61
 -------------------------------------------------------------------------------
 TOTAL SEGMENTS IN DATABASE=   91328 AVERAGE DATABASE RECORD LENGTH=  2271 BYTES
 ===============================================================================
  • SEGMENT LEVEL STATISTICS 필드 항목

    다음은 출력 내용 중 SEGMENT LEVEL STATISTICS의 필드 항목에 대한 설명이다.

    항목 설명

    MAXIMUM TWINS

    같은 부모 세그먼트 인스턴스에 종속된 트윈 세그먼트 인스턴스의 최대 개수이다. 루트 세그먼트는 항상 1의 값을 가진다.

    AVG TWINS

    같은 부모 세그먼트 인스턴스에 종속된 트윈 세그먼트 인스턴스의 평균 개수이다.

    MAXIMUM CHILDREN

    같은 부모 세그먼트 인스턴스에 종속된 자식 세그먼트 인스턴스의 최대 개수이다.

    AVG CHILDREN

    같은 부모 세그먼트 인스턴스에 종속된 자식 세그먼트 인스턴스의 평균 개수이다. 최하위 세그먼트의 경우 0의 값을 가진다.

    SEGMENT NAME

    같은 라인의 통계 정보가 적용되는 세그먼트 이름이다.

    SEGMENT LEVEL

    세그먼트의 계층 레벨 번호이다. 상위에서 하위로 나열된다.

  • RECORD LEVEL STATISTICS 필드 항목

    다음은 출력 내용 중 RECORD LEVEL STATISTICS의 필드 항목에 대한 설명이다.

    항목 설명

    TOTAL SEGMENTS BY SEG TYPE

    같은 세그먼트 타입을 가진 인스턴스의 총 개수이다.

    AVG COUNT PER DB RECORD

    1개의 레코드에 들어있는 같은 세그먼트 타입을 가진 인스턴스의 평균 개수이다.

3.5. 사용예제

다음은 TMAX01DB DBD에서 정의한 데이터베이스를 읽어 DFSURGU1 DD의 TMAX01.DB1 데이터셋으로 Unload하는 예제이다.

//DFSURGU0    JOB   MSGLEVEL=1,MSGCLASS=X,CLASS=A,REGION=4096K
//******************************************************************
//*    HD REORGANIZATION UNLOAD UTILITY (DFSURGU0)                 *
//******************************************************************
//STEP010    EXEC   PGM=DFSRRC00,PARM='ULU,DFSURGU0,TMAX01DB'
//STEPLIB      DD   DSN=IMSVS.RESLIB,DISP=SHR
//IMS          DD   DSN=IMS.DBDMOD,DISP=SHR
//SYSPRINT     DD   SYSOUT=*
//TMAX01I1     DD   DSN=TMAX01.IX1,DISP=SHR
//TMAX01D1     DD   DSN=TMAX01.DD1,DISP=SHR
//TMAX01D2     DD   DSN=TMAX01.DD2,DISP=SHR
//DFSURGU1     DD   DSN=TMAX01.DB1,DISP=(,CATLG,DELETE),
//             UNIT=3380,LABEL=(,SL)

TMAX01I1 DD는 인덱스 데이터셋을 지정한 것이며 TMAX01D1과 TMAX01D2 DD는 데이터베이스 데이터셋을 지정한 것이다.

3.6. 유의사항

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

  • 정상적으로 실행한 경우

    코드 0을 반환한다.

  • 에러가 발생한 경우

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

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

    코드 설명

    8

    프로그램 처리 에러 또는 시스템과 관련된 에러로 다음의 경우가 해당된다.

    • OpenFrame 시스템 라이브러리 초기화 실패

    • 기타 DFSURGU0 유틸리티 프로그램 에러