마이그레이션 툴

본 장에서는 마이그레이션 툴을 사용하여 데이터셋 관련 작업을 처리하는 방법에 대해 기술한다.

1. 개요

다음은 OpenFrame 마이그레이션을 위한 프로그램 목록이다.

프로그램명 설명

cobgensch

Mainframe 데이터셋을 OpenFrame 데이터셋으로 마이그레이션하는 과정에서 필요한 데이터셋 마이그레이션 스키마 파일을 생성한다. COBOL Copybook 소스 파일을 참조하여 스키마 파일을 생성한다.

cpmmgr

주어진 CPM 데이터를 읽어들여 매핑 정보를 출력하거나 편집할 수 있으며, 간단한 문장이나 파일을 변환하는 테스트도 가능한 툴이다.

dsmigin

EBCDIC 코드 형태의 Mainframe 데이터셋을 ASCII 코드 형태의 OpenFrame 데이터셋으로 마이그레이션할 때 사용한다.

dsmigout

ASCII 코드 형태의 OpenFrarme 데이터셋을 EBCDIC 코드 형태의 Mainframe 데이터셋으로 변환하여 UNIX 파일로 Export한다.

pligensch

Mainframe 데이터셋을 OpenFrame 데이터셋으로 마이그레이션하는 과정에서 필요한 데이터셋 마이그레이션 스키마 파일을 생성한다. pligensch는 PL/I 소스파일을 참조하여 스키마 파일을 생성한다.

sqlgensch

Mainframe 데이터셋을 OpenFrame 데이터셋으로 마이그레이션하는 과정에서 필요한 데이터셋 마이그레이션 스키마 파일을 생성한다. sqlgensch는 SQL 테이블 생성 스크립트를 참조하여 스키마 파일을 생성한다.

2. cobgensch

cobgensch는 Mainframe 데이터셋을 OpenFrame 데이터셋으로 마이그레이션하는 과정에서 필요한 데이터셋 마이그레이션 스키마 파일을 생성하는 툴이다. 데이터셋 마이그레이션 스키마 파일을 생성하는 프로그램으로는 cobgensch과 pligensch가 있다. cobgensch는 COBOL Copybook 소스 파일을 참조하여 스키마 파일을 생성하고, pligensch는 PL/I 소스 파일을 참조하여 스키마 파일을 생성한다.

데이터셋 마이그레이션을 수행할 때 원본 데이터 파일인 UNIX 소스 파일의 한 레코드에 여러 char-set이 섞여 있는 경우(EBCDIC, ASCII 코드가 섞여있거나 2Byte 문자, Packed Decimal, Zoned Decimal이 사용된 경우 등)에는 레코드 단위의 일괄적인 단순 코드변환을 할 수 없다. 따라서 레코드의 각 필드에 대한 코드 변환 규칙을 스키마 파일에 정의한다. 이후 dsmigin 프로그램을 실행할 때 각 데이터셋에 해당하는 스키마 파일을 지정하여 데이터셋 마이그레이션 작업을 수행한다.

cobgensch 프로그램은 COBOL 소스 파일이나 COBOL Copybook 파일로 마이그레이션 스키마 파일을 생성한다. 생성된 스키마 파일들 저장할 디렉터리 경로는 OpenFrame 환경설정에 ds 서브젝트, DATASET_DIRECTORY 섹션의 SCHEMA_DIR 키 VALUE 항목에 지정한다.

OpenFrame 환경설정에 대한 자세한 내용은 OpenFrame Base "환경설정 안내서"를 참고한다.

사용법

cobgensch를 실행하는 방법은 다음과 같다.

Usage: cobgensch input_file [options]
  • 입력 항목

    항목 설명

    input_file

    COBOL 소스 파일 또는 COBOL Copybook 파일을 지정한다.

  • [options]

    옵션 설명

    [-r rec_len]

    스키마 파일을 사용할 데이터셋이 고정길이 레코드이고 레코드 길이를 알고 있는 경우에 레코드 길이를 지정하면 스키마 파일을 생성할 때 레코드 길이 정합성을 체크한다.

    [-o output]

    생성될 스키마 파일의 이름을 지정한다.

    옵선을 지정하지 않은 경우 input_file 이름을 기본값으로 사용한다.

    옵션을 지정한 경우 볼륨 시리얼 지정 여부에 따라 "<volser>_<output>.conv" 또는 "<output>.conv"란 이름으로 스키마 파일이 생성된다.

    [-v volser]

    생성될 스키마 파일명에 사용될 볼륨 시리얼을 지정한다.

    옵션을 지정하지 않은 경우 생성될 스키마 파일명은 볼륨 시리얼을 포함하지 않는다. 옵션을 지정한 경우 "<volser>_<output>.conv"란 이름으로 스키마 파일이 생성된다.

    [-f format]

    Copybook 파일의 포맷을 지정한다.

    다음의 값 중에 하나를 지정할 수 있고 이 옵션을 지정하지 않는 경우 Fixed format를 기본값으로 사용한다.

    • F(Fixed format) : 8-72 컬럼을 Copybook의 소스로 처리한다.

    • V(Variable format) : 8-251 컬럼을 Copybook의 소스로 처리한다.

    • R(Free format) : 1-251 컬럼을 Copybook의 소스로 처리한다.

    [-d]

    scanner와 parser를 포함한 모든 생성된 디버그 메시지를 보여준다.

    [-cs currency_sign]

    스키마 파일을 생성하는 경우 COBOL 소스 또는 COBOL Copybook 내 PICTURE 절을 위한 통화 기호를 지정한다.

    PICTURE 절에서 사용한 기호와 동일한 1byte의 기호가 지정되어야 하며, 다음과 같은 PICTURE SYMBOL이 지정되었을 경우 사용자가 지정한 기호는 무시되고 기존 코드 변환 규칙을 따라 스키마 파일이 생성된다.

    • S , (comma) . (dot) 0 / + - C R D B A X 9 Z 1 G N P V

    [-p]

    COPY OF <library-name> 로 지정한 라이브러리 디렉터리를 찾을 경로를 지정한다. 이 옵션을 지정하지 않았을 경우 라이브러리 디렉터리 경로를 아래의 우선 순위로 찾는다.

    • OpenFrame 환경설정에 dstool 서브젝트, COBGENSCH 섹션의 COBCOPY 키 VALUE 에 지정된 경로(자세한 내용은 "OpenFrame 환경설정 안내서" 참고)

    • ${COBGENSCH_COBCOPY} 환경 변수에 지정된 경로

    • ${PWD} 현재 경로

    [-D]

    동적 변환 스키마 파일을 생성한다. 이 옵션을 지정한 경우 dsmigin이나 dsmigout을 이용하여 동적으로 마이그레이션을 하기 위해 [-y] 옵션을 지정해야 한다.

    [-V]

    cobgensch의 버전 정보를 화면에 출력한다.

사용예제 (1)

다음은 COBOL Copybook 파일의 간단한 예제이다.

<COB.TESTDATA1.cpy>

FD  I-FILE
    RECORDING MODE IS F
    RECORD CONTAINS  95 CHARACTERS
    BLOCK CONTAINS 0 RECORDS
    LABEL RECORDS ARE STANDARD
    DATA RECORD ARE I-REC.

01  I-REC.
    05  I-SAGNO                   PIC  X(11).
    05  I-DAMBO                   PIC  X(02).
    05  I-PHNO                    PIC  X(03).
    05  I-BKNO                    PIC  9(03).
    05  I-BKDT                    PIC  X(10).
    05  I-BKDT-I                  PIC  X(01).
    05  I-BSGB                    PIC  X(02).
    05  I-BSHG                    PIC  X(02).
    05  I-CIGB                    PIC  X(02).
    05  I-CIHG                    PIC  X(02).
    05  I-JHGB                    PIC  X(02).
    05  I-TTJC                    PIC S9(13) COMP-3.
    05  I-TTIC                    PIC S9(13).
    05  I-NAME                    PIC  X(20).
    05  I-TEST1                   PIC  Z(10).
    05  I-TEST2                   PIC  +(10).
    05  I-TEST3                   PIC  -(10).
    05  I-TEST4                   PIC  ---------9.
    05  I-TEST5                   PIC  ----------.

다음은 cobgensch를 실행하여 스키마 파일을 생성하는 예이다.

$ cobgensch COB.TESTDATA1.cpy

위의 cobgensch를 실행한 결과, 정삭적으로 스키마 파일이 생성되었다.

input filename = COB.TESTDATA1.cpy
schema filename = /home/tmax/openframe/schema/COB.TESTDATA1.conv

다음은 cobgensch를 실행하여 잘못된 레코드 길이를 지정했을 경우 정합성을 체크하는 예이다.

$ cobgensch COB.TESTDATA1.cpy -r 100

위의 cobgensch를 실행한 결과, 레코드 길이 정합성 체크에서 에러가 발생했다.

input filename = COB.TESTDATA1.cpy
input record length = 100
** input record length is different from scheme record length!!!
** (input reclen = 100, scheme reclen = 130)

Failed to generate a schema file. rc - -1
schema filename = /home/tmax/openframe/schema/COB.TESTDATA1.conv

다음은 올바른 레코드 길이를 지정하여 cobgensch를 실행하는 예이다.

$ cobgensch COB.TESTDATA1.cpy -r 130

위의 cobgensch를 실행한 결과 정상적으로 스키마 파일이 생성되었다. 레코드 길이가 130Byte로 지정한 값과 일치하므로 정합성을 체크할 때 오류가 발생하지 않았다.

input filename = COB.TESTDATA1.cpy
input record length = 130
scheme filenama = /home/tmax/openframe/schema/COB.TESTDATA1.conv

다음은 위의 cobgensch를 실행한 후 생성된 스키마 파일의 예이다.

<COB.TESTDATA1.conv>

* Schema Version 7.1
L1, 01, I-REC, NULL, NULL, 0, 1:1,
L2, 05, I-SAGNO, EBC_ASC, NULL, 11, 1:1,
L3, 05, I-DAMBO, EBC_ASC, NULL, 2, 1:1,
L4, 05, I-PHNO, EBC_ASC, NULL, 3, 1:1,
L5, 05, I-BKNO, U_ZONED, NULL, 3, 1:1,
L6, 05, I-BKDT, EBC_ASC, NULL, 10, 1:1,
L7, 05, I-BKDT-I, EBC_ASC, NULL, 1, 1:1,
L8, 05, I-BSGB, EBC_ASC, NULL, 2, 1:1,
L9, 05, I-BSHG, EBC_ASC, NULL, 2, 1:1,
L10, 05, I-CIGB, EBC_ASC, NULL, 2, 1:1,
L11, 05, I-CIHG, EBC_ASC, NULL, 2, 1:1,
L12, 05, I-JHGB, EBC_ASC, NULL, 2, 1:1,
L13, 05, I-TTJC, PACKED, NULL, 7, 1:1,
L14, 05, I-TTIC, ZONED, TRAILING, 13, 1:1,
L15, 05, I-NAME, EBC_ASC, NULL, 20, 1:1,
L16, 05, I-TEST1, U_ZONED, NULL, 10, 1:1,
L17, 05, I-TEST2, EBC_ASC, NULL, 10, 1:1,
L18, 05, I-TEST3, EBC_ASC, NULL, 10, 1:1,
L19, 05, I-TEST4, EBC_ASC, NULL, 10, 1:1,
L20, 05, I-TEST5, EBC_ASC, NULL, 10, 1:1,

* Condition
L0, "\0", ( L1 L2 L3 L4 L5 L6 L7 L8 L9 L10 L11 L12 L13 L14 L15 L16 L17 L18 L19 L20 )
사용예제 (2)

다음은 통화 기호($)를 사용하는 COBOL Copybook 파일의 간단한 예제이다.

<COB.TESTDATA2.cpy>

FD  I-FILE
    RECORDING MODE IS F
    RECORD CONTAINS  95 CHARACTERS
    BLOCK CONTAINS 0 RECORDS
    LABEL RECORDS ARE STANDARD
    DATA RECORD ARE I-REC.

01  I-REC.
    05  I-TEST1                   PIC  X(11).
    05  I-TEST2                   PIC  9(03).
    05  I-TEST3                   PIC  S9(13) COMP-3.
    05  I-TEST4                   PIC  $$,$$$,$$$.99.

다음은 Copybook에서 사용한 통화 기호($)를 지정하여 cobgensch를 실행하는 예이다.

$ cobgensch -cs $ COB.TESTDATA2.cpy

위의 cobgensch를 실행한 결과, 정상적으로 스키마 파일이 생성되었다.

<COB.TESTDATA2.conv>

* Schema Version 7.1
L1, 01, I-REC, NULL, NULL, 0, 1:1,
L2, 05, I-TEST1, EBC_ASC, NULL, 11, 1:1,
L3, 05, I-TEST2, U_ZONED, NULL, 3, 1:1,
L4, 05, I-TEST3, PACKED, NULL, 7, 1:1,
L5, 05, I-TEST4, EBC_ASC, NULL, 13, 1:1,

* Condition
L0, "\0", ( L1 L2 L3 L4 L5 )

다음은 Copybook에서 사용되지 않은 기호 @ 를 지정하여 cobgensch를 실행하는 예이다.

$ cobgensch -cs @ COB.TESTDATA2.cpy

위의 cobgensch를 실행한 결과, 다음과 같은 오류가 발생하였다.

input filename = COB.TESTDATA2.cpy
Invalid PICTURE string => $$,$$$,999.99 at COB.TESTDATA2.cpy(line near 13)

다음은 통화 기호를 사용하지 않는 COBOL Copybook 파일에 대한 간단한 예제이다.

<COB.TESTDATA3.cpy>

01  I-REC.
    05  I-TEST1                   PIC  X(11).
    05  I-TEST2                   PIC  9(03).

다음은 통화 기호로 Unsigned Zoned Decimal 을 의미하는 PICTURE SYMBOL '9’를 부여해 cobgensch를 실행하는 예이다.

$ cobgensch -cs 9 COB.TESTDATA3.cpy

위의 cobgensch를 실행한 결과, 다음과 같은 스키마 파일이 정상적으로 생성되었다.

<COB.TESTDATA3.conv>

* Schema Version 7.1
L1, 01, I-REC, NULL, NULL, 0, 1:1,
L2, 05, I-TEST1, EBC_ASC, NULL, 11, 1:1,
L3, 05, I-TEST2, U_ZONED, NULL, 3, 1:1,

* Condition
L0, "\0", ( L1 L2 L3 )
사용예제 (3)

다음은 중복 필드를 포함하는 COBOL Copybook 파일의 간단한 예제이다.

중복 필드를 포함하는 COBOL Copybook을 변환하기 위해선 OpenFrame 환경설정에 ds 서브젝트, DATASET_DEFAULT 섹션의 ALLOW_FIELD_DUP 키의 VALUE 항목 값이 YES로 설정되어 있어야 한다. 그렇지 않은 경우 변환을 수행할 때 에러가 출력된다.

중복되는 필드 뒤에 "_[숫자]" 형태로 번호가 붙는다. $$COND문에서 중복 필드 중 하나를 특정하기 위해선 아래의 예시와 같이 순서에 맞춰 번호를 붙여 지정할 수 있다.

<COB.TESTDATA4.cpy>

01  I-REC.
    05  I-FLD-DUP                 PIC X(02).
    05  I-FLD-DUP                 PIC X(02).
    05  I-TEST1                   PIC X(11).
    05  I-TEST2                   PIC X(11).
    05  I-TEST-DUP                PIC X(11) REDEFINES I-TEST1.
    05  I-TEST-DUP                PIC X(11) REDEFINES I-TEST2.
    05  I-TEST3                   PIC 9(02).

$$COND : I-FLD-DUP_1 : "AB" : I-TEST-DUP_1

다음은 cobgensch를 실행하여 스키마 파일을 생성하는 예이다.

$ cobgensch COB.TESTDATA4.cpy

위의 cobgensch를 실행한 결과, 다음과 같은 스키마 파일이 정상적으로 생성되었다.

<COB.TESTDATA4.conv>

Schema Version 7.1
L1, 01, I-REC, NULL, NULL, 0, 1:1,
L2, 05, I-FLD-DUP_1, EBC_ASC, NULL, 2, 1:1,
L3, 05, I-FLD-DUP_2, EBC_ASC, NULL, 2, 1:1,
L4, 05, I-TEST1, EBC_ASC, NULL, 11, 1:1,
L5, 05, I-TEST2, EBC_ASC, NULL, 11, 1:1,
L6, 05, I-TEST-DUP_1, EBC_ASC, NULL, 11, 1:1,  # REDEFINES I-TEST1
L7, 05, I-TEST-DUP_2, EBC_ASC, NULL, 11, 1:1,  # REDEFINES I-TEST2
L8, 05, I-TEST3, U_ZONED, NULL, 2, 1:1,

* Condition
L2, "AB", ( L1 L2 L3 L5 L6 L8 )
L0, "\0", ( L1 L2 L3 L4 L5 L8 )
사용예제 (4)

다음은 COPY OF 구문을 사용한 COBOL Copybook 파일의 간단한 예제이다.

<${OPEFNRAME_HOME}/COB.TESTDATA5.cpy>

01 REC.
  03 FLD-KEY PIC X(10).
  03 FLD-DAT PIC X(60).
  03 FLD-COPY.
      COPY COPY001 OF CPYDIR.

다음은 COPY OF 구문으로 지정된 COBOL Copybook 파일의 간단한 예제이다.

<${OPENFRAME_HOME}/CPYDIR/COPY001>

05 FLD-AAA PIC X(02).
05 FLD-BBB PIC X(02).
05 FLD-CCC PIC X(02).
05 FLD-DDD PIC X(02).
05 FLD-EEE PIC X(02).

다음은 cobgensch를 실행하여 스키마 파일을 생성하는 예이다.

$ cobgensch COB.TESTDATA5.cpy

위의 cobgensch를 실행한 결과, 다음과 같은 스키마 파일이 정상적으로 생성되었다.

<COB.TESTDATA5.conv>

* Schema Version 7.1
L1, 01, REC, NULL, NULL, 0, 1:1,
L2, 03, FLD-KEY, EBC_ASC, NULL, 10, 1:1,
L3, 03, FLD-DAT, EBC_ASC, NULL, 60, 1:1,
L4, 03, FLD-COPY, NULL, NULL, 0, 1:1,
L5, 05, FLD-AAA, EBC_ASC, NULL, 2, 1:1,
L6, 05, FLD-BBB, EBC_ASC, NULL, 2, 1:1,
L7, 05, FLD-CCC, EBC_ASC, NULL, 2, 1:1,
L8, 05, FLD-DDD, EBC_ASC, NULL, 2, 1:1,
L9, 05, FLD-EEE, EBC_ASC, NULL, 2, 1:1,

* Condition
L0, "\0", ( L1 L2 L3 L4 L5 L6 L7 L8 L9 )
관련 환경설정

OpenFrame 환경설정에 다음의 설정을 한다.

  • ds 서브젝트, DATASET_DIRECTORY 섹션의 SCHEMA_DIR 키의 VALUE 항목에 생성된 스키마 파일을 저장할 디렉터리 경로를 지정한다.

    $ ofconfig list -s ds -sec DATASET_DIRECTORY -k SCHEMA_DIR
    
    ===================================================================================
       SUBJECT   |      SECTION      |       KEY         |           VALUE
    ===================================================================================
         ds      | DATASET_DIRECTORY |     SCHEMA_DIR    | /home/tmax/oframe_7_1/schema
    ===================================================================================
  • ds 서브젝트, DATASET_DEFAULT 섹션의 ALLOW_FIELD_DUP 키의 VALUE 항목 값으로 Copybook의 중복 필드를 허용해서 스키마 파일을 생성할 지 지정한다. 본 설정값은 TSAM 동작에도 함께 영향을 미친다. YES로 지정할 경우 스키마를 생성할 때 중복필드 체크를 생략하며, 중복되는 필드 뒤에는 '[필드명]_[숫자]' 형식으로 스키마 파일을 생성한다. NO로 지정하면 중복 필드를 발견할 때 에러를 발생한다.

    $ ofconfig list -s ds -sec DATASET_DEFAULT -k ALLOW_FIELD_DUP
    
    ===================================================================================
       SUBJECT   |      SECTION      |          KEY            |        VALUE
    ===================================================================================
         ds      |  DATASET_DEFAULT  |     ALLOW_FIELD_DUP     |         NO
    ===================================================================================
  • dstool 서브젝트, COBGENSCH 섹션의 ODO_MIN_ZERO_AVAILABLE 키의 VALUE 항목에 ODO 필드의 최솟값으로 0을 사용할지를 지정한다. YES로 지정할 경우 ODO필드의 최솟값은 0까지 가능하고, NO로 지정하면 ODO 필드의 최솟값은 1까지 가능하다. 기본값은 NO이다.

    $ ofconfig list -s dstool -sec COBGENSCH -k ODO_MIN_ZERO_AVAILABLE
    
    ===================================================================================
       SUBJECT   |      SECTION      |          KEY            |        VALUE
    ===================================================================================
       dstool    |     COBGENSCH     | ODO_MIN_ZERO_AVAILABLE  |        DEFVOL
    ===================================================================================
  • dstool 서브젝트, COBGENSCH 섹션의 COBCOPY 키의 VALUE 항목에 라이브러리 디렉터리를 찾을 경로를 지정한다.

    $ ofconfig list -s dstool -sec COBGENSCH -k COBCOPY
    
    ===================================================================================
       SUBJECT   |      SECTION      |          KEY            |        VALUE
    ===================================================================================
       dstool    |     COBGENSCH     |         COBCOPY         |    /home/openframe
    ===================================================================================
  1. 스키마 파일의 구조에 대한 자세한 내용은 OpenFrame "마이그레이션 안내서"를 참고한다.

  2. OpenFrame 환경설정에 대한 자세한 내용은 OpenFrame Base "환경설정 안내서"를 참고한다.

3. cpmmgr

cpmmgr은 주어진 CPM 데이터를 읽어들여 매핑 정보를 출력하거나 편집할 수 있으며, 간단한 문장이나 파일을 변환하는 테스트도 가능한 툴이다.

사용법

cpmmgr를 실행하는 방법은 다음과 같다. cpmmgr의 명령어는 툴을 실행한 후 command prompt를 통해서 입력받는다.

Usage: cpmmgr <file>
  • 입력 항목

    항목 설명

    <file>

    cpmmgr로 관리할 CPM 파일을 지정한다.

  • [options]

    명령어 설명

    cc (Change Code Mapping)

    현재 CPM 데이터에 매핑된 코드 중 하나를 사용자가 원하는 매핑 코드로 바꿀 수 있도록 지원하는 명령어이다.

    cf (Convert File)

    임의의 파일을 현재 CPM 데이터를 사용하여 변환한다.

    ct (Convert Text)

    사용자가 입력하는 임의의 스트링 혹은 16진수 값을 현재 CPM 데이터를 사용하여 변환한다.

    pd (Print Double-Byte Code Mapping)

    현재 CPM 데이터에 저장된 2Byte 코드 매핑 정보를 출력한다.

    ps (Print Single-Byte Code Mapping)

    현재 CPM 데이터에 저장된 1Byte 코드 매핑 정보를 출력한다.

    pr (Print Single/Double Byte Code Range)

    현재 CPM 데이터에 저장된 코드 매핑의 범위를 출력한다.

    pc (Print Code Not Exist in CPM)

    2Byte 코드 정보를 파일로 입력받아 현재 CPM 데이터에 저장되지 않은 2Byte 매핑 정보를 출력한다.

    pt (Print mapping Table into Text File)

    매핑 정보를 텍스트 파일로 출력한다.

    rr (Reset single/double byte Code Range)

    현재 CPM 데이터에 저장된 코드 매핑 정보를 초기화한다.

    cr (Change single/double byte Code Range)

    현재 CPM 데이터에 저장된 코드 매핑 정보를 변경한다.

사용예제

다음은 ASCEBCKR.cpm 파일을 관리하는 예제이다.

$ cpmmgr ASCEBCKR.cpm

>> help

 help
 cc     - change code mapping.
 cf     - convert file.
 ct     - convert text.
 pd     - print double byte code mapping.
 ps     - print single byte code mapping.
 pr     - print single/double byte code range.
 pc     - print code which is not inside in *.cpm file.
 pt     - print mapping table into text file.
 rr     - reset single/double byte code range.
 cr     - change single/double byte code range.
 quit

>>

4. dsmigin

dsmigin는 EBCDIC 코드 형태의 Mainframe 데이터셋을 ASCII 코드 형태의 OpenFrame 데이터셋으로 마이그레이션할 때 사용하는 툴이다. Mainframe 데이터셋을 UNIX 환경의 OpenFrame 데이터셋으로 마이그레이션할 때 일반적으로 다음과 같은 절차가 수행된다.

  1. FTP를 이용하여 Mainframe 데이터셋을 UNIX 파일로 다운로드한다. Binary Mode로 다운로드한다.

  2. 데이터셋을 마이그레이션할 때 스키마 파일이 필요한 경우 해당 데이터셋을 사용하는 COBOL이나 PL/I 소스 파일을 참조하여 스키마 파일을 작성한다.

  3. dsmigin 툴을 이용하여 UNIX에 다운로드된 파일을 OpenFrame 데이터셋으로 Import하는 작업을 수행한다.

관련 툴 프로그램으로는 dsmigout이 있다.

사용법

dsmigin 프로그램을 실행하는 방법은 다음과 같다.

Usage: dsmigin <src_file> <dest_file | dataset_name> [options]
  • 입력 항목

    항목 설명

    <src_file>

    마이그레이션을 수행할 UNIX 소스 파일명 또는 파일 경로를 지정한다.

    <dest_file | dataset_name>

    생성할 파일 또는 데이터셋 이름을 지정한다.

  • [options]

    옵션 설명

    [-C]

    EBCDIC 문자로 작성된 파일을 ASCII 문자로 변환만하고 OpenFrame으로 Import하지 않을 경우 지정한다. 출력 파일로 OpenFrame 데이터셋 이름이 아닌 일반 텍스트 파일을 지정해야 한다. 변환 작업만 하는 경우 Tmax 서버는 사용되지 않는다.

    [-I]

    [-C] 옵션과 반대로 변환 작업을 수행하지 않고 입력 파일을 직접 OpenFrame으로 적재하는 경우 지정한다.

    [-S]

    입력 파일로 주어진 데이터가 소스 파일일 경우 지정한다. 이 옵션이 지정되면, 레코드 포맷(RECFM)은 L 타입이 된다.

    [-m member_name]

    생성할 멤버 이름(PDS를 생성할 경우) 또는 생성할 상대 세대번호(GDG를 생성할 경우)를 지정한다.

    • SDS(Sequential Data Set)를 생성하는 경우에는 <dataset_name>만 지정한다.

    • PDS(Partitioned Data Set)를 생성하는 경우에는 <dataset_name>과 [member_name]을 모두 지정한다.

    • GDS(Generation Data Set)를 생성할 경우에는 <dataset_name>과 양수의 세대번호(+1, +2, …​)를 [member_name]으로 지정한다. -R(recatalog) 옵션을 사용하여 이미 존재하는 GDS를 재등록하는 경우에는 세대번호로 음수값 또는 0을 지정해야 한다.

    [-u unit]

    데이터셋이 생성될 UNIT 그룹명을 지정한다.

    [-v volume]

    데이터셋이 생성될 볼륨 시리얼을 지정한다.

    옵션을 지정하지 않은 경우에는 OpenFrame 환경설정에 ds 서브젝트, DATASET_DEFAULT 섹션의 DEFAULT_VOLSER 키의 VAULE 항목에 등록되어 있는 디폴트 볼륨 시리얼에 데이터셋이 생성된다. 단, -F 옵션을 지정하고 -v 옵션을 지정하지 않은 경우 해당 데이터셋이 이미 카탈로그 되어 있는 경우 카탈로그로부터 볼륨 시리얼을 얻는다.

    [-c user_catalog]

    데이터셋이 등록될 사용자 카탈로그를 지정한다.

    옵션을 지정하지 않은 경우 alias 설정 여부에 따라 qualified 엔트리 이름과 일치하는 사용자 카탈로그 또는 마스터 카탈로그에 데이터셋이 등록된다.

    [-e encoding_code]

    EBCDIC에서 ASCII로 코드를 변환할 때 EBCDIC 2Byte 문자를 어떤 ASCII 문자 코드로 변환할지를 지정한다.

    encoding_code 값에 따른 변환 처리는 다음과 같다.

    • US : 영어 (기본값)

    • KR : 한국어 (EUC-KR)

    • JP : 일본어 (Shift-JIS)

    • JAK : 일본어 (JEF - Fujitsu Mainframe)

    • KEIS : 일본어 (Hitachi Mainframe)

    OpenFrame에서 기본으로 제공하는 encoding_code 외에 사용자가 생성한 encoding_code를 사용할 경우에는 다음과 같이 지정한다.

    • EBCDIC에서 ASCII로 변환하는 파일과 ASCII에서 EBCDIC으로 변환하는 파일이 모두 필요하다.

    • EBCDIC에서 ASCII로 변환하는 파일명은 "EBCASC + <encoding명>.cpm"으로 지정한다.

    • ASCII에서 EBCDIC로 변환하는 파일명은 "ASCEBC + <encoding명>.cpm"으로 지정한다.

    • 기존의 encoding_code의 SO/SI에 해당 하는 값을 사용할 경우에는 다음과 같이 지정한다.

      SO/SI값을 사용할 encoding_code:사용자가 생성한 encoding_code

    [-s schema]

    UNIX 소스 파일의 한 레코드에 여러 char-set이 섞여 있는 경우(EBCDIC, ASCII 코드가 섞여 있거나 2Byte 문자, Packed Decimal, Zoned Decimal이 사용된 경우 등)에는 레코드 단위의 단순 코드 변환이 불가능하기 때문에 cobgensch 또는 pligensch 프로그램을 이용하여 스키마 파일을 생성한 후 해당 스키마 파일을 지정한다.

    스키마 파일을 지정하지 않은 경우 OpenFrame 환경설정에 ds 서브젝트, DATASET_DIRECTORY 섹션 SCHEMA_DIR 키 항목에 정의된 디렉터리에서 소스 파일명과 매치하는 스키마 파일을 사용한다.

    [-t]

    EBCDIC 전각문자를 ASCII 반각문자로 변환하기 위해서 변환될 코드 목록이 포함된 CUSTOM 파일을 지정한다. 옵션을 지정하지 않은 경우 EBCDIC 전각문자는 ASCII 전각문자로 변환된다.

    파일의 형식은 다음과 같다.

    ____,__ => [EBCDIC 전각 Hexa code],[ASCII 반각 Hexa code]
    EBC1,A1
    EBC2,A2
    EBC3,A3
    ...

    [-um usermap]

    사용자 정의 conversion map을 포함하는 파일 이름을 지정한다.

    [-cob cobol_type]

    사용된 COBOL 언어의 타입을 지정한다.

    COBOL 타입에 다음의 값을 설정한다.

    • MF(MicroFocus COBOL)

    • NET(Net COBOL)

    지정하지 않은 경우 다음의 절차에 따라 기본값이 설정된다.

    옵션을 지정하지 않은 경우 OpenFrame 환경설정에 ofsys 서브젝트, COMPILER 섹션의 COBOL_COMPILER 키의 VALUE 항목에 지정한 값을 사용한다. 자세한 내용은 관련 환경설정을 참고한다.

    OpenFrame 환경설정의 ofsys 서브젝트, COBOL_COMPILER 키가 존재하지 않을 경우 기본값으로 MF를 사용한다.

    [-map]

    BMS 맵을 변환할 때 SO와 SI에 둘러쌓인 2Byte 문자열이 길어서 SO가 있는 라인과 SI가 있는 라인이 서로 달라져 라인이 변경되는 경우도 고려하여 2Byte 문자열 부분을 인식할 수 있게 한다.

    [-S] 옵션과 함께 지정되지 않으면 무시된다.

    [-dpl]

    VSAM 데이터셋에 대해 DPL 사용 유무를 설정한다.

    [-o dsorg]

    생성할 데이터셋의 DSORG를 지정한다.

    다음의 값 중에 하나를 dsorg에 설정할 수 있고 이 옵션을 지정하지 않은 경우 PS가 지정된다.

    • PS

    • PSU

    • DA

    • DAU

    • IS (현재 미지원)

    [-k keylen]

    마이그레이션될 데이터셋이 ISAM 타입일 경우 키 길이를 지정한다. 또한, DSORG를 IS로 설정해야 한다. (현재 미지원)

    [-p keypos]

    마이그레이션될 데이터셋이 ISAM 타입일 경우 키 위치를 지정한다. 또한, DSORG를 IS로 설정해야 한다. (현재 미지원)

    [-l rec_len]

    데이터셋의 레코드 길이(LRECL)를 지정한다.

    고정 길이 레코드일 경우 마이그레이션되는 데이터셋의 실제 레코드 길이가 지정한 레코드 길이와 일치하는지 체크할 수 있다. 가변 길이 레코드일 경우에는 최대 레코드 길이를 지정한다.

    레코드 길이를 지정하지 않으면 스키마 파일에서 얻어온 레코드 길이를 기본값으로 사용한다.

    [-b blksize]

    데이터셋의 블록 사이즈(BLKSIZE)를 지정한다.

    [-f recfm]

    데이터셋의 레코드 포맷(RECFM)을 지정한다.

    다음의 레코드 포맷을 지정할 수 있다.

    • F(Fixed)

    • FB(Fixed Blocked)

    • V(Variable)

    • VB(Variable Blocked)

    • L(Line)

    [-d delimiter]

    UNIX 소스 파일에서 레코드 간의 구분을 위해 사용된 delimiter를 지정한다.

    개행 문자, 탭 등과 같은 문자를 delimiter로 사용할 경우에는 큰따옴표(" ") 안에 escape 문자를 사용하여 "\n", "\t"으로 표현한다.

    [-i]

    마이그레이션 중에 변환에 실패하는 레코드가 발견되어도 무시하고 끝까지 마이그레이션을 수행하게하려는 경우 지정한다. 변환 실패한 레코드에 대한 정보는 표준 출력 스트림(stdout)으로 출력된다. 프로그램을 종료할 때 변환 실패한 레코드의 수가 출력된다.

    [-w lockwait]

    Import 대상 데이터셋에 Lock이 실행 중인 경우 Lock이 해제될 때까지 대기하고 있다가 해제되면 작업을 수행한다. 옵션을 지정하지 않은 경우 적재대상 데이터셋에 이미 Lock이 실행 중이면 에러 메시지를 출력하고 작업 수행을 중단한다.

    [-n]

    OpenFrame으로 적재하지 않고 변환 작업만 실행할 경우 레코드 구분을 위하여 각 레코드마다 delimiter로 개행문자를 붙여준다.

    [-y]

    마이그레이션을 진행 중에 스키마의 조건문을 체크하면서 마이그레이션 대상을 선택한다. 옵션을 지정하지 않은 경우 레코드별로 최초 1회에 마이그레이션 대상을 선택한 후 마이그레이션을 진행한다. 이 옵션을 사용할 경우 cobgensch를 이용하여 스키마를 생성할 때 -D 옵션을 지정해야 한다.

    [-a]

    각 레코드의 첫 번째 컬럼에 ASA 콘트롤 캐릭터가 포함되어 있을 경우 이를 고려해서 7, 8번 타입의 SOSI를 처리할 경우 지정한다.

    [-sosi sosi_type]

    SOSI 문자는 레코드의 1Byte 문자 필드에 2Byte 문자가 혼합해서 사용되는 경우 2Byte 문자를 구분하기 위해 사용된다. SOSI 타입에 설정할 수 있는 값은 다음 과 같으며, 기본값은 SOSI를 변환하지 않고 그대로 유지하는 1이다.

    [SOSI 타입]

    • 1 = so[EBC]si → so[ASC]si
      SOSI를 변환하지 않는다. (기본값)

    • 2 = so[EBC]si →_[ASC]_
      SOSI를 스페이스로 변환한다.

    • 3 = so[EBC]si → [ASC]
      SOSI를 삭제하고, 삭제된 SOSI 영역만큼 변환 대상 필드의 오른쪽에 space를 padding한다.

    • 4 = so[JEF]si → so[ASC]si
      JEF SOSI를 ASCII SOSI로 변환한다.

    • 5 = BMS 맵을 conversion
      매핑되지 않는 문자를 '0x00' 대신 '0x2E’로 변환한다. BMS 맵을 마이그레이션하는 경우에 유용하다. 원본 BMS 맵을 INITIAL 구문의 값으로 SOSI 없이 2Byte 문자가 바로 나타나는 경우 이 옵션을 지정한다.

      [참고]

      BMS 맵을 마이그레이션하는 경우 dsmigin 처리를 한 다음에 사용하는 mscadjust 툴은 파일 중간에 '0x00’이 존재하면 비정상 동작하기 때문에 이 옵션을 지정하여 dsmigin 처리한 결과 파일에 대해서 mscadjust 툴이 정상 동작하도록할 수 있다.

    • 6 = No SOSI conversion
      SOSI 값의 유무에 상관없이 1Byte 문자로 간주하고 변환한다.

    • 7 = so[EBC]si → [ASC] __
      SOSI를 삭제하고 72 컬럼 바로 앞자리에 삭제된 SOSI 영역만큼 space로 padding 한다. COBOL Application과 같이 72 컬럼부터 comment 영역인 리소스의 마이그레이션에 이용된다.

    • 8 = so[EBC]si → __ [ASC]
      SOSI를 삭제하고 7 컬럼 바로 뒷자리에 삭제된 SOSI 영역만큼 space로 padding 한다. COBOL 애플리케이션과 같이 1~7 컬럼 부분이 comment 영역인 리소스의 마이그레이션에 이용된다.

    • 9 = so[EBC]si → ?[ASC]?
      SOSI 문자를 변환하는 경우 CPM에 등록된 SOSI 문자를 이용하여 변환한다.

    [-ef error_format]

    에러 출력 포맷을 지정한다. LINE/HEX 중 지정할 수 있으며, 기본값은 LINE이다.

    [-ep error_partial]

    에러 정보 출력 시 각 필드에 대해 첫 100건의 에러만 출력하고 그 이후는 무시한다.

    [-ed error_detection]

    EBCDIC에서 ASCII로 변환할 때 Low (0x00), High (0xFF), Space (0x40)으로만 채워진 (Un)Signed Packed / Zoned Decimal Type Field의 변환 오류를 검출한다.

    -z 옵션과 함께 사용할 수 없고, -i 옵션과 함께 사용할 경우 -i 옵션의 동작을 따른다.

    [-z zero]

    EBCDIC에서 ASCII로 변환할 때 Low (0x00), High (0xFF), Space (0x40)으로만 채워진 (Un)Signed Packed / Zoned Decimal Type Field 의 값을 Zero (0x30)으로 변환한다.

    -ed 옵션과 함께 사용할 수 없다.

    [-psmsb]

    EBCDIC에서 ASCII로 변환할 때 PACKED DECIMAL의 sign 부호를 마지막 자리의 4bit에서 최상위 비트(MSB)로 변환한다.

    • unsigned의 경우에는 마지막 자리 4bit의 F를 최상위 비트 0으로 변환한다.

    • signed의 경우에는 마지막 자리 4bit의 C를 최상위 비트 0으로 마지막 자리 4bit의 D를 최상위 비트 1로 변환한다.

    [-N]

    마이그레이션 과정에서 데이터셋을 카탈로그에 등록하지 않을 경우 지정한다. 즉, 지정한 데이터셋 이름이 이미 카탈로그에 등록되어 있는 경우라도 해당 카탈로그 항목에 대한 갱신을 수행하지 않는다.

    [-R]

    데이터셋이 이미 카탈로그에 등록된 경우에 recatalog를 위한 옵션으로 unit(-u)이나 volume(-v) 파라미터는 무시된다. 카탈로그에서 대상 데이터셋의 등록 정보를 찾아, 해당 볼륨으로 데이터셋을 Import한다. UNIT, 볼륨 정보는 그대로 유지하고, 그 외 기타 DCB 정보는 새롭게 갱신한다.

    옵션을 지정하지 않은 경우 Import 대상 데이터셋이 이미 카탈로그에 등록되어 있다면 에러 메시지를 출력하고 작업 수행을 중단한다.

    [-F]

    대상 데이터셋이 카탈로그에 이미 등록되어 있다면 해당 데이터셋과 카탈로그 항목을 삭제하고, 다시 데이터셋 Import 작업을 수행하여 카탈로그에 등록한다. 결과적으로 UNIT, 볼륨, 생성일자 등 데이터셋의 기존 등록 정보는 모두 새롭게 갱신된다. 단, [-N]을 지정하는 경우에는 카탈로그 항목에 대한 처리는 하지 않는다.

    옵션을 지정하지 않은 경우 적재대상 데이터셋이 이미 카탈로그에 이미 등록되어 있다면 에러 메시지를 출력하고 작업 수행을 중단한다.

    [-D]

    EBCDIC에서 ASCII로의 문자 코드 변환, PACKED DECIMAL이나 ZONED DECIMAL 필드의 값을 변환할 때부정한 데이터가 발견된 경우에 대한 구체적인 정보 및 마이그레이션 작업에 관련한 문제 분석에 유용한 디버깅 정보를 화면에 출력한다.

    1부터 3까지의 값을 지정할 수 있다.

    • 1 : 마이그레이션을 진행하며 몇몇 중요 정보들을 출력한다.

    • 2 : 1을 지정한 경우에 추가로 코드 변환할 때 발생하는 에러 정보를 출력한다.

    • 3 : 2를 지정한 경우에 추가로 레코드 변환 전후의 데이터를 출력한다.

    [-P]

    진행 상태를 화면에 출력한다.

    [-V]

    dsmigin의 버전 정보를 화면에 출력한다.

사용예제

다음은 PDS 멤버를 생성하는 예이다.

$ dsmigin OFR.DATA.PDSEXAM01.TXT OFR.DATA.PDSEXAM01 -m MEMBER1

다음은 SDS를 생성하는 예이다.

$ dsmigin OFR.DATA.SDSEXAM01.TXT OFR.DATA.SDSEXAM01

다음은 GDS를 생성하는 예이다.

$ dsmigin OFR.DATA.GDGEXAM01.TXT OFR.DATA.GDGEXAM01 -m +1

다음은 스키마 파일의 간단한 샘플을 보여주는 예이다.

<DSI.TESTDATA1.conv>

############################
# conversion schema sample #
############################

* Schema Version 7.1
L1, 01, A-REC, NULL, NULL, 0, 1:1,
L2, 03, FIELD1, EBC_ASC, NULL, 80, 1:1,
L3, 03, FIELD2, U_PACKED, NULL, 3, 1:1,

* Condition
L0, "\0", ( L1 L2 L3 )
############################

다음은 UNIX 파일을 데이터셋으로 적재하는 예이다.

$ dsmigin DSI.TESTDATA1.txt DSI.TESTDATA1 -s DSI.TESTDATA1.conv -l
80 -v 100000 -e KR

위의 dsmigin를 실행한 결과는 다음과 같다.

=====< DSMIGIN START >=====
source file : DSI.TESTDATA1.txt
dataset name: DSI.TESTDATA1
member name :
unit:
volume: 100000
schema file  : DSI.TESTDATA1.conv
encoding type: KR
record length: 80
record format: F
dsorg:
delimiter:

DSMIGIN: (record count = 100, conversion error count = 0)
=====< DSMIGIN FINISH >====

다음은 dsmigin를 실행한 후 데이터셋 등록 정보를 확인하는 예이다.

$ tjesmgr psds DSI.TESTDATA1

위의 tjesmgr를 실행한 결과는 다음과 같다.

  Data Set Name . . . : DSI.TESTDATA1
  Data Set Type . . . : NONVSAM
  Catalog Name  . . . : SYS1.MASTER.ICFCAT

  Management Class  . : MCLAS001
    Creation Date . . : 2019/01/29      Data Set Owner  . : OpenFrame
    Expiration Date . : 9999/12/31

  Storage Class . . . :
    Volume Serial . . : 100000          Device Type . . . : 3380

  Data Class  . . . . :
    Organization  . . : PS              Record Format . . : F
    KEYLEN  . . . . . : 0               Record Length . . : 80
    KEYPOS  . . . . . : 0               Block Size  . . . : 80

  Current Allocation
    Primary Space . . : N.A.            Number of Extents : N.A.
    Secondaty Space . : N.A.            Data Set Size . . : 16700

  Last Access Date
    Last Access Date  : 2019/01/29      Last Access Time  : 12:08:47
관련 환경설정

OpenFrame 환경설정에 다음의 설정을 한다.

  • ds 서브젝트, DATASET_DEFAULT 섹션의 DEFAULT_VOLSER 키의 VALUE 항목 값에 디폴트 볼륨 시리얼을 지정한다. 이 값은 [-v volume] 옵션을 지정하지 않을 경우 사용한다.

    $ ofconfig list -s ds -sec DATASET_DEFAULT -k DEFAULT_VOLSER
    
    ===================================================================================
       SUBJECT   |      SECTION      |          KEY            |        VALUE
    ===================================================================================
         ds      |  DATASET_DEFAULT  |     DEFAULT_VOLSER      |        DEFVOL
    ===================================================================================
  • ds 서브젝트, DATASET_DIRECTORY 섹션의 SCHEMA_DIR 키의 VALUE 항목 값에 디폴트 스키마 디렉터리를 지정한다. [-s schema] 옵션으로 스키마 파일의 상대 경로를 지정한 경우 디폴트 스키마 디렉터리에서 해당 파일을 찾는다. 절대 경로를 지정한 경우에는 디폴트 스키마 디렉터리를 사용하지 않고, 지정한 경로에 있는 스키마 파일을 사용한다.

    $ ofconfig list -s ds -sec DATASET_DIRECTORY -k SCHEMA_DIR
    
    ===================================================================================
       SUBJECT   |      SECTION      |       KEY         |        VALUE
    ===================================================================================
         ds      | DATASET_DIRECTORY |      SCHEMA_DIR   |/home/tmax/oframe_7_1/schema
    ===================================================================================
  • ofsys 서브젝트, COMPILER 섹션의 COBOL_COMPILER 키의 VALUE 항목 값에 디폴트 COBOL 타입을 지정한다. 이 값은 [-cob cobol_type] 옵션을 지정하지 않을 경우에 사용하며, COBOL_COMPILER 항목의 값이 NETCOBOL일 경우 NET을 그 외의 경우에는 MF를 사용한다.

    $ ofconfig list -s ofsys -sec COMPILER -k COBOL_COMPILER
    
    ===================================================================================
       SUBJECT   |      SECTION     |          KEY           |         VALUE
    ===================================================================================
        ofsys    |     COMPILER     |     COBOL_COMPILER     |         OFCOBOL
    ===================================================================================
  • dstool 서브젝트, DSMIGIN 섹션의 IGNORE_MAPPING_ERROR 키의 VALUE 항목 값에 변환 맵에 지정되지 않은 코드 변환이 이루어질 경우 에러를 발생할지를 지정한다. 이 값은 [-i] 옵션을 지정하지 않을 경우에 사용한다.

    $ ofconfig list -s dstool -sec DSMIGIN -k IGNORE_MAPPING_ERROR
    
    ===================================================================================
       SUBJECT   |      SECTION      |            KEY           |        VALUE
    ===================================================================================
       dstool    |      DSMIGIN      |   IGNORE_MAPPING_ERROR   |        YES
    ===================================================================================

OpenFrame 환경설정에 대한 자세한 내용은 OpenFrame Base "환경설정 안내서"를 참고한다.

5. dsmigout

dsmigout은 ASCII 코드 형태의 OpenFrarme 데이터셋을 EBCDIC 코드 형태의 Mainframe 데이터셋으로 변환하여 UNIX 파일로 내보내는(Export) 툴이다. 가변 길이 데이터셋을 이출할 때 레코드 길이를 나타내기 위하여 각 레코드마다 RDW(Record Descriptor Word)를 붙여준다. 또한, L 타입의 데이터셋을 이출할 때는 개행 문자를 delimiter로 사용하여 각 레코드를 구분한다.

관련 툴 프로그램으로는dsmigin이 있다.

사용법

dsmigout 프로그램을 실행하는 방법은 다음과 같다.

Usage: dsmigout <dataset_name> <dest_file> [options]
  • 입력 항목

    항목 설명

    <dataset_name>

    내보낼 데이터셋의 이름을 기술한다. 데이터셋은 카탈로그에 등록되어 있어야 한다.

    <dest_file>

    Output으로 생성될 파일 이름을 기술한다.

  • [options]

    옵션 설명

    [-X]

    OpenFrame에 ASCII 문자로 적재된 파일을 EBCDIC 문자로 변환하지 않고 내보내는 경우 지정한다.

    [-S]

    입력 파일로 주어진 데이터가 OpenFrame으로 적재된 소스 파일인 경우에 사용한다. 이 옵션이 지정되면, 적재할 때 지정된 L 타입을 F 타입의 레코드 포맷(RECFM) 형태로 변환하고 내보낸다. 이때 레코드의 길이는 적재할 때 등록된 레코드 길이 정보를 따르게 된다.

    [-U]

    입력 파일이 OpenFrame으로 적재된 소스 파일이 아니고 일반 UNIX 소스 파일인 경우 사용한다. 이 옵션이 지정되면 -S 옵션과 마찬가지로 L 타입의 레코드 포맷(RECFM)을 F 타입으로 변환하게 되고, 레코드의 길이는 80으로 정해진다.

    [-m member]

    입력 파일이 PDS 멤버인 경우 지정한다.

    [-v]

    추출하려는 데이터셋이 위치한 볼륨 시리얼 번호를 지정한다. 지정한 볼륨에 데이터셋이 존재하지 않을 경우 에러 메시지를 출력하고 프로그램을 종료한다.

    [-c user_catalog]

    갱신하려고 하는 데이터셋이 사용자 카탈로그에 등록되어있는 경우에 설정한다. 단, 사용자 카탈로그에 Alias가 설정되어 있어서 데이터셋 이름만으로 찾을 수 있는 경우에는 이 옵션을 지정하지 않아도 된다.

    [-e encoding_code]

    ASCII에서 EBCDIC으로 코드를 변환할 때 2Byte ASCII 문자를 어떤 EBCDIC 문자 코드로 변환할지를 지정한다.

    encoding_code 값에 따른 변환 처리는 다음과 같다.

    • US : 영어 (기본값)

    • KR : 한국어 (EUC-KR)

    • JP : 일본어 (Shift-JIS)

    • JAK : 일본어 (JEF - Fujitsu Mainframe)

    • KEIS : 일본어 (Hitachi Mainframe)

    [-s schema]

    OpenFrame 데이터셋의 한 레코드에 여러 char-set이 섞여 있는 경우에는 (EBCDIC, ASCII 코드가 섞여 있거나 2Byte 문자, Packed Decimal, Zoned Decimal이 사용된 경우 등) 레코드 단위의 단순 코드 변환이 불가능하기 때문에 cobgensch 또는 pligensch 프로그램을 이용하여 스키마 파일을 생성한다. 스키마 파일이 생성되면 해당 파일을 지정한다.

    [-um usermap_file]

    사용자가 직접 명시한 cpm 파일을 이용하여 변환하는 경우 사용한다.

    [-cob cobol_type]

    사용된 COBOL 언어의 타입을 지정한다.

    cobol_type에 다음의 값을 설정한다.

    • MF(MicroFocus COBOL)

    • NET(Net COBOL)

    지정하지 않은 경우 다음의 절차에 따라 기본값이 설정된다.

    옵션을 지정하지 않은 경우 OpenFrame 환경설정에 ofsys 서브젝트, COMPILER 섹션의 COBOL_COMPILER 키의 VALUE 항목에 지정한 값을 사용한다. 자세한 내용은 관련 환경설정을 참고한다.

    OpenFrame 환경설정의 ofsys 서브젝트, COBOL_COMPILER 키가 존재하지 않을 경우 기본값으로 MF를 사용한다.

    [-sosi sosi_type]

    dsmigin 툴에서 EBCDIC 문자열을 ASCII 문자열로 변환하는 경우 EBCDIC 코드의 특성상 SOSI 문자에 의해서 1Byte 문자 필드에 2Byte 문자 필드를 구분해야 한다.

    dsmigout이 수행하는 ASCII 문자열에서 EBCDIC 문자열로의 변환은 SOSI가 없어도 ASCII 코드값에 따라서 1Byte 문자인지 2Byte 문자인지를 알 수 있으므로 이 옵션을 지정하지 않는 경우는 SOSI에 대한 별도의 처리는 하지 않고 cpm code 표만을 이용해서 역변환 하는 것이 기본 동작이다.

    [SOSI 타입]

    • 1 = so[ASC]si → so[EBC]si
      SOSI를 이용해서 ASCII 문자를 EBCDIC 문자로 역변환한다. SOSI 값 자체는 그대로 유지한다. dsmigin 툴에서 SOSI는 변환하지 않고 문자열 부분만 변환했다면 이 옵션을 사용하여 동일하게 SOSI는 그대로 둔채 문자열 부분만 역변환할 수 있다.

    • 2 = _[ASC]_ → so[EBC]si
      SOSI를 이용하지 않고 ASCII 코드값에 따라서 ASCII 문자를 EBCDIC 문자로 역변환한다. 역변환되는 문자열 앞뒤의 스페이스 문자는 SOSI로 복원한다. dsmigin 툴에서 SOSI를 스페이스로 변환했다면 이 옵션을 사용하여 다시 스페이스에서 SOSI로 복원할 수 있다.

    • 3 = [ASC]__ → so[EBC]si
      SOSI를 이용하지 않고 ASCII 코드값에 따라서 ASCII 문자를 EBCDIC 문자로 역변환한다. 역변환되는 문자열 앞뒤에 SOSI를 복원한다. dsmigin 툴에서 SOSI를 삭제하고 변환 결과 필드 길이가 변하지 않도록 하기 위해 뒤의 남는 공간은 스페이스로 채우는 방법으로 변환했다면 이 옵션을 사용하여 다시 SOSI를 복원할 수 있다.

    • 4 = ?[ASC]? → so[EBC]si
      SOSI 문자를 변환하는 경우 CPM에 등록된 SOSI 문자를 이용하여 변환한다.

    [-sp]

    -sosi 2를 지정한 것과 동일하다. dsmigout -h로 출력되는 사용법에서는 더 이상 이 옵션을 보여주지 않는다.

    [-i]

    마이그레이션 중에 변환에 실패하는 레코드가 발견되어도 무시하고 끝까지 마이그레이션을 수행하게 하려는 경우 지정한다. 변환 실패한 레코드에 대한 정보는 표준 출력 스트림(stdout)으로 출력된다. 프로그램이 종료할 때 변환 실패한 레코드의 수가 출력된다.

    [-ef error_format]

    에러 출력 포맷을 지정한다. LINE/HEX 중 지정할 수 있으며, 기본값은 LINE이다.

    [-ep error_partial]

    에러 정보 출력 시 각 필드에 대해 첫 100건의 에러만 출력하고 그 이후는 무시한다.

    [-znpsign zoned_positivesign]

    Zoned decimal에 대해 positive sign(A/C/E/F)를 지정한다.

    [-psmsb]

    ASCII에서 EBCDIC로 변환할 때 PACKED DECIMAL의 sign 부호를 최상위 비트(MSB)에서 마지막 자리의 4bit로 변환한다.

    • unsigned의 경우에는 최상위 비트 0을 마지막 자리 4bit의 F로 변환한다.

    • signed의 경우에는 최상위 비트 0을 마지막 자리 4bit의 C로, 최상위 비트 1을 마지막 자리 4bit의 D로 변환한다.

    [-y]

    마이그레이션을 진행 중에 스키마의 조건문을 체크하면서 마이그레이션 대상을 선택한다. 옵션을 지정하지 않은 경우 레코드별로 최초 1회에 마이그레이션 대상을 선택한 후 마이그레이션을 진행한다. 이 옵션을 사용할 경우 cobgensch를 이용하여 스키마를 생성할 때 -D 옵션을 지정하여야 한다.

    [-ftpb]

    VB 데이터셋을 변환하는 경우 레코드에 RDW를 대신하여 3bytes의 FTP type B 헤더를 부여하여 변환한다.

    [-D]

    ASCII에서 EBCDIC으로의 코드 변환, PACKED DECIMAL이나 ZONED DECIMAL 필드의 값을 변환할 때 부정한 데이터가 발견된 경우에 대한 구체적인 정보 및 마이그레이션 작업에 관련한 문제 분석에 유용한 디버깅 정보를 화면에 출력한다.

    1부터 3까지의 값을 지정할 수 있다.

    • 1 : 마이그레이션을 진행하며 몇몇 중요 정보들을 출력한다.

    • 2 : 1을 지정한 경우에 추가로 코드 변환할 때 발생하는 에러 정보를 출력한다.

    • 3 : 2를 지정한 경우에 추가로 레코드 변환 후의 데이터를 출력한다.

    [-V]

    dsmigout의 버전 정보를 화면에 출력한다.

사용예제

다음은 스키마 파일의 간단한 예이다.

<DSI.TESTDATA1.conv>

############################
# conversion schema sample #
############################

* Schema Version 7.1
L1, 01, A-REC, NULL, NULL, 0, 1:1,
L2, 03, FIELD1, EBC_ASC, NULL, 80, 1:1,
L3, 03, FIELD2, U_PACKED, NULL, 3, 1:1,

* Condition
L0, "\0", ( L1 L2 L3 )
############################

다음은 dsmigout 결과를 보여주는 예이다.

$ dsmigout DSI.TESTDATA1 DSI.TESTDATA1.out -e KR -s DSI.TESTDATA1.conv

위의 dsmigout을 실행한 결과는 다음과 같다.

DSMIGOUT: (record count = 100, conversion error count = 0)

DSI.TESTDATA1의 레코드들이 EBC_ASC 변환 방식에 의해서 바뀌어 DSI.TESTDATA1.out으로 출력된다.

관련 환경설정

OpenFrame 환경설정에 다음의 설정을 한다.

  • ds 서브젝트, DATASET_DIRECTORY 섹션의 SCHEMA_DIR 키의 VALUE 항목 값에 디폴트 스키마 디렉터리를 지정한다.

    $ ofconfig list -s ds -sec DATASET_DIRECTORY -k SCHEMA_DIR
    
    ===================================================================================
       SUBJECT   |      SECTION      |        KEY        |        VALUE
    ===================================================================================
         ds      | DATASET_DIRECTORY |     SCHEMA_DIR    |/home/tmax/oframe_7_1/schema
    ===================================================================================
  • dstool 서브젝트, DSMIGIN 섹션의 IGNORE_MAPPING_ERROR 키의 VALUE 항목 값에 변환 맵에 지정되지 않은 코드 변환이 이루어질 경우 에러를 발생할지를 지정한다. 이 값은 [-i] 옵션을 지정하지 않을 경우에 사용한다.

    $ ofconfig list -s dstool -sec DSMIGIN -k IGNORE_MAPPING_ERROR
    
    ===================================================================================
       SUBJECT   |      SECTION      |          KEY             |        VALUE
    ===================================================================================
       dstool    |      DSMIGIN      |   IGNORE_MAPPING_ERROR   |        YES
    ===================================================================================

OpenFrame 환경설정에 대한 자세한 내용은 OpenFrame Base "환경설정 안내서"를 참고한다.

6. pligensch

pligensch는 Mainframe 데이터셋을 OpenFrame 데이터셋으로 마이그레이션하는 과정에서 필요한 데이터셋 마이그레이션 스키마 파일을 생성하는 툴이다.

pligensch는 cobgensch 프로그램과 동일한 스키마 파일을 생성하지만, cobgensch는 COBOL Copybook을 사용하는 반면 pligensch는 PL/I 소스 파일을 참조하여 Mainframe 데이터셋의 레코드 구조를 파악한 후 스키마 파일을 생성한다. 생성된 스키마 파일을 저장할 디렉터리 경로는 OpenFrame 환경설정에 ds 서브젝트, DATASET_DIRECTORY 섹션의 SCHEMA_DIR 키의 VALUE 항목 값에 지정한다.

다음은 PL/I 스키마 파일 생성과 OpenFrame 데이터셋 생성과정을 설명한 그림이다.

figure 3 1
PL/I 스키마 파일 생성과 OpenFrame 데이터셋 생성 과정

pligensch에 PL/I 소스를 입력하면 레코드 구조를 담은 스키마 파일이 생성된다. dsmigin를 수행할 때 스키마 파일과 Mainframe 데이터셋을 입력 파라미터로 지정하여 OpenFrame 데이터셋을 생성할 수 있다.

사용법

pligensch를 실행하는 방법은 다음과 같다.

Usage: pligensch [options] file...
  • [options]

    옵션 설명

    [-h]

    pligensch에서 사용 가능한 옵션에 대한 정보를 보여준다.

    [-y]

    parser에서 생성된 디버그 메시지를 보여준다.

    [-l]

    scanner에서 생성된 디버그 메시지를 보여준다.

    [-d]

    scanner와 parser를 포함한 모든 생성된 디버그 메시지를 보여준다.

    [-I dir]

    PL/I의 include 파일들이 존재하는 위치를 지정한다.

    [-r reclen]

    스키마 파일을 사용할 데이터셋이 고정길이 레코드이고 레코드 길이를 알고 있는 경우에 레코드 길이를 지정하면, 스키마 파일을 생성할 때 레코드 길이 정합성을 체크한다.

    [-o output]

    생성될 스키마 파일의 이름을 지정한다.

    지정하지 않는 경우 file#에 지정한 입력 파일명을 기본값으로 사용한다.

    output 파일명을 지정했을 경우 볼륨 시리얼 지정 여부에 따라 "<volser>_<output>.conv" 또는 "<output>.conv" 이름으로 스키마 파일이 생성된다.

    [-v volser]

    생성될 스키마 파일명에 사용될 볼륨 시리얼을 지정한다.

    지정하지 않는 경우 생성될 스키마 파일명은 볼륨 시리얼을 포함하지 않는다.

    옵션을 지정하면 "<volser>_<output>.conv" 이름으로 스키마 파일이 생성된다.

    [-s]

    입력 파일이 sub-structure만을 포함하는 파일일 때 지정한다.

    [-f aix]

    입력으로 받을 PL/I 소스가 AIX PL/I일 때 지정한다. 지정하지 않으면 기본적으로 AIX PL/I로 인식한다.

    [-f liant]

    입력으로 받는 PL/I 소스가 Liant Open PL/I일 때 지정한다.

    [-V]

    cobgensch의 버전 정보를 화면에 출력한다.

  • 입력 항목

    항목 설명

    file

    PL/I 소스 파일명을 지정한다.

사용예제

다음은 PL/I Include 파일의 간단한 예이다.

<PLI.TESTDATA1.inc>

    3   TEST1                    CHAR(02)   ,
    3   TEST2                    CHAR(05)   ,
    3   TEST3                               ,
    5   TEST4                    PIC ‘(03)9’ ,
    5   TEST5                    PIC ‘(03)X’ ,
    3   TEST6                    FIXED DEC (3, 0);

다음은 pligensch를 실행하여 COBOL 스키마 파일을 생성하는 예이다. 위 PL/I include 파일은 DECLARE 구문부터 시작하지 않고, sub-structure 만을 포함하고 있으므로 -s 옵션을 지정하여 실행한다.

$ pligensch –s PLI.TESTDATA1.inc

위의 pligensch를 실행한 결과 정상적으로 COBOL 스키마 파일이 생성되었다.

input filename = PLI.TESTDATA1.inc
Schema filename = /home/tmax/openframe/schema/PLI.TESTDATA1.conv - created

다음은 pligensch를 실행하여 PL/I 스키마 파일을 생성하고, 정합성을 체크하는 예이다.

$ pligensch -r 10 –s PLI.TESTDATA1.inc

위의 pligensch를 실행한 결과, 레코드 길이 정합성 체크에서 에러가 발생했다.

input filename = PLI.TESTDATA1.inc
input record length = 10
** input record length is different from schema record length!!!
** (input reclen = 10, schema reclen = 15)

Failed to generate a schema file. rc=-1

다음은 올바른 레코드 길이를 지정하여 pligensch를 실행하는 예이다.

$ pligensch -r 15 –s PLI.TESTDATA1.inc

위의 pligensch를 실행한 결과 정상적으로 스키마 파일이 생성되었다. 레코드 길이가 15Byte로 지정한 값과 일치하므로 정합성을 체크할 때 오류가 발생하지 않았다.

input filename = PLI.TESTDATA1.inc
input record length = 15
Schema filename = /home/tmax/openframe/schema/PLI.TESTDATA1.conv - created

다음은 pligensch를 실행한 후 생성된 스키마 파일의 예이다.

<PLI.TESTDATA1.conv>

* scheme
L1, 01, TEST1_STRUCTURE, NULL, 0, 1,
L2, 03, TEST1, EBC_ASC, 2, 1,
L3, 03, TEST2, EBC_ASC, 5, 1,
L4, 03, TEST3, NULL, 0, 1,
L5, 05, TEST4, ZONED, 3, 1,
L6, 05, TEST5, EBC_ASC, 3, 1,
L7, 03, TEST6, PACKED, 2, 1,

* condition
L0, "\0", ( L1 L2 L3 L4 L5 L6 L7 )
관련 환경설정

OpenFrame 환경설정에 ds 서브젝트, DATASET_DIRECTORY 섹션의 SCHEMA_DIR 키의 VALUE 항목 값에 생성된 스키마 파일을 저장할 디렉터리 경로를 지정한다.

  1. 스키마 파일의 구조에 대한 자세한 내용은 OpenFrame "마이그레이션 안내서"를 참고한다.

  2. OpenFrame 환경설정에 대한 자세한 내용은 OpenFrame Base "환경설정 안내서"를 참고한다.

다음은 환경설정의 예이다.

$ ofconfig list -s ds -sec DATASET_DIRECTORY -k SCHEMA_DIR

====================================================================================
   SUBJECT   |       SECTION       |       KEY         |          VALUE
====================================================================================
     ds      |  DATASET_DIRECTORY  |     SCHEMA_DIR    |/home/tmax/oframe_7_1/schema
====================================================================================

7. sqlgensch

sqlgensch는 Mainframe에서 이용한 데이터베이스의 DDL(Data Definition Language) 파일을 이용하여 데이터베이스 마이그레이션에 필요한 스키마, Copybook, Tibero용 DDL, Tibero Import용 컨트롤 파일을 생성하는 툴로, Mainframe에서 이용하는 데이터베이스를 OpenFrame의 데이터베이스로 마이그레이션하는 과정에서 필요하다.

사용법

sqlgensch를 실행하는 방법은 다음과 같다.

Usage: sqlgensch <src_file> ... [options]
  • 입력 항목

    옵션 설명

    src_file

    Mainframe에서 이용한 데이터베이스의 DDL 파일명을 지정한다.

  • [options]

    옵션 설명

    [-c]

    COBOL Copybook을 생성한다.

    [-s]

    스키마 파일을 생성한다.

    -s 옵션을 통해 생성되는 스키마 파일은 pligensch를 통해 생성되는 스키마 파일과 동일하다. 해당 스키마 파일은 최신 버전 스키마 파일과 차이가 있으므로 최신 버전의 스키마 파일 생성을 위해서는 cobgensch 툴을 사용해야 한다.

    [-t]

    Tibero로 Import하기 위한 컨트롤 파일을 생성한다.

    [-q]

    데이터베이스의 테이블 생성을 위한 DDL 문을 생성한다.

    [-y symfoware]

    SYMFOWARE SQL용으로 동작한다. (기본값)

    [-b db2]

    DB2 SQL용으로 동작한다.

    [-d debug]

    디버그 모드로 동작한다.

    [-V]

    sqlgensch의 버전 정보를 화면에 출력한다.

사용예제

다음은 sqlgensch를 실행하여 COBOL Copybook을 생성하는 예이다.

$ sqlgensch –c dbddl.txt

다음은 sqlgensch를 실행하여 스키마를 생성하는 예이다.

$ sqlgensch -s dbddl.txt

다음은 sqlgensch를 실행하여 Tibero Import용 컨트롤 파일을 생성하는 예이다.

$ sqlgensch -t dbddl.txt

다음은 sqlgensch를 실행하여 Tibero용 DDL 문을 생성하는 예이다.

$ sqlgensch -q dbddl.txt

스키마 파일의 구조에 대한 자세한 내용은 OpenFrame "마이그레이션 안내서"를 참고한다.