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 툴이 추가되었다.
-
OpenFrame 환경설정에 대한 자세한 내용은 OpenFrame HiDB "환경설정 안내서"를 참고한다.
-
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 안내서"의 "로그 관리"를 참고한다.
-