데이터베이스 마이그레이션

본 장에서는 데이터베이스를 마이그레이션하는 방법에 대해 기술한다.

1. AIM 데이터베이스(NDB) 마이그레이션

Mainframe 환경에서 운용하던 AIM DB(Network Database, 이하 NDB)의 기능은 OpenFrame 환경에서 OpenFrame NDB에 의해 제공된다. 따라서 Mainframe에서 축적된 AIM NDB 데이터베이스를 OpenFrame NDB 데이터베이스로 마이그레이션해야 한다.

다음은 AIM 데이터베이스(NDB)의 마이그레이션 작업 순서를 나타낸 것이다.

figure 4 1
AIM 데이터베이스 마이그레이션 절차

마이그레이션 작업은 다음과 같은 과정으로 이루어진다.

  1. NDB 데이터베이스 스키마 마이그레이션

    Mainframe에서 받은 원본 ADL 파일 중에서 SCHEMA 문, XIFSCHEMA 문, SUBSCHEMA 문을 포함하는 ADL 파일에 대한 EBCDIC → ASCII 변환 및 OpenFrame NDB 환경에 등록하고, OpenFrame NDB에 데이터베이스를 생성하는 작업이다.

  2. NDB 데이터베이스 언로드 파일 변환용 스키마 생성

    ndbgensch 툴 프로그램을 사용해서 NDB 스키마 정보를 활용하여 데이터베이스 언로드 파일을 OpenFrame에서 OpenFrame NDB에 적재할 수 있는 언로드 파일로 변환하는데 필요한 변환 스키마(conversion schema)를 생성한다.

  3. NDB 데이터베이스 언로드 파일의 변환

    dsmigin 툴 프로그램을 사용해서 Mainframe에서 언로드받은 데이터베이스 언로드 파일을 OpenFrame에서 OpenFrame NDB에 적재할 수 있는 언로드 파일로 변환한다.

  4. NDB 데이터베이스 생성

    ndbmgr 툴 프로그램을 사용해서 데이터베이스에 테이블 생성 및 I/O를 위한 라이브러리를 생성한다.

  5. NDB 데이터베이스 적재

    ndbimport 툴 프로그램을 사용해서 데이터셋을 OpenFrame NDB에 생성된 데이터베이스에 적재한다.

OpenFrame NDB 마이그레이션 툴에 대한 자세한 내용은 OpenFrame NDB "툴 참조 안내서"를 참고한다.

1.1. NDB 데이터베이스 스키마 마이그레이션

AIM 데이터베이스(NDB)를 마이그레이션 하는 첫 번째 작업은 NDB 데이터베이스의 물리적인 구조 및 인덱스를 정의한 AIM ADL 스키마 정보를 마이그레이션 하는 것이다. Mainframe에서 언로드받은 ADL 스키마 파일은 EBCDIC이므로 dsmigin 툴 프로그램을 이용하여 ASCII로 변환하고 이어서 ndbadlgen 툴 프로그램을 이용하여 OpenFrame NDB 시스템에 등록해야 한다.

dsmigin과 ndbadlgen를 이용하여 ADL로 기술된 AIM 정의 리소스를 마이그레이션하는 방법은 리소스 마이그레이션AIM 정의 리소스 (ADL) 마이그레이션을 참고한다.

1.2. NDB 데이터베이스 언로드 파일 변환용 스키마 생성

Mainframe의 AIM 데이터베이스(NDB)를 언로드한 데이터베이스 언로드 파일의 내용은 데이터베이스 레코드의 필드 구성과 각 필드의 데이터 타입에 따라 EBCDIC 문자나 Mainframe의 데이터 타입으로 정보가 저장되어 있다. 따라서 데이터베이스 언로드 파일을 OpenFrame 환경의 OpenFrame NDB에 적재하기 전에 미리 각 필드에 저장된 데이터를 ASCII 및 개방형 환경에서 사용할 수 있는 데이터 타입으로 변환한다.

NDB 데이터베이스 스키마 마이그레이션 과정을 통해서 OpenFrame NDB 환경에 등록된 NDB 스키마 정보를 참조하여 언로드 파일에 저장된 데이터베이스 레코드의 각 필드의 데이터 타입 정보를 알 수 있다. 즉 , NDB 스키마 정보를 활용하여 데이터베이스 언로드 파일을 OpenFrame에서 OpenFrame NDB에 적재할 수 있는 언로드 파일로 변환하는데 필요한 변환 스키마(conversion schema)를 생성할 수 있다. 이 작업에는 ndbgensch 툴 프로그램을 사용한다.

다음은 ndbgensch를 사용하여 NDB 언로드 파일의 변환에 필요한 변환 스키마를 생성하는 예이다.

$ ndbgensch -o DB01C DB01
Scheme filename = /home/o5aim/schema/DB01C.conv - created

위의 예제는 DB01이라는 이름의 NDB 데이터베이스 스키마를 참조하여 해당 데이터베이스 언로드 파일을 변환하는데 필요한 변환용 스키마 DB01C.conv를 $OPENFRAME_HOME/schema 디렉터리에 생성한다.

ndbgensch 명령어에 대한 자세한 내용은 OpenFrame NDB "툴 참조 안내서"를 참고한다.

1.3. NDB 데이터베이스 언로드 파일의 변환

OpenFrame AIM 환경으로 마이그레이션할 NDB 데이터베이스 스키마가 마이그레이션이 되어 있고, 해당 데이터베이스 언로드 파일을 변환하기 위해 필요한 변환용 스키마가 생성되어 있으면 dsmigin 툴 프로그램을 사용하여 Mainframe에서 언로드받은 데이터베이스 언로드 파일을 OpenFrame에서 OpenFrame NDB에 적재할 수 있는 언로드 파일로 변환한다.

다음은 dsmigin를 사용하여 NDB 언로드 파일을 변환하는 예이다.

$ dsmigin DB01.db2 DB01.DB2 -s DB01C.conv -e JAK -v DBVOL1 -f V -l 3216
215046 M MIG0001M =====< DSMIGIN START >=====
source file : DB01.db2
dataset name : DB01.DB2
member name :
unit:
volume : DBVOL1
schema file  : DB01C.conv
encoding type : JAK
record length : 3216
record format : V
dsorg:
delimiter:


DSMIGIN: (record count = 2145, conversion error count = 0)

위의 예제에서 Mainframe AIM DB에서 언로드받은 파일의 이름은 DB01.db2이며, 이를 OpenFrame의 가변길이 NonVSAM 데이터셋으로 변환한다. DB01.DB2라는 데이터셋 이름으로 볼륨 DBVOL1에 생성할 것을 지정하고 있다.

변환할 때에 적용할 변환 스키마는 위에서 만든 DB01C.conv를 지정하고 있으며 -e JAK 옵션을 지정하여 문자 코드 변환할 때 EBCDIC(JEF) 인코딩으로 작성된 원본임을 지정한다. 마지막으로, 가변길이 데이터셋의 최대 레코드 길이로 "3216"을 지정하고 있는데 이는 변환 결과인 NonVSAM 데이터셋에 저장될 레코드 길이 중에서 가장 큰 길이를 지정하면 된다. 이는 데이터베이스 스키마 정보로부터 얻을 수 있다.

dsmigin을 이용한 NDB 데이터베이스 언로드 파일의 변환은 변환 스키마를 사용하는 데이터셋 마이그레이션으로 볼 수 있다. 이에 대해서는 데이터셋 마이그레이션을 참고한다.

1.4. NDB 데이터베이스 생성

NDB에 대한 데이터베이스 언로드 파일의 변환 과정이 완료되면, 변환된 데이터베이스 언로드 파일을 저장할 데이터셋을 OpenFrame NDB 데이터베이스에 생성해야한다. 데이터베이스 테이블 및 인덱스를 생성하는 작업을 간단히 데이터베이스를 생성한다고 말한다.

OpenFrame NDB에서 데이터베이스를 저장하기 위한 테이블은 NDB 데이터를 저장하기에 적합한 속성(레코드 길이 및 형식, 키 길이 등)으로 생성해야 한다. 이 작업은 ndbmgr 툴 프로그램을 사용하여 수행한다.

ndbmgr툴은 본체가 되는 NDB 데이터베이스를 생성 작업 외에 I/O 수행을 위한 라이브러리 생성하는 작업에도 사용된다. 일반적으로 본체 데이터베이스 테이블을 생성하고 I/O 라이브러리를 생성한 후에 NDB 데이터베이스 적재 작업을 순서로 작업한다.

다음은 ndbmgr를 사용하여 OpenFrame NDB에 데이터베이스 테이블을 생성하는 예이다.

$ ndbmgr schm create DB01
Managing OpenFrame NDB record tables and set tables

sacee token taken from config!
ndbmgr: creating SCHEMA (DB01) objects

ndbmgr: successfully processed the request

다음은 ndbmgr를 사용하여 OpenFrame NDB I/O 라이브러리를 생성하는 예이다.

$ ndbmgr schm dmlgen DB01
Managing OpenFrame NDB record tables and set tables

ndbmgr: generate SCHEMA (DB01) objects

tbESQL Precompiler 6

TmaxData Corporation Copyright (c) 2008-. All rights reserved.

DB01_REC01.tbc is precompiled successfully!

ndbmgr: successfully processed the request

위의 예제에서는 데이터베이스 DB01를 ndbmgr를 사용하여 생성하고 있다. DB01은 DB SCHEMA 이름이다.

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

1.5. NDB 데이터베이스 적재

OpenFrame NDB에 데이터베이스를 생성한 후에는 dsmigin을 통해서 변환된 데이터베이스 언로드 파일을 ndbmgr로 생성한 OpenFrame NDB 데이터베이스에 적재할 수 있다.

ndbimport 툴 프로그램을 사용해서 ndbimport은 변환된 데이터베이스 언로드 파일을 순차적으로 읽어 지정된 OpenFrame NDB 데이터베이스에 저장한다.

ndbimport를 이용한 적재 작업도 하나의 응용 프로그램으로 간주되기 때문에 적재 대상 데이터베이스를 포함하는 서브스키마(SUBSCHEMA)를 지정해야 한다. 또한 적재 과정을 제어하기 위한 제어문을 포함하는 파일을 지정해야 한다. ndbimport를 위한 제어문의 형식과 내용은 OpenFrame NDB 리로드 유틸리티인 JXKRELOD 유틸리티의 SYSIN으로 입력하는 제어문과 동일하다. 이를 통해서 적재 대상 데이터베이스의 이름, 레인지(RANGE), 서브레인지(SUBRANGE)를 지정하여 한정하거나 적재 과정 이후에 수행할 기본 인덱스 및 확장 인덱스 구축에 필요한 중간 작업 데이터셋을 생성할지 여부를 지정할 수 있다.

JXKRELOD 유틸리티의 제어문과 ndbimport에 대한 자세한 내용은 OpenFrame NDB "유틸리티 참조 안내서"와 OpenFrame NDB "툴 참조 안내서"를 참고한다.

다음은 ndbimport를 사용하여 OpenFrame NDB 데이터베이스를 적재하는 예이다.

$ ndbimport -c DB01.ctl -v DBVOL1 -k DB01X.KRD SDB01 DB01 DB01.DB2

위의 예제는 제어문 파일로 DB01.ctl을, 서브스키마 이름으로 SDB01을 지정하고 있으며, OpenFrame NDB에 적재할 수 있도록 변환된 언로드 데이터셋 DB01.DB2를 데이터베이스 DB01에 적재한다.

OpenFrame NDB 에서는 기본 인덱스와 확장 인덱스를 데이터베이스의 인덱스로 구성하기 때문에 IRD,KRD 데이터셋은 실제로 생성되지 않는다.

다음은 위의 예제에 사용된 제어문 파일 DB01.ctl 파일의 내용이다. KRDATA 문과 XINDEX 문을 지정하여 확장 인덱스 구축에 필요한 KRD 데이터를 작성할 것을 지정하고 있다. 기본 인덱스를 사용하고 있는 데이터베이스인 경우는 IXDATA 문과 INDEX 문을 지정하여 기본 인덱스 구축에 필요한 IXD 데이터를 작성하도록 지정할 수 있다. 이 제어문은 Mainframe에서 해당 데이터베이스를 언로드하기 위해서 사용되었던 제어문을 입력으로 ndbconvstmt 툴을 사용하여 역으로 생성할 수 있다.

    RELOAD       MODE=IS
    DIRECTORY    SCHEMA=DB01,SUBSCHEMA=SDB01
    SETUP        RECORD=DB01REC1
    KRDATA       DMFXIO=01
    XINDEX       XINAME=(DB01X-KEY)
    XINDEX       XINAME=(DB01X-KEY1)
    XINDEX       XINAME=(DB01X-KEY2)
    END

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

다음은 위의 예제에 사용된 서브스키마 SDB01의 내용이다. 서브스키마 SDB01은 적재 대상 데이터베이스인 DB01을 포함하고 있다.

    SUBSCHEMA NAME  IS SDB01;
        SCHEMA NAME IS DB01.
    01  DB01REC1.
    END