OpenFrame HiDB 7.2

본 장에서는 OpenFrame HiDB 7.2의 새로운 기능에 대해 간략히 설명한다. 상세한 설명은 관련 안내서를 참고한다.

1. 변경 기능

본 절에서는 제품의 변경사항에 대하여 설명한다.

1.1. EBCDIC 정렬 순서 관련 내부 구조 변경

  • HiDB 7.1에서는 UTL_OF 패키지를 이용해 EBCDIC 정렬 순서를 지원하였다.

  • HiDB 7.2에서는 NVARCHAR2 타입 컬럼을 이용해 EBCDIC 정렬 순서를 지원한다.

  • 다음은 HiDB 7.1과 HiDB 7.2 내부에서 수행되는 CREATE TABLE문의 예이다.

    • HiDB 7.1

      CREATE TABLE DMAN0201_SEGMENT1(
       OCC_ID NUMBER(18),
       "K1"   VARCHAR(2 CHAR),
       "K2"   VARCHAR(2 CHAR),
       PD_BIT NUMBER(1),
       LD_BIT NUMBER(1),
       "HIDB_K12" AS
       (UTL_OF.ASC2EBC(RAWTOHEX("K1"), 2, 1) ||
        UTL_OF.ASC2EBC(RAWTOHEX("K2"), 2, 1)),
       CONSTRAINT DMAN0201_SEGMENT1_PK
           PRIMARY KEY(OCC_ID),
       CONSTRAINT DMAN0201_SEGMENT1_UK
           UNIQUE("K1", "K2", OCC_ID))
       TABLESPACE "DEFVOL"
    • HiDB 7.2

      CREATE TABLE DMAN0201_SEGMENT1(
       OCC_ID NUMBER(18),
       "K1"   NVARCHAR2(2),
       "K2"   NVARCHAR2(2),
       PD_BIT NUMBER(1),
       LD_BIT NUMBER(1),
       CONSTRAINT DMAN0201_SEGMENT1_PK
           PRIMARY KEY(OCC_ID),
       CONSTRAINT DMAN0201_SEGMENT1_UK
           UNIQUE("K1", "K2", OCC_ID))
       TABLESPACE "DEFVOL"

1.2. dbdcpybkgen 툴 기능 개선

  • DBD 내 필드들의 영역 중 일부가 서로 겹치는 경우 겹치는 부분과 겹치지 않는 부분을 별도의 필드로 갖는 Copybook이 생성된다.

    예를 들어 다음과 같은 물리 DBD가 있는 경우

    <DMAN0201>

     DBD NAME=DMAN0201,ACCESS=HDAM
     DATASET DD1=DMAN0201
     SEGM NAME=SEGMENT1,BYTES=(7,6)
     FIELD NAME=(SEG1FLD1,SEQ,U),START=3,BYTES=4
      FIELD NAME=SEG1FLD2,START=6,BYTES=1
     DBDGEN
     FINISH
     END

    dbdcpybkgen 툴 수행 시 다음과 같은 Copybook이 생성된다.

    <DMAN0201/SEGMENT1.cpy>

          *generated by DBDCPYBKGEN
            01 SEGMENT1.
             03 DATALEN PIC 9(4) COMP.
             03 SEG1FLD1 PIC X(3).
             03 SEG1FLD2 PIC X(1).
             03 HIDBFLD-2 PIC X(1).
  • 인덱스 DBD가 index source segment의 시스템 관련 필드(주: 필드명이 /SX나 /CK로 시작하는 필드)를 참조하는 경우 해당 부분을 별도의 필드로 갖는 Copybook이 생성된다.

    예를 들어 다음과 같은 물리 DBD, 인덱스 DBD와 Copybook이 있는 경우

    <DMAN0201>

     DBD NAME=DMAN0201,ACCESS=HDAM
     DATASET DD1=DMAN0201
     SEGM NAME=SEGMENT1,BYTES=4
     FIELD NAME=(K12,SEQ,U),START=1,BYTES=4
     SEGM NAME=SEGMENT2,PARENT=SEGMENT1,BYTES=4
     FIELD NAME=(K34,SEQ,U),START=1,BYTES=4
     SEGM NAME=SEGMENT3,PARENT=SEGMENT2,BYTES=4
     FIELD NAME=(K56,SEQ,U),START=1,BYTES=4
     FIELD NAME=/CK1,START=1,BYTES=2
     FIELD NAME=/CK12,START=1,BYTES=4
     FIELD NAME=/CK123,START=1,BYTES=6
     FIELD NAME=/CK1234,START=1,BYTES=8
     FIELD NAME=/CK12345,START=1,BYTES=10
     LCHILD NAME=(XSGMENT1,XMAN0201),PTR=INDX
     XDFLD NAME=SEG3XFL1,SEGMENT=SEGMENT3,SRCH=/CK12345,SUBSEQ=/CK1
     DBDGEN
     FINISH
     END

    <XMAN0201>

     DBD NAME=XMAN0201,ACCESS=INDEX
     DATASET DD1=XMAN0201
     SEGM NAME=XSGMENT1,BYTES=10
     FIELD NAME=(SEG3XFL1,SEQ,U),START=1,BYTES=10
     LCHILD NAME=(SEGMENT3,DMAN0201),INDEX=SEG3XFL1
     DBDGEN
     FINISH
     END

    <DMAN0201/SEGMENT1.cpy>

            01 SEGMENT1.
             03 K12.
              05 K1 PIC XX.
              05 K2 PIC XX.

    <DMAN0201/SEGMENT2.cpy>

            01 SEGMENT2.
             03 K34.
              05 K3 PIC XX.
              05 K4 PIC XX.

    <DMAN0201/SEGMENT3.cpy>

            01 SEGMENT3.
             03 K56.
              05 K5 PIC XX.
              05 K6 PIC XX.

    인덱스 DBD에 대해 dbdcpybkgen 툴 수행 시 다음과 같은 Copybook이 생성된다.

    <XMAN0201/XSGMENT1.cpy>

          *generated by DBDCPYBKGEN
            01 XSGMENT1.
             03 CK12345 PIC X(10).
             03 CK1 PIC X(2).
  • 주의사항

    • HiDB 7.2에서는 DBD 내 모든 필드들에 대해, 해당 필드와 동일한 위치에서 시작하는 Copybook 내 필드가 존재하지 않거나, 해당 필드와 동일한 위치에서 끝나는 Copybook 내 필드가 존재하지 않으면 에러를 출력한다. 즉, Copybook의 필드 구성이 DBD의 필드 구성과 어긋나지 않아야 에러 없이 정상 동작한다.

    • 마이그레이션에 사용된 Copybook의 필드 구성이 DBD의 필드 구성과 어긋나는 경우 DBD의 필드 범위에 맞게끔 Copybook의 필드들을 사용자가 직접 분할하거나 dbdcpybkgen 툴을 이용해 Copybook을 자동 생성해야 한다.

    • 가변 길이 세그먼트가 정의된 DBD의 경우 dbdcpybkgen 툴에 의해 자동 생성된 Copybook을 사용해야 한다.

    • 2차 인덱스 세그먼트가 정의된 DBD의 경우 dbdcpybkgen 툴에 의해 자동 생성된 Copybook을 사용해야 한다. 단, 그 전에 다음과 같이 물리 DBD의 메타 정보와 스키마를 생성해 둬야 한다.

      dbdgen {물리 DBD의 파일명}
      hdgensch all {물리 DBD의 DBD명}

1.3. 선인출(prefetch) 관련 내부 구조 변경

  • HiDB 7.1에서는 LEAD 함수를 이용해 부모 세그먼트 인스턴스를 선인출하였다.

  • HiDB 7.2에서는 scrollable cursor를 이용해 부모 세그먼트 인스턴스를 선인출한다.

  • 다음은 HiDB 7.1과 HiDB 7.2 내부에서 수행되는 SELECT 문의 예이다.

    • HiDB 7.1

      SELECT
       /*+ INDEX_ASC(DMAN0201_SEGMENT3
                     DMAN0201_SEGMENT3_PIDX)
           FIRST_ROWS(10) */
       OCC_ID,
       "SEG3FLD1",
       PARENT_ID,
       PARENT_KEY,
       0 AS PRIOR_ID,
       0 AS NEXT_ID,
       0 AS LPARENT_ID,
       LEAD(PARENT_ID, 1)
        OVER(ORDER BY
             HIDB_PARENT_KEY,
             HIDB_SEG3FLD1)
        AS NEXT_PARENT_ID,
       LEAD(PARENT_KEY, 1)
        OVER(ORDER BY
             HIDB_PARENT_KEY,
             HIDB_SEG3FLD1)
        AS NEXT_PARENT_KEY
      FROM DMAN0201_SEGMENT3
      WHERE ...
    • HiDB 7.2

      SELECT
       /*+ INDEX_ASC(DMAN0201_SEGMENT3
                     DMAN0201_SEGMENT3_PIDX)
           FIRST_ROWS(10) */
       OCC_ID,
       "SEG3FLD1",
       "PK0_SEG1FLD1",
       PARENT_ID,
       0 AS PRIOR_ID,
       0 AS NEXT_ID,
       0 AS LPARENT_ID
      FROM DMAN0201_SEGMENT3
      WHERE
       ("PK0_SEG1FLD1") >=
       ((CHR(48) || CHR(48) || CHR(48)))
      AND
       (("SEG3FLD1") >=
       ((CHR(0) || CHR(0) || CHR(0))))
      ORDER BY "PK0_SEG1FLD1", "SEG3FLD1" ASC
  • 참고사항

    • DBD의 SEGM문에 GNALLPARENT 파라미터를 지정해 선인출 여부를 제어할 수 있다. GNALLPARENT 파라미터에 대한 자세한 내용은 OpenFrame HiDB "HiDB 안내서"의 GNALLPARENT 관련 설명을 참고한다.

1.4. 필드 비교 관련 내부 구조 변경

  • HiDB 7.1에서는 DBD의 필드가 참조하는 컬럼들을 연결 연산자(||)를 이용해 비교하였다.

  • HiDB 7.2에서는 DBD의 필드가 참조하는 컬럼들을 tuple comparison을 이용해 비교한다.

  • 다음은 HiDB 7.1과 HiDB 7.2 내부에서 수행되는 SELECT문의 예이다.

    • HiDB 7.1

       SELECT /*+ INDEX_ASC(DMAN0201_SEGMENT1
                            DMAN0201_SEGMENT1_UNIQ)
                  FIRST_ROWS(10) */
              OCC_ID,
              "K1",
              "K2",
              0 AS PRIOR_ID,
              0 AS NEXT_ID,
              0 AS LPARENT_ID
       FROM DMAN0201_SEGMENT1
       WHERE ("HIDB_K12" = TO_CHAR(CHR(49) ||
                                   CHR(49)) ||
                           TO_CHAR(CHR(65) ||
                                   CHR(65)))
             AND (OCC_ID > 0)
       ORDER BY OCC_ID ASC
    • HiDB 7.2

       SELECT /*+ INDEX_ASC(DMAN0201_SEGMENT1
                            DMAN0201_SEGMENT1_PK)
                  FIRST_ROWS(10) */
              OCC_ID,
              "K1",
              "K2",
              0 AS PRIOR_ID,
              0 AS NEXT_ID,
              0 AS LPARENT_ID
       FROM DMAN0201_SEGMENT1
       WHERE (("K1", "K2") = ((CHR(49) || CHR(49)),
                              (CHR(65) || CHR(65))))
             AND (OCC_ID > 0)
       ORDER BY OCC_ID ASC

1.5. External procedure 지정 방법 변경

  • HiDB 7.1에서는 REMARKS 파라미터를 이용해 세그먼트에 external procedure를 지정하였다.

  • HiDB 7.2에서는 EXTPROC 파라미터를 이용해 세그먼트에 external procedure를 지정한다. EXTPROC 파라미터에 대한 자세한 내용은 OpenFrame HiDB "HiDB 안내서"의 EXTPROC 관련 설명을 참고한다.

1.6. DLI 관련 라이브러리 자동 빌드

  • HiDB 7.2에서는 hidbmgr 툴에서 DLI 함수 생성 시 .pc 파일을 자동으로 precompile & compile하여 동적 라이브러리 파일을 생성한다.

  • 다음은 HiDB 7.1과 HiDB 7.2에서 동적 라이브러리 파일을 생성하는 예이다.

    • HiDB 7.1

      $ hidbmgr dbd dligen DMAN0201
      $ cd $OPENFRAME_HOME/hidb/hidb_sch
      $ ./compile.sh
    • HiDB 7.2

      $ hidbmgr dbd dligen DMAN0201

hidbmgr에 대한 자세한 내용은 OpenFrame HiDB "툴 참조 안내서"를 참고한다.

1.7. OpenFrame 환경설정 정보 테이블로 관리

  • 파일로 관리되던 OpenFrame 환경설정 정보를 데이터베이스에서 관리하는 구조로 변경하였다.

  • 데이터베이스에 적재될 환경설정 메타 파일 포맷을 변경하였고, 파일을 제품별로 분리하였다.

  • 환경설정 정보 동기화 및 멀티노드 환경에 대응하기 위해 Tmax TCache에 로드하여 사용하도록 변경하였다.

  • 환경설정 정보 구조 변경에 따라 이를 관리하기 위해 ofconfig 툴이 추가되었다.

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

    2. ofconfig 툴 사용법에 대한 자세한 내용은 OpenFrame Base "툴 참조 안내서"를 참고한다.

1.8. 에러 코드 테이블로 관리

  • 파일로 관리되던 OpenFrame 에러 정보를 데이터베이스에서 관리하는 구조로 변경하였다.

  • 에러 정보를 DB에 적재하기 위해 oferror 툴에 insert 기능을 추가하였다.

    oferror 툴에 대한 자세한 내용은 OpenFrame Base "툴 참조 안내서"를 참고한다.

1.9. 시스템 및 서버 로그 출력 형식 정리

  • OpenFrame 제품, 모듈 간 로그 형식을 통일하였다.

  • 로그에 날짜-시간 출력 형식을 보강하였다.

    • 서비스 로그 형식

      [YYYY-MM-DDTHH:MM:SS.ffffff] [SERVICE-NAME(PID)] [M] [MSGCODE] MESSAGE-CONTENTS
    • 시스템 로그 형식

      [YYYY-MM-DDTHH:MM:SS.ffffff] [EXECUTED-MODULE] [CODE] [MSGCODE] EVENT FREE-FORMAT-CONTENTS
    • 조작 로그 형식

      [YYYY-MM-DDTHH:MM:SS.ffffff] [EXECUTED-MODULE] [CODE] [MSGCODE] EVENT FREE-FORMAT-CONTENTS

      OpenFrame 로그에 대한 자세한 내용은 OpenFrame Base "Base 안내서"의 "로그 관리"를 참고한다.