 |  |
|
난이도 : 중급 Vikram S. Khatri, Certified Consulting I/T Specialist, IBM
원문 게재일 : 2009 년 6 월 19 일 번역 게재일 : 2009 년 9 월 29 일 이 기사에서는 Oracle의 애플리케이션을 IBM® DB2® 버전 9.7
for Linux®, UNIX®, and Windows®에서 사용하는 데 필요한 매우 단순하지만
강력한 도구에 대해 설명합니다. 이 도구는 다른 여러 데이터베이스 관리 시스템의
데이터를 DB2 for Linux, UNIX, and Windows 및 DB2 for z/OS®로 이동하는 데도 사용할
수 있습니다.
소개
DB2 V9.7 for Linux, UNIX, and Windows부터는 MTK(Migration Toolkit)가 없어도 Oracle의
애플리케이션을 DB2 제품에서 사용할 수 있다. 이 도구를 활용하면 MTK 기능 사용 시 워크플로우가
매우 간단해진다.
예를 들어, 데이터베이스를 DB2 for z/OS로 이동하는 것과 같은 다른 모든 시나리오에서 이 도구를
사용할 수 있으며 특히 고속으로 데이터 이동 시 MTK의 기능을 지원한다. 이 도구를 사용하면 최대 4TB의 데이터를 단 3일 만에 이동할
수 있다.
입문자의 경우 GUI를 사용하면 편리하며 숙련된 사용자의 경우 명령행 API를 더 많이 사용한다.
준비
다운로드
먼저 다운로드 섹션에서 도구를 대상 DB2 서버로 다운로드한다. 데이터를 DB2 for z/OS로 이동하려면 추가 작업이 필요하다.
설치
IBMDataMovementTool.zip 파일을 다운로드한 후에는 대상 DB2 서버에서
파일을 IBMDataMovementTool 디렉토리에 추출한다. 최상의 데이터 이동 성능을 얻으려면 제품을
서버측(DB2)에 설치하는 것이 좋다.
전제 조건
- Oracle 애플리케이션을 DB2 for Linux, UNIX, and Windows에서 실행하려면 DB2 V9.7이 대상 서버에 설치되어 있어야 한다.
- Java™ 버전 1.5 이상이 대상 서버에 설치되어 있어야 한다. 현재 Java 버전을 확인하려면
java -version
명령을 실행한다. 기본적으로 Java는 DB2 for Linux, UNIX, and Windows의 일부로 <install_dir>\SQLLIB\java\jdk(Windows)
또는 /opt/ibm/db2/V9.7/java/jdk(Linux)에 설치된다.
- 소스 데이터베이스 및 DB2용 JDBC 드라이버의 위치는 다음 표와 같다.
| 데이터베이스 | JDBC 드라이버 |
|---|
| Oracle | ojdbc5.jar, ojdbc6.jar, ojdbc14.jar, xdb.jar, xmlparserv2.jar 또는 Oracle 7 또는 8i의 경우 classes12.jar 또는 classes111.jar | | SQL Server | sqljdbc5.jar 또는 sqljdbc.jar | | Sybase | jconn3.jar | | MySQL | mysql-connector-java-5.0.8-bin.jar 또는 최신 드라이버 | | PostgreSQL | postgresql-8.1-405.jdbc3.jar 또는 최신 드라이버 | | DB2 for Linux, UNIX, and Windows | db2jcc.jar, db2jcc_license_cu.jar 또는 db2jcc4.jar, db2jcc4_license_cu.jar | | DB2 for z | db2jcc.jar, db2jcc_license_cisuz.jar 또는 db2jcc4.jar, db2jcc4_license_cisuz.jar | | DB2 for i | jt400.jar | | MS Access | 선택적 Access_JDBC30.jar |
환경 설정
- UNIX: DB2 인스턴스 소유자로 서버에 로그인한다.
- Windows: DB2 명령창을 시작한다.
- IBMDataMovementTool 디렉토리로 변경한다. 이 도구는 도구를 실행하는 두 개의 드라이버 스크립트가 포함된 JAR 파일이다.
IBMDataMovementTool.cmd - Windows에서 도구를 실행하는 명령 스크립트이다.
IBMDataMovementTool.sh - UNIX에서 도구를 실행하는 명령 스크립트이다.
IBMDataMovementTool.jar - 도구의 JAR 파일이다. |
DB2 대상 데이터베이스 작성하기
도구를 실행하려면 대상 데이터베이스에 대한 연결이 필요하므로 DB2 데이터베이스를 먼저 작성해야
한다. DB2 V9.7의 경우 기본 자동 스토리지를 사용하고 32KB 페이지 크기를 선택하는 것이 좋다. DB2
V9.7에서 애플리케이션을 실행할 경우에는 인스턴스와 데이터베이스가 호환성 모드에서 작동 중이어야
한다. 또한 반올림 동작도 Oracle과 일치하도록 조정하는 것이 좋다. 유효성 재검증 시맨틱을 deferred_force로
설정하여 종속성 순서에 상관 없이 오브젝트를 전개할 수 있다.
UNIX 시스템
$ db2set DB2_COMPATIBILITY_VECTOR=ORA
$ db2set DB2_DEFERRED_PREPARE_SEMANTICS=YES
$ db2stop force
$ db2start
$ db2 "create db testdb automatic storage yes on /db2data1,
/db2data2,/db2data3 DBPATH ON /db2system PAGESIZE 32 K"
$ db2 update db cfg for testdb using auto_reval deferred_force
$ db2 update db cfg for testdb using decflt_rounding round_half_up |
Windows 시스템
C:\> db2set DB2_COMPATIBILITY_VECTOR=ORA
C:\> db2set DB2_DEFERRED_PREPARE_SEMANTICS=YES
C:\> db2stop force
C:\> db2start
C:\> db2 "create db testdb automatic storage yes on C:,D: DBPATH ON E: PAGESIZE 32 K"
C:\> db2 update db cfg for testdb using auto_reval deferred_force
C:\> db2 update db cfg for testdb using decflt_rounding round_half_up |
오브젝트 및 데이터 추출하기
도구를 실행하기 전에 다음과 같은 소스 및 DB2 서버 정보를 알고 있어야 한다.
- 소스 및 DB2 서버의 IP 주소 또는 호스트 이름
- 연결할 포트 번호
- 데이터베이스의 이름, SID, 서브시스템 이름 등(필요한 경우)
- 소스 데이터베이스에서 DBA 권한을 가진 사용자 ID
- 해당 사용자의 암호
- 소스 데이터베이스 및 DB2 JDBC 드라이버의 위치
- 충분한 데이터 저장 공간과 데이터를 저장할 볼륨/마운트 지점 정보
Windows의 경우 IBMDataMovementTool.cmd를 실행하고 UNIX의 경우 ./IBMDataMovementTool.sh를
실행한다. 서버에서 그래픽 기능이 지원되는 경우에는 GUI가 표시되고 그렇지 않은 경우에는 입력을
받을 수 있는 대화식 명령행 모드로 전환된다.
Windows:
IBMDataMovementTool.cmd
UNIX:
./IBMDataMovementTool.sh |
 |
DB2_COMPATIBILITY_VECTOR란?
DB2_COMPATIBILITY_VECTOR는 DB2 V9.7 인스턴스 및 데이터베이스를 Oracle 호환 모드로 배치하는 데
사용되며 자세한 정보는 DB2 V9.7 정보 센터에서 확인할 수 있다.
|
|
이제 GUI 창이 표시되면서 일부 메시지가 쉘 창에 나타난다. GUI를 시작하기 전에 이러한 메시지를 보고
오류가 발생하지 않았는지 확인한다.
DB2_COMPATIBILITY_VECTOR를 설정하지 않았으면 경고가 표시된다. 호환성 벡터를 아직 설정하지
않았으면 다음 단계에 따라 설정한다.
[2009-05-15 12.48.59.218] INPUT Directory = .
[2009-05-15 12.48.59.218] Configuration file loaded: 'jdbcdriver.properties'
[2009-05-15 12.48.59.218] Configuration file loaded: 'IBMExtract.properties'
[2009-05-15 12.48.59.218] appJar : 'C:\Vikram\Prospects\DB2Cobra\IBMDataMovementTool.jar'
[2009-05-15 12.49.01.000] * WARNING *. I did not detect DB2_COMPATIBILITY_VECTOR set for
compatibility mode.
[2009-05-15 12.49.01.000] To set compatibility mode, discontinue this program and
run the following commands
[2009-05-15 12.49.01.000] db2set DB2_COMPATIBILITY_VECTOR=ORA
[2009-05-15 12.49.01.000] db2stop force
[2009-05-15 12.49.01.000] db2start |
그래픽 사용자 인터페이스 사용하기
그림 1과 같이 GUI 화면에는 소스 및 DB2 데이터베이스 연결 정보를 지정하기 위한 여러 필드가
있다. 이 화면에서 수행할 작업 순서는 다음과 같다.
- 소스 및 DB2 연결 정보를 지정한다.
- Connect to Oracle을 클릭하여 연결을 테스트한다.
- Connect to DB2를 클릭하여 연결을 테스트한다.
- DDL 및 데이터를 추출할 작업 디렉토리를 지정한다.
- 원하는 경우 DDL 및/또는 DATA를 선택한다. DDL만 선택할 경우에는 추가 genddl 스크립트가 생성된다.
- Extract Data 단추를 클릭한다. 콘솔 창에서 진행 상태를 모니터링할 수 있다.
- 데이터 추출이 완료되면 결과 출력 파일에서 데이터 이동 상태, 경고, 오류 및 기타 잠재적 문제를
확인할 수 있다.
- 선택적으로 View Script/Output 단추를 클릭하여 생성된 스크립트, DDL, 데이터 또는 출력 로그 파일을 확인할 수 있다.
-
Deploy Data 단추를 클릭하여 테이블과 인덱스를 DB2에 작성하고 소스 데이터베이스에서 추출된 데이터를 로드한다.
-
생성된 DB2 스크립트는 명령행 대신 Execute DB2 Script를 사용해서도 실행할 수
있다. 데이터 이동은 대화식으로 진행되는 작업이다. 새로 고치기를 시작하기 전에 모든 테이블을
삭제해야 하는 경우 테이블 삭제 스크립트를 선택하고 실행할 수 있다. 스크립트를 원하는 순서대로
실행하려는 경우에도 이 단추를 사용할 수 있다.
그림 1. 소스 및 DB2 데이터베이스에 대한 입력 매개변수
Extract DDL/Data 단추를 클릭하면 그림 2와 같이 View File 탭에 메시지가 표시된다.
그림 2. DDL 및 데이터 추출하기
DDL 및 DATA의 추출이 완료되면 작업 디렉토리에서 새로 작성된 여러 파일을 볼 수
있다. 이러한 파일은 명령행 API에서 사용할 수 있다.
구성 파일
다음 명령 스크립트는 GUI 모드에서 도구를 실행할 때마다 다시 생성된다. 하지만 GUI를
사용하지 않더라도 이러한 스크립트를 사용하여 모든 데이터 이동 단계를 수행할 수 있다. 이
방법은 도구를 일괄 처리 프로세스의 일부로 포함시켜서 자동화된 데이터 이동 작업을 수행하려는
경우에 유용하다.
| 파일 이름 | 설명 |
|---|
| IBMExtract.properties | 이 파일에는 GUI를 통해 지정한 모든 입력 매개변수나 명령행 입력 값이 있다. 이 파일을
수동으로 편집하여 매개변수를 수정할 수 있다. 이 파일은 GUI를 실행할 때마다 겹쳐써진다는 점에
유의해야 한다. | | geninput | 데이터 이동 작업의 첫 번째 단계로 이동할 테이블의 이름이 담긴 입력 파일을
만든다. 이 파일을 수동으로 편집하여 이동하지 않을 테이블을 제외할 수 있다. | | genddl | DDL 생성을 DATA와 구별하도록 선택한 경우에만 생성되는 선택적 스크립트이다. 이 단계는
데이터 이동 작업의 두 번째 단계로 소스 데이터베이스의 모든 DDL을 DB2에 생성한다. | | unload | 데이터 이동 작업의 마지막 단계이다. 이 스크립트는 소스 데이터베이스의 데이터를
일반 파일로 언로드한다. 이 스크립트를 실행한 후에는 DB2 LOAD 스크립트가 생성된다.
참고: DDL을 DATA와 구별하도록 선택하지 않은 경우에는 genddl 컨텐츠가 unload 스크립트에 포함된다.
| | rowcount | 이 파일은 데이터를 이동한 후 소스 및 대상 데이터베이스 서버에 있는 테이블의 행 수에
대한 온전성 검사를 수행하는 데 사용된다. |
그림 3. 데이터 추출 후 작성된 파일
명령행 모드 사용하기
명령행 모드를 사용하여 도구를 실행할 수 있으며, 이 방법은 특히 서버에서 GUI 기능을 사용할 수 없거나
텔넷/ssh 세션을 통해 연결된 경우에 유용하다. 이 도구에서는 GUI를 시작할 수 없을 경우 모드가 자동으로
전환된다. 명령행 대화식 모드로 도구를 실행하려는 경우에는 -console 옵션을 IBMDataMovementTool
명령에 지정할 수 있다.
Windows:
IBMDataMovementTool -console
UNIX:
./IBMDataMovementTool.sh -console |
소스 및 DB2 데이터베이스 연결 매개변수를 지정하기 위한 대화식 옵션이 단계별로 제공된다. 다음은 콘솔 창의 샘플 출력이다.
[2009-05-16 23.38.54.703] INPUT Directory = .
[2009-05-16 23.38.54.703] Configuration file loaded: 'jdbcdriver.properties'
[2009-05-16 23.38.54.703] Configuration file loaded: 'IBMExtract.properties'
[2009-05-16 23.38.54.703] appJar : 'C:\Vikram\Prospects\DB2Cobra\IBMDataMovementTool.jar'
Extract DDL (Yes) : 1
Extract DDL (No) : 2
Enter a number (Default=1) : 1
Extract Data (Yes) : 1
Extract Data (No) : 2
Enter a number (Default=1) : 2
******* Source database information: *****
Oracle : 1
MS SQL Server : 2
Sybase : 3
MS Access Database : 4
MySQL : 5
PostgreSQL : 6
DB2 z/OS : 7
DB2 LUW : 8
Enter a number (Default 1) : 1 |
오브젝트 전개하기 및 데이터 로드하기
데이터베이스 대상 오브젝트 작성하기
DDL 및 DATA의 추출을 완료한 후에는 추출된 오브젝트를 다음 세 가지 방법으로 DB2에 전개할 수 있다.
- GUI 화면에서 Deploy DDL/DATA 단추를 클릭한다.
- Interactive Deploy 탭에서 단계별 프로세스에 따라 오브젝트를 전개한다.
- 명령행 스크립트 unload를 사용하여 DDL/DATA를 전개한다.
데이터 및 오브젝트 이동 요구 사항에 따라 적합한 데이터 전개 옵션을 선택하면 된다. 비PL/SQL DDL
오브젝트 및 DATA만을 마이그레이션하는 경우에는 unload 스크립트를 사용하거나 GUI에서 Deploy
DDL/DATA 단추를 클릭하는 방법만으로도 충분히 수행할 수 있다.
트리거, 함수, 프로시저 및 PL/SQL 패키지와 같은 PL/SQL 오브젝트를 전개할 경우에는 대화식 전개 옵션을 선택하는 것이 좋다.
그림 4와 같은 GUI 화면은 DDL 및 기타 데이터베이스 전개 오브젝트를 대화식으로 전개하려는 경우에
사용된다. 이 화면에서 수행할 작업 순서는 다음과 같다.
- Extract/Deploy 탭을 사용하여 DB2에 연결되었는지 확인한다.
- Interactive Deploy 탭을 클릭한다.
- Open Directory 단추를 사용하여 앞에서 추출한 오브젝트가 있는 작업 디렉토리를
선택한다. 그러면 오브젝트가 트리 보기에 표시된다.
- 도구 모음에 있는 Deploy All Objects 단추를 눌러서 모든 오브젝트를 전개할 수
있다. 일부 오브젝트가 전개되지 않을 수도 있지만 대부분의 오브젝트가 성공적으로 전개된다.
- 트리 보기에서 전개되지 않은 오브젝트를 클릭하면 오브젝트의 소스가 편집기 창에
표시된다. 전개 로그 아래에 실패의 원인이 나열된다.
- Oracle 호환성 모드에서는 일반적으로 오브젝트를 있는 그대로 전개할 수 있다. 하지만
기본 제공 오브젝트 중 일부는 해당 기능이 지원되지 않기 때문에 전개되지 않을 수 있다. 이러한 경우에는
편집기에서 해당 오브젝트의 소스 코드를 수정하여 문제를 해결할 수 있다. 변경된 오브젝트를 전개하면
기존 소스의 백업과 함께 새 소스가 저장된다.
- 오브젝트를 편집한 후 Ctrl 키를 사용하여 하나 이상의 오브젝트를 선택하고 도구 모음에서
Deploy Selected Objects 단추를 클릭하여 오브젝트를 전개할 수 있다. 전개 실패는 연쇄적으로
발생하는 경우가 많다. 왜냐하면 한 오브젝트가 전개에 실패할 경우 그 오브젝트에 종속된 다른
오브젝트도 전개에 실패하기 때문이다.
- 모든 오브젝트가 성공적으로 전개될 때까지 단계 5부터 단계 7까지 반복한다.
그림 4. 대화식 오브젝트 전개
행 수 비교하기
- 데이터 이동의 루트 디렉토리로 이동하고 rowcount 스크립트를 실행한다.
- "<source database name>.tables.rowcount" 파일에 생성된 보고서를 확인한다. 이
보고서에는 소스 및 대상 데이터베이스의 행 수가 들어 있다.
oracle : db2
"TESTCASE"."CALL_STACKS" : 123 "TESTCASE"."CALL_STACKS" : 123
"TESTCASE"."CLASSES" : 401 "TESTCASE"."CLASSES" : 401
"TESTCASE"."DESTINATION" : 513 "TESTCASE"."DESTINATION" : 513
|
z/OS에 설치된 DB2를 위한 추가 단계
 |
z/OS에서의 UNLOAD 프로세스
- 이 도구를 사용하려면 USS를 실행해야 하지만 z/OS에서 DB2 LOAD는 HFS 파일을 사용하여
데이터를 로드할 수 없다. 바로 이 점 때문에 z/OS에서는 Unix System Services의 JZOS 툴킷을 사용하여
PS 데이터 세트를 작성해야 한다. 하지만 DB2 LOAD는 USS(또는 HFS) 파일을 사용하여 CLOBS/BLOBS를 DB2에
로드할 수 있다. 따라서 z/OS에서 PS 데이터 세트를 작성하여 소스 데이터베이스의 데이터를 z/OS로 이동한
후 Unix System Services HFS 파일을 사용하여 모든 BLOBS/CLOBS를 유지할 수 있다.
- USS에서는 LOAD 문을 실행할 수 없으므로 SYSPROC.DSNUTILS 저장 프로시저를 사용하여 LOAD, CHECK DATA 및 RUN STATS를 실행한다.
- PS 데이터 세트를 작성하려면 각 테이블에 PS 데이터 세트를 할당해야 한다. 하지만
테이블의 크기를 모르기 때문에 고정된 크기를 미리 할당할 수 없다는 문제가 발생한다. 결국 z/OS에서
많은 용량의 공간이 낭비될 수 있다. 이러한 공간 문제를 해결하기 위해 알고리즘을 사용하여 크기를
할당한다.
|
|
z/OS에서 이 도구를 사용하여 소스 데이터베이스에서 DB2 for z/OS로 데이터를 이동할 수
있지만 다음과 같은 추가 단계를 수행해야 한다.
- 이 IBM 링크에서 JZOS를 다운로드하고 설치한다.
- 이 zip 파일에는 jzos.pax라는 파일이 있다. Unix System Services를 사용하여
FTP를 통해 2진 모드로 이 파일을 JZOS가 설치된 디렉토리에 저장한다.
- .pax 파일을 저장한 디렉토리로 변경한다.
pax -rvf 명령을 실행한다. 이제 현재 작업 디렉토리에 jzos라는
서브디렉토리가 생성된다. 이 서브디렉토리는 <JZOS_HOME>으로 참조된다.
- 사용자의 홈 디렉토리에서 아래 제공된 템플리트를 기반으로 하는 .profile 파일을 작성한다.
그리고 이 파일의 내용은 사용자의 z/OS DB2 설치에 맞게 변경해야 한다.
export JZOS_HOME=$HOME/jzos
export JAVA_PATH=/usr/lpp/java/J1.5
export PATH=$JAVA_HOME/bin:$PATH
export CLPHOME=/usr/lpp/db2/db2910/db2910_base/lib/IBM
export CLASSPATH=$CLASSPATH:/usr/lpp/db2/db2910/db2910_base/lib/clp.jar
export CLPPROPERTIESFILE=$HOME/clp.properties
export LIBPATH=$LIBPATH:<JZOS_HOME<
alias db2="java com.ibm.db2.clp.db2"
|
- 사용자의 환경에 맞게 CLPHOME 및 CLASSPATH를 수정해야 한다. <JZOS_HOME>을 해당 디렉토리로 변경한다.
- 사용자의 홈 디렉토리에서 아래 제공된 템플리트를 기반으로 하는 clp.properties 파일을 작성한다.
#Specify the value as ON/OFF or leave them blank
DisplaySQLCA=ON
AutoCommit=ON
InputFilename=
OutputFilename=
DisplayOutput=
StopOnError=
TerminationChar=
Echo=
StripHeaders=
MaxLinesFromSelect=
MaxColumnWidth=20
IsolationLevel=
<SUBSYSTEM_NAME>=<IP address>:<port number>/<location name>,USER,PASSWD
마지막 행의 항목을 적절하게 변경한다.
|
- chmod 777 <JZOS_HOME>/*.so 명령을 실행한다.
- IBMDataMovementTool.sh -console 명령을 실행하고 대화식 사용자 응답을 통해 매개변수의 값을 지정한다.
- IBMExtract.properties, geninput 및 unload 스크립트가 자동으로 작성된다.
- IBMExtract.properties의 zdb2tableseries 매개변수는 PS 데이터 세트 시리즈의 이름을
지정하는 데 사용된다. 예를 들어, TSO ID가 DNET770이고 이 매개변수를 R로 설정한 경우 첫 번째
테이블용으로 작성된 PS 데이터 세트의 이름은 DNET777.TBLDATA.R0000001이 된다.
- znocopypend 매개변수는 NOCOPYPEND 매개변수를 LOAD 문에 추가하는 데 사용된다. COPY 보류
모드에서는 테이블이 저장되지 않기 때문에 z/OS DB2 DBA는 이 매개변수를 사용하여 백업을 수행할 수 있다.
- zoveralloc 매개변수는 파일 할당 요청에 대한 실제 할당 비율을 지정한다. 값 1은 요청된
용량을 그대로 할당한다는 의미이다. 이 값은 여유 저장 공간이 충분한 환경에서 올바르게 작동한다. 실제
환경에서는 15/11(1.3636)이 적합한 추정치이다. 먼저 1.3636(15/11)부터 시작한 후 점차로 값을 낮추다가
파일 쓰기 오류가 발생하면 값을 조금 올리는 방식으로 이 값을 설정하는 것이 좋다. SMS 매개변수 REDUCE
SPACE UP TO의 값을 알고 있을 경우에는 1 / (1 - (X/100))라는 식을 적용하여 overAlloc의 완벽한 값을
계산할 수 있어야 한다. 이 식에서 X는 0부터 100 사이의 정수로 제공되는 REDUCE SPACE UP TO의 값이다. REDUCE SPACE UP TO는 백분율을 나타낸다.
- zsecondary 매개변수는 고정 보조 범위를 할당하는 데 사용된다. 값 0부터 시작하여 조금씩
올리다가 파일 오류가 발생하면 값을 조금 낮춘다.
- geninput 스크립트를 실행하여 unload 프로세스에 사용할 입력 파일을 작성한다.
- unload 스크립트를 실행하여 DDL 및 DATA를 생성한다.
- z/OS DB2에서 생성된 스크립트를 실행하여 DDL을 작성하고 데이터를 로드한다.
- 데이터 세트를 삭제하지 않은 경우 DSNUTILS가 실패한다. 다음 java 프로그램을 실행하여
중간 데이터 세트를 삭제할 수 있다.
java -cp /u/dnet770/migr/IBMDataMovementTool.jar:$JZOS_HOME/ibmjzos.jar \
-Djava.ext.dirs=${JZOS_HOME}:${JAVA_HOME}/lib/ext ibm.Cleanup
|
- 데이터가 z/OS의 DB2 테이블로 로드된 후에는 데이터 세트를 삭제해야 한다. 다음 java
프로그램을 사용하여 해당 데이터 세트를 정리 작업의 일부로 삭제한다.
다음과 같은 jd 스크립트를 작성한다.
JZOS_HOME=$HOME/jzos
JAVA_HOME=/usr/lpp/java/J1.5
CLASSPATH=$HOME/migr/IBMDataMovementTool.jar:$JZOS_HOME/ibmjzos.jar
LIBPATH=$LIBPATH:$JZOS_HOME
$JAVA_HOME/bin/java -cp $CLASSPATH \
-Djava.ext.dirs=${JZOS_HOME}:${JAVA_HOME}/lib/ext ibm.Jd $1
|
파일 권한을 755로 변경한 후 파일을 실행한다. 그러면 다음과 같은 출력이 표시된다.
DNET770:/u/dnet770/migr: >./jd
USAGE: ibm.Jd <filter_key>
USAGE: ibm.Jd "DNET770.TBLDATA.**"
USAGE: ibm.Jd "DNET770.TBLDATA.**.CERR"
USAGE: ibm.Jd "DNET770.TBLDATA.**.LERR"
USAGE: ibm.Jd "DNET770.TBLDATA.**.DISC"
|
"DNET770.TBLDATA" 아래에 있는 모든 데이터 세트를 삭제하려면 다음 명령을 사용한다.
DNET770:/u/dnet770/migr: >./jd "DNET770.TBLDATA.**"
|
대용량 데이터 이동 계획 세우기
이 도구의 장점은 대용량 데이터를 효율적으로 이동할 수 있다는 것이다. 이 도구를 사용하면 좋은
계획과 절차에 따라 4TB의 Oracle 데이터를 단 3일만에 이동할 수 있다. 이 기사에서는 주어진 시간 내에서
대용량 데이터 이동 작업을 수행하는 데 도움이 되는 팁과 기술에 대해 설명한다.
하드웨어 요구 사항 및 용량 계획
하드웨어 요구 사항 및 용량 계획은 이 기사의 범위를 벗어난 주제이기는 하지만 대용량 데이터 이동
작업의 소요 시간을 추정할 때 고려해야 하는 중요한 고려 사항이 있다.
- 소스 및 DB2 서버 사이에 1GBPS 이상의 속도를 지원하는 좋은 네트워크 연결이 있어야 한다. 데이터
이동 작업을 완료하는 데 소요되는 시간은 네트워크 대역폭의 영향을 많이 받는다.
- 소스 서버에 여러 개의 CPU가 있으면 여러 테이블을 병렬로 언로드할 수 있다. 데이터베이스
크기가 1TB 이상이라면 소스 서버에 최소 4개의 CPU가 있어야 한다.
- DB2 서버의 CPU 수에 따라 LOAD 프로세스의 속도가 달라진다. 대체적으로 총 소요 시간의
1/4에서 1/3 정도가 데이터를 로드하는 데 사용되고 나머지 시간이 언로드 프로세스를 수행하는 데 사용된다.
- DB2 데이터베이스 레이아웃에 대한 계획을 미리 세운다. IBM에서 제공하는 DB2
관련 베스트 프랙티스 문서를 통해 유용한 정보를 확인할 수 있다.
팁 및 기술
모의 테스트 실행
자동화가 제대로 수행되었는지 테스트하고 소스에서 언로드하고 DB2에 로드하는 작업을 번갈아
수행하는 계획 방식을 검증하기 위한 모의 데이터 이동은 되도록 수행하는 것이 좋다. 이러한 작업을
올바른 순서로 실행하기 위해 쉘 스크립트를 작성하는 단계에서만 사용자 정의 작업이 수행된다. 다음 단계를
수행하여 모의 테스트를 실행한다.
- 데이터 이동 스크립트 및 자동화 쉘 스크립트를 모의 디렉토리에 복사한다.
- 소수의 대용량 테이블을 소수의 스레드로 언로드하여 시간을 측정한 후 측정 결과를 바탕으로 데이터 이동을 적절히 조정한다.
- WHERE 절을 추가하여 데이터 이동을 테스트할 행 수를 제한한다. 예를 들어, ROWNUM 절을 추가하여
Oracle의 행 수를 제한할 수 있으며 SQL Server의 경우 TOP 절을 사용할 수 있다.
"ACCOUNT"."T1":SELECT * FROM "ACCOUNT"."T1" WHERE rownum < 100
"ACCOUNT"."T2":SELECT * FROM "ACCOUNT"."T2" WHERE rownum < 100
"ACCOUNT"."T3":SELECT * FROM "ACCOUNT"."T3" WHERE rownum < 100
"ACCOUNT"."T4":SELECT * FROM "ACCOUNT"."T4" WHERE rownum < 100
|
-
스크립트를 실행한 결과를 바탕으로 필요한 변경 사항을 적용한 후 최종 실행을 준비한다.
최종 실행
-
DDL은 이미 추출된 상태이며 테이블과 테이블 공간 간의 맵핑에 필요한 변경 사항도 수동으로 적용했다.
- 데이터 이동을 수행하기 위한 중단 시간을 결정한다.
- Oracle 데이터베이스가 소스일 경우에는 오픈 커서 설정을 약 10000개로 지정한다.
- 로그 파일에서 출력을 확인한다.
대량 데이터 이동 시에는 계획을 세우고 능숙하게 이를 처리하며 작업을 자동화하는 능력이 오히려
중요하다. 이 도구는 대용량 이동에 필요한 모든 기능을 제공한다. 이 기사에서는 이 작은 도구를 사용해서
대용량 데이터베이스를 소스에서 DB2로 이동했다.
도구에 대한 지원
IBM 지원 조직에서는 이 도구를 지원하지 않는다. 하지만 지원 포럼을
통해 버그, 문제점, 제안 사항, 개선 사항 요청 등을 보고할 수 있다.
자주 묻는 질문
| 자주 묻는 질문 |
|---|
| 질문: | 이 도구를 사용하기 위해 소스 데이터베이스 서버에 다른 프로그램을 설치해야 하는가? | | 답변: | 이 도구를 사용하기 위해 소스 데이터베이스에 설치해야 하는 프로그램은 없다. | | 질문: | 이 도구는 어느 플랫폼에서 지원되는가? | | 답변: | Windows, z/OS, AIX, Linux, UNIX, HP-UX, Solaris, Mac을 비롯한 JVM이 설치된 모든 플랫폼에서 지원된다. | | 질문: |
이 도구를 Linux/Unix 플랫폼의 보안 쉘 창에서 실행하는 동안 명령행 쉘에서만
메시지를 볼 수 있었고 GUI는 볼 수 없었다. 도구가 중지된 것처럼 보인다.
| | 답변: |
DISPLAY 설정에 따라 GUI 창이 표시 가능 서버에 열려 있을 수 있다. 이 경우에는 DISPLAY
설정을 올바르게 내보내야 한다. 자세한 정보는 Unix 시스템 관리자에게 문의한다.
| | 질문: |
PostgreSQL의 데이터를 이동하려는데 도구에 연결된 PostgreSQL JDBC 드라이버를 찾을 수 없다.
| | 답변: |
라이센스 고려 사항으로 인해 JDBC 드라이버는 도구와 함께 제공되지 않으므로 라이센스를 받은
소프트웨어를 이용해서 해당 데이터베이스의 JDBC 드라이버를 구해야 한다.
| | 질문: |
이 도구를 실행해서 Oracle 7 및 8i 데이터베이스의 데이터를 이동하려는데 Oracle 9g, 10g 또는
11g JDBC 드라이버를 사용해도 되는가?
| | 답변: |
이론적으로는 사용해도 된다. 예외가 발생할 경우에는 classes12.jar 또는 classes111.jar과 같은
기존 JDBC 드라이버로 변경하는 것이 좋다.
| | 질문: | 이 도구에서는 어떤 데이터베이스에 연결할 수 있는가? | | 답변: | Type-IV JDBC 드라이버가 설치된 모든 데이터베이스에 연결할 수 있다. 따라서 MySQL,
PostgreSQL, Ingres, SQL Server, Sybase, Oracle, DB2 등에 연결할 수 있다. ODBC-JDBC 커넥터가
설치된 데이터베이스에도 연결할 수 있으므로 Access 데이터베이스의 데이터도 이동할 수 있다. | | 질문: | 이 도구를 실행하는 데 필요한 Java의 버전은 무엇인가? | | 답변: | 이 도구를 실행하려면 Java 1.5 이상이 있어야 한다. 왜냐하면 도구의 GUI 부분에서
기본적으로 Java 1.5를 사용하고 있기 때문이다. Java 1.4.2에 대한 지원이 필요한 경우 의견을
남겨 주면 필자가 Java 1.4.2용 도구를 컴파일해서 제공할 수 있다. 그러나 이 경우에는 GUI를
실행해서 데이터 이동 드라이버 스크립트를 작성할 수 없다는 점에 유의해야 한다. 다음 명령을
실행하여 Java의 버전을 확인할 수 있다.
$ java -version
C:\>java -version
| | 질문: | 도구의 버전은 어떻게 확인할 수 있는가? | | 답변: | Windows의 경우 IBMDataMovementTool -version을 실행하고
Linux/UNIX의 경우 ./IBMDataMovementTool.sh -version을 실행한다. | | 질문: | 도구를 실행하는 중에 "Unsupported major.minor version 49.0" 또는
"(.:15077): Gtk-WARNING **: cannot open display:"라는 오류가 발생했다. | | 답변: | 이 오류는 Java의 버전이 1.5보다 낮을 때 발생한다. 1.4.2보다 높은 버전의 Java를 설치하면 이 문제를 해결할 수 있다. IBM Java를 설치하기를 권장한다. | | 질문: | 이 도구를 실행하기 위해 필요한 소스 및 DB2 데이터베이스 서버의 정보는 무엇인가? | | 답변: | 소스 및 DB2 데이터베이스의 IP 주소, 포트 번호, 데이터베이스 이름, 사용자 ID 및 암호를 알아야
하며 소스 데이터베이스의 사용자 ID에는 DB2 데이터베이스에 대한 DBA 권한 및 SYSADM 권한이 있어야 한다. | | 질문: | Windows 워크스테이션에서 이 도구를 실행하고 있는데 실행 속도가 매우 느리다. | | 답변: | IBMDataMovementTool.cmd 또는 IBMDataMovementTool.sh 명령 스크립트에서는 JVM에 대한 -Xmx 스위치를
사용하여 기본적으로 990MB의 메모리를 이 도구에 할당한다. 워크스테이션의 메모리 용량이 낮은 경우에는 도구에
할당되는 메모리 용량을 낮춘다. | | 질문: | SQL Server에서 DB2로 데이터 이동을 수행 중이며 DB2에서 TEXT 필드를 VARCHAR로 설정하려고 한다. | | 답변: | IBMExtract.properties 파일에서 mssqltexttoclob=true를 지정한다. | | 질문: | Sybase에서 DB2로 데이터를 이동하는데 T-SQL 프로시저가 DB2로 옮겨지지 않는다. | | 답변: | 이 도구에서는 DDL과 DATA만 이동할 수 있다. 프로시저/트리거를 이동하려면 MTK를 사용해야 한다. | | 질문: | Sybase에서 DB2로 DDL을 이동하고 있으며 Sybase 오브젝트가 파일에 있다. DDL 파일을
데이터 소스로 지정하는 방법을 찾을 수 없다. | | 답변: | 이 도구는 고속으로 데이터를 이동하기 위해 사용되므로 DDL 파일을 데이터베이스에서 DB2로 변환하는
기능은 제공되지 않는다. 하지만 IBM
InfoSphere Data Architect를 사용하여 DDL을 소스 데이터베이스에서 대상 데이터베이스로 변환할 수 있다. | | 질문: | MS Access에서 DB2로 데이터를 이동하는 중에 생성된 DDL에서 모든 인덱스가 보이지 않는다. | | 답변: | MS Access 데이터베이스는 기본적인 ODBC-JDBC 커넥터를 사용하여 연결한다. 따라서 전체 DDL 세트를
가져오려면 다른 상업용 JDBC 드라이버가 필요하다. MS Access용 HXTT
JDBC 드라이버를 사용해볼 수 있다. HXTT 드라이버를 사용할 경우에는 생성된 unload 스크립트에서 access 대신
DBVENDOR=hxtt를 지정해야 한다. | | 질문: | 이 도구를 사용하여 Sybase에서 DB2로 데이터를 이동하는 중에 매우 많은 오류가 발생한다. | | 답변: | 이 문제는 Sybase 데이터베이스에서 필수 JDBC 기능이 지원되지 않을 때 발생한다. Sybase DBA에게
문의하여 Sybase 데이터베이스에 올바른 JDBC 저장 프로시저가 설치되었는지 확인한다. | | 질문: | MySQL에서 DB2로 데이터를 이동하는 중에 메모리 부족 오류가 발생한다. | | 답변: | 생성된 unload 스크립트에서 FETCHSIZE=nnn의 값을 변경한 후 명령행에서 데이터 이동을 실행한다. GUI
도구를 사용하면 unload 스크립트가 겹쳐써진다. | | 질문: | Oracle에서 DB2로 데이터를 이동하는 중에 데이터 이동을 위해 3개의 jar 파일이 필요하다는 메시지가
표시된다. 데이터 이동을 위해서는 JDBC 드라이버만 필요한 것으로 알고 있는데 추가 jar 파일이 필요한 이유는 무엇인가? | | 답변: | 추가 JAR 파일은 주로 Oracle XML 데이터 형식에 필요하다. Oracle 설치 디렉토리에서 해당 파일을 가져와야 한다. | | 질문: | Oracle 데이터 형식인 CLOB를 DB2의 DBCLOB로 변경하려고 한다. | | 답변: | IBMExtract.properties 파일에서 DBCLOB=true를 설정한다. | | 질문: | 이 도구를 사용하여 Oracle에서 DB2로 데이터를 이동하는 중에 테이블을 찾을 수 없다는
Oracle SQL 오류가 많이 발생한다. | | 답변: | Oracle에 연결 중인 사용자 ID에 DBA 및 SELECT_CATALOG_ROLE 권한이 있어야 한다. | | 질문: | NCHAR 및 NVARCHAR2를 DB2의 GRAPHIC 또는 VARGRAPHIC으로 변경하지 않고 싶다. 대신
DB2 데이터베이스를 UTF-8로 작성한 후 NCHAR 및 NVARCHAR2를 CHAR 및 VARCHAR2로 변경하려고 한다. | | 답변: | IBMExtract.properties 파일에서 GRAPHIC=false를 설정한다. | | 질문: | Oracle 데이터베이스에서 V9.7/V9.5 이하 버전의 DB2로 데이터를 이동할 수 있는가? | | 답변: | 이동할 수 있다. IBMExtract.properties 파일에서 db2_compatibility=false를 설정한다. | | 질문: | Oracle의 NUMBER(38)를 NUMBER(31)로 변경했다는 메시지가 표시되는 것을 보니 DB2에서는 31자리까지만
지원되는 것으로 보인다. 하지만 이 숫자를 그대로 유지하기 위해 DOUBLE로 변환하려고 한다. | | 답변: | IBMExtract.properties 파일에서 roundDown_31=false를 설정한다. | | 질문: | 많은 데이터가 거부되었는데 거부 이유를 분석하기 위해 거부된 데이터를 파일로 저장하려면 어떻게 해야 하는가? | | 답변: | IBMExtract.properties 파일에서 dumpfile=true를 설정한다. | | 질문: | 워크스테이션의 데이터를 DB2 서버로 로드하려는 중에 오류가 발생했다. 도구를 서버에서만 실행해야 하는가? | | 답변: | 중개 서버를 사용하지 않고 DB2 서버에서 이 도구를 실행하여 소스 데이터베이스의 데이터를
추출하는 것이 좋다. 하지만 이 도구를 중개 서버에서 실행하려는 경우에는 생성된 unload
스크립트에서 REMOTELOAD=TRUE를 지정할 수 있다. 그리고 BLOBS/CLOBS/XML 데이터를 서버에서 사용하려면
DB2 LOAD 유틸리티가 필요하다는 점에 유의해야 한다. 해당 디렉토리를 동일한 이름 지정 규칙에 따라
대상 DB2 서버에 마운트해야 한다. | | 질문: | SSH 쉘을 통해서만 DB2 서버에 로그인할 수 있으며 X-Windows를 DB2 서버에서 실행할 수 없는
상황이다. 이 GUI 도구를 실행하여 DDL 및 DATA를 이동하려면 어떻게 해야 하는가? | | 답변: | SSH 쉘에서 IBMDataMovementTool.sh를 실행한다. 만일 그래픽이
지원되지 않으면 자동으로 명령행 입력으로 전환된다. 자동으로 전환되지 않을 경우에는 -console 옵션을
IBMDataMovementTool.sh 명령에 지정한다. 그러면 도구가 대화식 명령행 모드로 강제 실행된다. 명령행
모드는 입력을 받아서 데이터 이동에 필요한 스크립트를 작성할 수 있는 환경 중 하나이며 GUI 또한 스크립트를
생성할 수 있는 환경에 불과하다. 실제 작업은 스크립트를 통해서만 수행된다.
| | 질문: | 데이터베이스의 이름을 요구한 이후에 스크립트를 통해 DB2 데이터베이스를 작성하지 않는 이유는 무엇인가? | | 답변: | 대부분의 DBA는 스토리지 경로 정보에 따라 데이터베이스를 작성하기를 좋아한다. 하지만 이 도구는
필요한 테이블 공간만을 작성하며 DB2가 테이블을 올바른 테이블 공간에 자동으로 저장한다. IBM의
베스트 프랙티스 문서를 읽고 주의를 기울여서 데이터베이스에 대한 계획을 세워야 한다. 32K 페이지 크기를
기본값으로 사용하는 DB2 데이터베이스를 작성하는 것이 좋다.
|
감사의 인사
전세계에 있는 많은 IBM 직원들이 이 도구에 대해 소중한 의견을 보내주었다. 이 분들의 의견이
없었다면 지금과 같은 모습의 도구를 볼 수 없었을 것이다. 소중한 도움, 의견, 제안 및 지침을 제공해
주신 다음 분들에게 감사의 뜻을 표한다.
- Jason A Arnold
- Serge Rielau
- Marina Greenstein
- Maria N Schwenger
- Patrick Dantressangle
- Sam Lightstome
- Barry Faust
- Vince Lee
- Connie Tsui
- Raanon Reutlinger
- Antonio Maranhao
- Max Petrenko
- Kenneth Chen
- Masafumi Otsuki
- Neal Finkelstein
면책사항
본 항목에는 도구가 포함되어 있습니다. IBM은 귀하("라이센스 사용자")에게 본 도구를
사용할 수 있는 비독점적이고 로열티를 부과하지 않는 라이센스를 부여합니다. 그러나 본 도구는
상품성, 특정 목적에의 적합성 및 타인의 권리 비침해에 대한 묵시적 보증을 포함하여 어떠한
종류의 명시적 또는 묵시적 보증 없이 "현상태대로" 제공됩니다. IBM 및 IBM의 라이센스 제공자는
귀하가 본 소프트웨어를 사용함으로써 라이센스 사용자에게 발생한 손해에 대해 어떠한 책임도
지지 않습니다. IBM 및 IBM의 라이센스 제공자는 본 소프트웨어의 사용 또는 비사용으로 인한 모든
책임 법리에 따른 직접 손해, 간접 손해, 특별 손해, 징벌적 손해, 결과적 손해 또는 데이터 분실,
이익 손실에 대해 이러한 손해의 발생 가능성을 통지받은 경우라도 일체 책임을 지지 않습니다.
다운로드 하십시오 | 설명 | 이름 | 크기 | 다운로드 방식 |
|---|
| IBM Data Movement Tool1 | IBMDataMovementTool.zip | 900KB | HTTP |
|---|
Note - 이 도구의 새 빌드가 IBM 다운로드 사이트에 자주 업로드되고 있으므로 데이터를
이동할 때 최신 빌드를 다운로드하는 것이 좋다. Help>About 메뉴 옵션이나 IBMDataMovementTool
-version 명령을 사용하여 빌드 번호를 확인할 수 있다. 이 도구에서는 JGoodies Forms 1.2.1,
JGoodies Look 2.2.2 및 JSyntaxPane 0.9.4 패키지를 GUI 인터페이스로 사용한다.
참고자료 교육
제품 및 기술 얻기
토론
필자소개  | |  | Vikram S Khatri는 IBM에서 Sales and Distribution Division의 DB2 Migration 팀 소속으로 활동하고
있다. IT 분야에서 23년의 경력을 가지고 있는 그는 DB2에 대한 비DB2 애플리케이션 인에이블먼트 전문가이며 복잡한
데이터베이스 마이그레이션 프로젝트 및 데이터베이스 성능 벤치마크 테스트를 통해 DB2 기술 영업 조직을
지원하고 있다. |
기사에 대한 평가
 |
| 이 문서 북마킹 하기
|
|  |