리소스 마이그레이션
본 장에서는 PSAM 포맷 정의, AIM 시스템 정의, XSP 혹은 MSP JCL과 같은 리소스를 마이그레이션하는방법에 대해 기술한다.
1. EBCDIC에서 ASCII로 변환
OpenFrame 마이그레이션 절차는 리소스 종류에 따라 다양하지만 Mainframe에서 EBCDIC 문자체계로 작성된 리소스를 OpenFrame에서 사용할 수 있는 ASCII 문자체계를 따르는 리소스로 변환하는 작업은 모든 리소스의 마이그레이션 절차에서 공통적으로 필요하다. 문자 코드 변환은 Mainframe의 기본 문자 집합과 개방형 환경의 문자 집합이 다르기 때문에 발생하는 작업으로 리호스팅을 위한 마이그레이션 과정에서는 필수 작업이다.
본 절에서는 Mainframe 시스템에서 사용자가 작성한 JCL, ADL, COBOL과 같은 텍스트로 작성된 소스 코드 성격의 리소스들을 EBCDIC에서 ASCII로 문자체계를 변환하는 방법을 설명한다.
EBCDIC에서 ASCII로 변환하는 절차는 모든 리소스 변환 과정에 필요한 공통 절차이지만, 리소스 유형별로 변환 작업할 때에 지정하는 옵션이나 변환 후 리소스를 적재(import)하는 작업까지 동일한 것은 아니다. |
변환 방법
텍스트 데이터를 내용으로 하는 Non-VSAM 데이터셋의 레코드는 하나의 EBCDIC 문자열 필드로 구성된 것으로 볼 수 있으므로 별도의 변환 스키마(변환 작업에 필요한 레코드 구조 정보)를 필요로 하지 않는다. 즉, 각 레코드에 대해서 EBCDIC 데이터를 ASCII 데이터로 변환하기만 하면 된다. OpenFrame의 dsmigin 툴을 이용하여 이러한 변환을 할 수 있다.
EBCDIC(JEF) 문자체계를 사용하는 Mainframe에서 고정 길이 80byte 구조로 작성된 EBCFILE라는 이름의 파일을 ASCII 텍스트 파일인 ASCFILE로 변환하는 경우로, 변환 후 불필요해지는 SOSI 문자를 공백문자(white space)로 대체하며 고정 길이로 구분되는 원본 EBCFILE의 각 레코드를 변환 후에는 각 라인이 줄바꿈 문자(newline)로 구분되는 ASCII 텍스트 파일로 변환하려는 경우 위와 같은 옵션을 지정하여 처리한다.
JCL, ADL, COBOL 등 텍스트로 구성된 소스 파일을 마이그레이션할 때 주로 사용하는 dsmigin 툴의 사용법은 다음과 같다.
$ dsmigin EBCFILE ASCFILE -e JAK -l 80 -sosi 2 -C -S -n
다음은 dsmigin 옵션에 대한 설명이다.
옵션 | 설명 |
---|---|
–e, --encoding |
변환할 하려는 EBCDIC 원본 데이터 파일의 언어를 지정한다. (US, KR, JP, JAK 지원) |
–l, --lrecl |
변환하려는 EBCDIC 원본 데이터 파일이 고정 길이 레코드 포맷일 때 한 레코드의 크기를 지정한다. |
–sosi, --sosi-type |
변환하려는 EBCDIC 원본 데이터 파일에 존재하는 SOSI 문자에 대한 처리 옵션을 지정한다. 변환 결과인 ASCII 문자체계에서 SOSI 문자는 필수적이지 않지만 변환 후 레코드 길이 변경등을 피하기 위해서 공백으로 치환하거나 제거하는 등의 세부적인 옵션을 지정할 수 있다. |
–C, --convert-only |
리소스의 변환 작업만을 수행하도록 하는 옵션이다. 이 옵션을 지정하지 않으면 변환 작업의 결과 파일은 OpenFrame 데이터셋으로서 생성되지만 이 옵션을 지정하면 변환 작업의 결과물은 단순히 OS 파일로 생성된다. 따라서, --convert-only 옵션은 최종적인 리소스 마이그레이션 전에 테스트 목적의 변환에 사용하거나 변환 결과 파일에 대해서 추가적인 마이그레이션 툴을 실행할 필요가 있을 때 중간 결과물을 얻기 위해서 이용할 수 있다. 변환하려는 원본 데이터 파일을 ASCII 데이터 파일로 변환만하고 OpenFrame 데이터셋으로 만들지 않는다. |
–S, --source |
EBCDIC 문자체계를 갖는 시스템에서 텍스트로 작성된 여러 가지 리소스들을 ASCII 문자체계를 따르는 텍스트로 변환할 수 있다. 변환하려는 EBCDIC 데이터 파일이 단순한 구조의 텍스트 파일(소스 코드 등)인 경우 사용한다. 원본 데이터 파일의 레코드 구조가 1개의 텍스트 필드로만 구성된 것으로 가정하여 EBCDIC → ASCII 변환만 수행되며 필드의 타입에 따른 바이너리 데이터에 대한 고려는 일어나지 않는다. |
–n, --newline |
변환 결과 레코드의 구분자로 줄바꿈 문자(Newline)를 사용한다. |
dsmigin 툴에서 지원하는 다양한 옵션에 대한 자세한 내용은 OpenFrame Base "툴 참조 안내서"를 참고한다. |
변환 예
다음은 COBOL Copybook 파일을 변환하는 예이다.
$ dsmigin SAMPCPY SAMPCPY.cpy -e JAK -l 80 -S -C -sosi 7
130856 M MIG0001M =====< DSMIGIN START >=====
source file : SAMPCPY
dataset name: SAMPCPY.cpy
member name :
unit:
volume:
schema file :
encoding type: JAK
record length: 80
record format: L
dsorg:
delimiter:
DSMIGIN: (record count = 16, conversion error count = 0)
130856 M MIG0002M =====< DSMIGIN FINISH >====
변환 전 파일의 내용은 다음과 같다. EBCDIC(JEF) 코드로 작성되어 있어서 올바로 출력되지 않고 있다.
<SAMPCPY>
\@@@@@@@テヨラ錙簔ヤラモナ@@@@@@モナ蠻モ~@@@@トチ翡~KK@@@@@@@@@@@@ \`````````````````````````````````````````````````````````@@@@@@@@ @@@@@@(サ睥セ・ォ・ハ)@@@@@@@@@ラノテ@蹼]K@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@(サ睥セエチサ・@@@@@@@@@ラノテ@ユM]K@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@(タクヌッキ鏆・K@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@(ヌッケ・@@@@@@@@@ラノテ@蹼]K@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@(ヌッ)@@@@@@@@@@@ラノテ@]K@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@(キ・@@@@@@@@@@@ラノテ@]K@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@(ニ・@@@@@@@@@@@ラノテ@]K@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@(タュハフ)@@@@@@@@@@@@@ラノテ@蹼]K@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@(スサス・ウ。シ・ノ)K@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@(ケサイシ・ウ。シ・ノ)@@@ラノテ@]K@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@(マ「ネヨ)@@@@@@@@@ラノテ@]K@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@(ヘケハリネヨケ・K@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@(ヒワネヨ)@@@@@@@@@ラノテ@]K@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@(ザネヨ)@@@@@@@@@ラノテ@]K@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
변환 후 파일의 내용은 다음과 같다. ASCII(Shift-JIS) 코드로 변환이 되어서 올바로 출력된다.
<SAMPCPY.cpy>
000100* COPY SAMPLE00 LEVEL=1 DATE=2012.11.12 00010000 000200*--------------------------------------------------------- 00020000 000300 03 氏名カナ PIC X(40). 00030000 000400 03 氏名漢字 PIC N(50). 00040000 000500 03 生年月日. 00050000 000600 05 年号 PIC X(01). 00060000 000700 05 年 PIC 9(02). 00070000 000800 05 月 PIC 9(02). 00080000 000900 05 日 PIC 9(02). 00090000 001000 03 性別 PIC X(01). 00100000 001100 03 住所コード. 00110000 001200 05 校下コード PIC 9(04). 00120000 001300 05 連番 PIC 9(02). 00130000 001400 03 郵便番号. 00140000 001500 05 本番 PIC 9(03). 00150000 001600 05 枝番 PIC 9(04). 00160000
2. PSAM 포맷 정의 마이그레이션
AIM 응용 프로그램은 PSAM을 이용해서 터미널에 데이터를 입출력할 수 있다. PSAM 포맷 정의는 화면상에 표현되는 정보의 위치와 속성을 정의하는 마크업(mark up)으로 볼 수 있다. PSAM을 사용하는 AIM 응용 프로그램을 OpenFrame AIM 환경으로 마이그레이션할 때에는 응용 프로그램 자체 소스 프로그램 이외에도 PSAM 포맷 정의 정보가 함께 마이그레이션 되어야 한다.
변환 방법
Mainframe에서 사용하던 EBCDIC으로 작성된 PSAM 포맷 정의 파일을 입수하여 dsmigin을 이용하여 ASCII 파일로 변환한다. PSAM 포맷 정의는 EBCDIC 텍스트 파일이므로 dsmigin 툴의 --source 옵션을 사용하여 변환한다.
변환 예
다음은 ASCII로 변환된 PSAM 포맷 정의 예이다.
<PSAMLOGO.fmt>
PSAMLOGO FID TYPE=DSP TEST0000 RECORD TYPE=IN @I000001 DATA NAME=AID01 USAGE=AID @I000002 DATA NAME=LOGON USAGE=CTRL1 PIC=(X,30) TEST0001 RECORD @O000001 DATA NAME=SYMD-01 USAGE=CTRL1 PIC=(X,60) DEVICE DVK=DP10 FRAME PART SIZE=(24,80) FIELD POS=(17,38) ATTR=OUL VALUE='COPYRIGHT 2000-2006 TMAX SORT CO.,LTD.' FIELD POS=(20,24) ATTR=OUL VALUE='LOGON COMMAND :' FIELD POS=(20,44) ATTR=(IUL CUR) DATAIN=@I000002 FIELD POS=(2,2) ATTR=(OUL RED) VALUE=@O000001 END
다음은 jybfg000를 이용해 PSAM 포맷 정의를 컴파일하는 예이다. -p (preview) 옵션을 지정하여 처리하는 PSAM 포맷의 내용을 확인할 수 있다.
$ jybfg000 -p PSAMLOGO.fmt
* preview : ---------------------------------------------------------------(begin)-
MAP : [PSAMLOGO]
123456789+123456789+123456789+123456789+123456789+123456789+123456789+123456789+
------------------------------------------------------------------------------>S
01|
02|@____________________________________________________________
03|
04|
05|
06|
07|
08|
09|
10|
11|
12|
13|
14|
15|
16|
17| @COPYRIGHT 2000-2006 TMAX SORT CO.,LTD.
18|
19|
20| @LOGON COMMAND : @______________________________@
21|
22|
23|
24|
------------------------------------------------------------------------------<E
* ---------------------------------------------------------------------------(end)-
* copybook :
[/home/o5aim/cobcpy/mapcpy/TEST0000.cbl] create.
[/home/o5aim/cobcpy/mapcpy/TEST0001.cbl] create.
* binary image :
[/home/o5aim/psambin/PSAMLOGO.BIN] create.
|
3. AIM 정의 리소스 (ADL) 마이그레이션
OpenFrame AIM 시스템은 기존의 Fujitsu Mainframe AIM 시스템에서 제공하던 다양한 기능을 제공한다.
Fujitsu Mainframe의 AIM 시스템과 마찬가지로 OpenFrame AIM 시스템도 AIM 기술 언어인 ADL(AIM Description Language)을 이용하여 해당 시스템에서 사용할 여러 가지 리소스와 환경을 정의한다. AIM 시스템을 정의하기 위해서 ADL로 기술된 리소스를 AIM 정의 리소스라고 한다.
AIM에서는 ADL을 이용하여 업무 시스템을 구성하는 여러 가지 구성요소와 자원등의 동작 환경을 정의한다. 정의하는 대상의 종류에 따라서 ADL은 다음과 같은 구문들로 이루어진다.
-
AIM 시스템 환경 정의 : SIS, APG, SG 구문
-
AIM 온라인 환경 정의 : DCMS, WORKSTATION, DTPF, LD, PROCEDURE 구문
-
AIM 응용 프로그램 환경 정의 : PED, MQN 구문
-
AIM 데이터셋 정의 : SCHEMA (DS), SCHEMA (VSAM) 구문
-
AIM NDB 데이터베이스 정의 : SCHEMA (DB), XIFSCHEMA, SUBSCHEMA 구문
AIM 정의 리소스 중 AIM NDB 데이터베이스 정의를 제외한 리소스들은 jxdddms 툴로 OpenFrame AIM 환경으로 적재한다. jxdddms는 지정된 ADL에 대해서 구문 분석을 수행하고 OpenFrame AIM 내부 구조로 변환하여 OpenFrame AIM 시스템 테이블에 저장한다.
AIM 정의 리소스 중 AIM NDB 데이터베이스 정의 리소스의 경우에는 ndbadlgen 툴로 OpenFrame NDB 환경으로 적재한다. ndbadlgen은 지정된 ADL에 대해서 구문 분석을 수행하고 OpenFrame NDB 내부 구조로 변환하여 OpenFrame NDB 시스템 테이블에 저장한다.
변환 방법
Mainframe에서 사용하던 EBCDIC으로 작성된 ADL 리소스 파일들을 입수하여 dsmigin 툴을 이용하여 ASCII 파일로 변환한다. ADL 리소스는 EBCDIC 텍스트 파일이므로 dsmigin 툴의 --source 옵션을 사용하여 변환한다. ASCII 변환된 ADL 리소스 파일을 대상으로 jxdddms 툴을 실행하여 OpenFrame AIM 환경으로 적재한다.
변환 예
아래 예제의 SMPLPED.adl은 Mainframe에서 EBCDIC으로 작성된 ADL 리소스는 dsmigin의 --source 옵션을 이용하여 ASCII로 변환한 예제이다.
<SMPLPED.adl>
PED NAME IS SMPLPED ; ACP NAME IS JXGIJSM. AP NAME IS JXGIJSM ; TRANSACTION-POINT IS PROGRAM ; I-O ERROR SCHEDULE IS REJECT. AP NAME IS JXGIAPM0 OCCURS 1 TIMES ; TRANSACTION-POINT IS SYSTEM ; I-O ERROR SCHEDULE IS REJECT. MQN NAME IS SMPLMQN FOR DDSMPL. END.
다음은 jxdddms를 이용하여 위에 보인 SMPLPED.adl을 AIM 디렉터리에 적재하는 예제이다.
$ jxdddms store -p SMPLPED.adl
>> [PED :SMPLPED] store done
각 ADL 리소스 정의 중에는 OpenFrame AIM 시스템에서 지원하지 않거나 사용하지 않는 구문이나 속성이 포함되어 있을 수 있다.
|
4. JCL 마이그레이션
JCL 마이그레이션은 기존의 Mainframe의 환경에서 작업(Job)을 실행하기 위해 사용하던 JCL을 OpenFrame 환경에서 사용할 수 있도록 Mainframe에서 EBCDIC 코드 기반으로 작성된 JCL 파일을 다운받아서 OpenFrame에서 사용하는 ASCII 코드 기반으로 변환하는 것을 의미한다.
변환 방법
JCL 파일은 다른 리소스의 마이그레이션과 마찬가지로 dsmigin 툴의 --source 옵션을 활용하여 ASCII 파일로 변환할 수 있다. ASCII로 변환한 JCL 파일은 pdsgen 툴로 생성한 PDS 데이터셋인 JCLLIB에 적재해야 한다.
유틸리티 연동
OpenFrame은 Mainframe의 JCL과 동일한 문법을 사용하므로 EBCDIC → ASCII 변환 외의 별도 추가적인 마이그레이션 작업은 일반적으로 필요하지 않다. 오히려 JCL 마이그레이션에 있어서 주의할 사항은 JCL 자체의 변환 보다는 JCL에서 호출하여 사용하는 유틸리티 중에서 OpenFrame에서 제공하지 않는 유틸리티나 3rd Party 유틸리티가 있는지 여부를 마이그레이션 작업의 초기에 확인하여 도출하는 것이 중요하다.
표준 유틸리티로서 OpenFrame에서 대응하는 유티리티를 제공하지 않는 경우는 OpenFrame이 동작하는 개방형 환경에서는 필요가 없는 유틸리티일 수 있다. 그렇지 않은 경우 TmaxSoft에 해당 유틸리티의 구현 및 제공을 요청하도록 한다.
일부 3rd Party 유틸리티 경우 개방형 환경인 UNIX 시스템용의 제품이 존재하더라도 Mainframe과 UNIX 시스템의 차이로 인해 JCL에 기술되어 있는 SYSIN이나 파라미터의 전달 방식에 차이가 존재하여 일부 JCL을 수정할 필요가 발생할 수 있다.
JCL에서 호출하는 프로그램의 가장 많은 경우는 COBOL 등으로 작성한 애플리케이션이다. 이 프로그램들은 애플리케이션 마이그레이션 절차에 따라 응용 프로그램을 컴파일하여 사용하면 된다.
다음은 OpenFrame Batch for XSP 및 MSP와 OpenFrame AIM에서 제공 중인 유틸리티 프로그램 목록이다.
-
데이터셋 관리 유틸리티
유틸리티 설명 CTFE
카탈로그 편집을 수행한다. (XSP)
FCHK
직접 액세스 볼륨에 존재하는 모든 파일의 속성을 인쇄한다. (XSP)
FCPY
직접 액세스 볼륨 또는 자기 테이프 볼륨의 파일을 복사한다. (XSP)
FDLT
직접 액세스 볼륨에 존재하는 파일을 삭제한다. (XSP)
FDMP
직접 액세스 볼륨 또는 자기 테이프 볼륨에 존재하는 파일의 내용을 편집하 고 인쇄하는 파일을 덤프한다. (XSP)
GDGM
시스템/마스터 카탈로그에 등록된 GDG의 GDS를 관리하기 위한 유틸리티이다. (XSP)
ISFG
일반 Non-VSAM 파일을 가지고 직접 액세스 볼륨에 존재하는 인덱스 파일을 생성한다. (XSP)
JSDGENER
순차 데이터셋 또는 PDS의 멤버를 복사하고자 할 때 사용한다. (MSP)
JSGPROGM
Non-VSAM 데이터셋 관리를 위해 사용한다. (MSP)
KBKARCS
BACKUP과 RESTORE 명령을 통해 주로 천재지변에 의한 시스템 손상의 대비나 중요한 데이터의 보호 등의 목적을 위한 데이터셋이나 볼륨의 백업 및 복원 기능을 지원한다. (XSP, MSP)
KQCAMS
VSAM과 Non-VSAM 데이터셋 및 카탈로그 정보를 관리하기 위한 유틸리티 프로그램이다. (XSP, MSP)
-
데이터셋 처리 유틸리티
유틸리티 설명 ADAPT
간단한 스크립트를 사용하여 데이터셋의 내용을 변경하거나 조작할 수 있는 유틸리티이다. (XSP, MSP)
DFSORT
데이터셋을 정렬하거나 병합하여 출력 데이터셋에 결과를 저장한다. (XSP, MSP)
ICETOOL
SORT 유틸리티 프로그램을 이용하여 1개의 JOB STEP에서 복수의 데이터셋을 다양한 방법으로 출력하기 위해 사용한다. (MSP)
EZTPA00
보고서 작성용 유틸리티이다. (XSP, MSP)
-
OpenFrame AIM 유틸리티
유틸리티 설명 JXGIJSM
OpenFrame AIM에서 ACP 기능을 제공하는 유틸리티이다. (XSP, MSP)
JYQDDUTY
데이터베이스의 작성, 삭제 등의 데이터셋의 내용을 데이터베이스로 LOAD, UNLOAD하는 기능을 수행한다. (XSP)
OSAMFRUN
JCL에서 COBOL 프로그램 모듈이 실행될때 내부적으로 수행되는 유틸리티이다. 배치와 온라인 모두 동일하게 동작한다. (XSP, MSP)
-
OpenFrame NDB 유틸리티
유틸리티 설명 JXKUNLOD
데이터베이스를 읽어 데이터셋 파일 형태로 추출한다. (XSP, MSP)
JXKRELOD
JXKUNLOD 유틸리티에서 생성된 결과파일을 NDB로 적재한다. (XSP, MSP)
JXKSORT
AIM DB 유지 유틸리티에서 생성한 중간 결과물을 정렬한다. (XSP, MSP)
-
기타 유틸리티
유틸리티 설명 DSDIFF
2개 데이터셋의 레코드별 차이점을 보여준다. (XSP, MSP)
KEQEFT01
CLIST나 TSO 명령어를 실행한다. (XSP, MSP)
KDJBR14
JCL에 기술된 내용들이 정상적으로 실행되고 있는지 확인하기 위해 사용한다. (XSP, MSP)
LIBE
직접 엑세스 볼륨의 데이터셋을 복사하는 유틸리티 프로그램이다. (XSP)