‘다중 SQL 언어
지원, 특정 DBMS 의존도를
없앤다’
PL/SQL 지원 등을 통해 Oracle에서 개발된 애플리케이션의 실행을 지원하는 DB2 9.7
Serge
Rielau, SQL Architect, STSM, IBM
출처: IBM developerWorks http://www.ibm.com/developerworks/kr/library/dm-0907oracleappsondb2/index.html
IBM DB2 9.7 for Linux, UNIX and Windows(DB2)는 Oracle용으로
작성된
애플리케이션을 DB2에서
사용하는
데
있어서
걸림돌이
되는
많은
부분을
획기적으로
제거했기
때문에
고객과
공급업체
모두
애플리케이션
히스토리보다는
얻게
되는
장점을
보고 DBMS를
선택할
수
있다.
DB2 9.7의 Oracle 호환성
기능
한 RDBMS용으로
작성된
애플리케이션을
거의
변경하지
않은
채로
다른 RDBMS에서
실행하기
위해서는
많은
부분을
고려해야
한다. 서버에
있는
다양한
잠금
메커니즘, 데이터
유형, SQL 및
프로시저
언어와
애플리케이션
자체에
사용되는
클라이언트
인터페이스까지도
구문
차원뿐만
아니라
의미
차원에서도
적절하게
조정해야
한다.
DB2에는
이러한
단계가
모두
적용되었다. 변경
사항은
예외이지
규칙이
아니다. (IBM은
필요한
애플리케이션
변경
사항에
빠르게
액세스할
수
있다.) 표 1에서는
공통으로
사용되는
기능을
간략하게
설명한다.
|
Oracle
|
DB2
|
|
동시성
제어
|
기본
지원
|
|
SQL 언어
|
기본
지원
|
|
PL/SQL
|
기본
지원
|
|
PL/SQL 패키지
|
기본
지원
|
|
내장
패키지
|
기본
지원
|
|
JDBC 클라이언트(확장
포함)
|
기본
지원
|
|
SQL*Plus 스크립트
|
기본
지원
|
DB2 9.7에서는
애플리케이션을
더
이상
이식하지
않아도
된다. 단순히
애플리케이션을
활성화하기만
하면
된다. 패키지화된
애플리케이션의
경우에는
하나의
소스를 DB2와 Oracle에서
공유할
수도
있다.
즉, Oracle 애플리케이션을 DB2에서
사용할
수
있도록
만드는
작업은 HP-UX용으로
작성된 C 프로그램을 AIX에서
실행할
수
있도록
만드는
작업보다
쉽다.
과거에 Oracle과 DB2 사이의
가장
큰
차이점
중
하나는
동시성
제어를
처리하는
방법이었다. 대표적인
문구는 "판독자는
작성자를
차단하지
않고
작성자는
판독자를
차단하지
않는다"이다.
|
보류
중인
트랜잭션
|
동작
|
새
트랜잭션
|
|
판독자
|
차단하지
않음
|
판독자
|
|
판독자
|
차단하지
않음
|
작성자
|
|
작성자
|
차단하지
않음
|
판독자
|
|
작성자
|
차단함
|
작성자
|
격리
수준에
대해서는
자세히
다루지
않겠지만
여기에서는 Oracle 기본
명령문
수준
격리를
사용하는
거의
대부분의
애플리케이션이 DB2의
기본
CS(Cursor Stability)와
매우
잘
작동한다는
수준의
언급이면
충분할
것이다.
하지만
지금까지의 CS는
작성자가
판독자를
차단하고, 어떤
경우에는
판독자가
작성자를
차단할
수
있도록
구현되었다. 이렇게
구현한
이유는 CS 격리
하에서의
트랜잭션이
보류
중인
동시
트랜잭션의
변경 "결과를
대기"하기
때문이었다.
|
보류
중인
트랜잭션
|
동작
|
새
트랜잭션
|
|
판독자
|
차단하지
않음
|
판독자
|
|
판독자
|
거의
차단하지
않음
|
작성자
|
|
작성자
|
차단함
|
판독자
|
|
작성자
|
차단함
|
작성자
|
CS 격리
하에서
실행
중인
트랜잭션이
변경된
행을
만났을
때
결과를
대기할
이유가
없다는
사실이
밝혀졌다. 이
동작은
변경된
행의
현재
커미트된
버전을
읽는
것과
동일한
동작이기
때문이다.
이
동작은 DB2 9.7에서
구현되었다. 즉, DB2는
단순히
로그에서
잠겨
있는
행의
현재
커미트된
버전을
검색한다. 대부분의
경우에는
변경
사항이
아직
커미트되지
않았기
때문에
해당
행이
로그
버퍼에
남아
있다. 하지만
행이
작성된
후
로그
버퍼에서
다시
겹쳐써졌다고
하더라도 DB2가
해당
행의
위치를
정확히
알고
있기
때문에
한
번의 IO 작업만으로도
원하는
버전을
버퍼풀로
가져올
수
있다.
한
사용자가
직원
테이블의
이름을
갱신하고
있고
이
사용자가
변경
사항을
커미트하기
전에
다른
사용자가
해당
테이블을
검색하고
있는
상황을
가정해
보자(그림 2 참조). 일반적으로
두
번째
사용자는
첫
번째
사용자가
커미트하거나
롤백할
때까지
기다려야
했었다. 하지만
이제는
현재
커미트된
데이터
읽기가
지원되므로
두
번째
사용자가
수행한
검색의
결과로
첫
번째
사용자의
변경
사항이
포함되지
않은
버전의
행이
로그
버퍼에서
검색된다.
이
동작의
중요한
특징은
다음과
같다.
- 롤백
세그먼트와
같은
새
오브젝트를
사용하지
않는다.
- 어느
경우에나
로그를
작성해야
하므로
작성자에
대한
성능
오버헤드가
발생하지
않는다.
- 트랜잭션이
열려
있음에도
불구하고
필요한
로그
파일이
아카이브되는
상황처럼
발생하기
어려운
이벤트가
발생할
경우 DB2는
단순히
폴백하여
잠금이
해제될
때까지
기다리므로 "스냅샷이
너무
오래됨"과
같은
상황이
발생하지
않는다.
DB2에는
이러한
변경
사항
외에도 CS 격리
하에서
잠금을
유지하는
판독자를
제거하기
위해
추가
잠금
회피
기술이
도입되었다.
|
보류
중인
트랜잭션
|
동작
|
새
트랜잭션
|
|
판독자
|
차단하지
않음
|
판독자
|
|
판독자
|
차단하지
않음
|
작성자
|
|
작성자
|
차단하지
않음
|
판독자
|
|
작성자
|
차단함
|
작성자
|
이
표에서
알
수
있듯이
이제는
동시성
동작이 Oracle의
동시성
동작과
동일하다. 실제로
새로
작성한 DB2 데이터베이스는
기본적으로
이
동작을
제공한다.
새
데이터
유형
모든
데이터베이스의
핵심은
해당
데이터베이스에
있는
데이터이다. 유형이
일치하지
않거나
이러한
유형의
의미가
일치하지
않으면
애플리케이션을
다른 RDBMS에서
사용할
수
있도록
만드는
데
심각한
영향을
줄
수
있다. 따라서 Oracle 애플리케이션을 DB2에서
실행할
수
있으려면
문자열, 날짜
및
숫자와
같이
표준화되지
않은
기본
유형에
대한
지원이
필요하다. 이러한
기본
유형을
맞추는
부분
외에도 Oracle의 PL/SQL에
일반적으로
사용되는
좀
더
복잡한
유형들도 DB2 9.7에
추가되었다.
|
데이터
유형
|
설명
|
|
NUMBER
|
DECFLOAT(Power6 하드웨어
가속
사용) 및 DECIMAL을
기반으로 NUMBER 및 NUMBER(p [, s])에
대한
지원이
추가되었다.
|
|
VARCHAR2
|
VARCHAR2 유형
동작은 NULL로
해석되는
빈
문자열과
후행
공백을
구분하는
데이터
정렬을
포함한다.
|
|
Oracle DATE
|
Oracle DATE 모드의
데이터베이스는
달력
날짜와
함께 TIME 구성
요소를
포함한다.
|
|
TIMESTAMP(n)
|
초
단위의
범위를 0(날짜 + 시간)부터 12(피코초) 사이에서
선택할
수
있다.
|
|
BOOLEAN
|
이
유형은
절차적
논리, 변수
및
루틴
매개변수에서
사용할
수
있다.
|
|
VARRAY
|
프로시저의 ARRAY 지원이 VARRAY 유형
메소드
및
구문을
지원하도록
확장되었다.
|
|
INDEX BY
|
DB2에서는
일반
배열과
함께
결합형
배열도
지원된다.
|
|
ROW TYPE
|
이
복합
유형은
변수
및
매개변수에서
사용할
수
있으며
배열
및
결합형
배열에
대한
요소로도
사용할
수
있다.
|
|
Ref Cursor type
|
매개변수를
사용하여
커서를
변수에
할당하거나
전달할
수
있다.
|
묵시적
캐스팅
및
유형
확인
"오리처럼
걷고
오리처럼
말한다면
그것은
분명
오리이다."
이
문구는 PHP 및 Ruby와
같은
같은
여러
새
언어에서
자주
언급되는
문구이다. 모든
리터럴은
문자열이며
컨텍스트에
따라
다른
유형으로
사용된다. SQL 표준을
준수하고
유형
불일치가
코딩
실수를
나타낼
가능성이
높다는
철학에
따라
지금까지 DB2는
문자열과
숫자를
명시적으로
다른
형식으로
캐스팅하지
않는
한
서로
비교할
수
없는
강력한
형식의
규칙을
따랐다.
아쉽게도 Oracle 애플리케이션이 SQL에서
약한
형식
지정을
사용할
경우에는
이
애플리케이션을 DB2에
대해
성공적으로
컴파일할
수
없었다. DB2 9.7에서는
묵시적
캐스팅(약한
형식
지정)이
추가되었다. 즉, 문자열과
숫자를
매우
유연한
방식으로
비교, 할당
및
조작할
수
있게
되었다.
또한
지연된
준비로
인해
형식화되지
않은 NULL을
더
많은
곳에서
사용할
수
있으며
형식화되지
않은
매개변수
마커를
거의
모든
곳에서
사용할
수
있다. 즉, DB2는
첫
번째
실제
값이
나타날
때까지
매개변수
마커의
유형을
확인하지
않는다.
묵시적
캐스팅을
완성하기
위해 DB2에서는
프로시저
매개변수에
기본값을
지정하는
기능과
매개변수에
대한
인수를
이름별로
연결하는
기능을
지원한다.
DB2의
확장된
내장
함수
라이브러리
모든 RDBMS는
데이터에
대한
작업을
수행하는
함수
라이브러리를
제공한다. 하지만
이러한
함수에
같은
이름을
사용하는
경우가
없다는
점이
문제이다. 기능이
매우
비슷한
함수조차도 RDBMS마다
이름이
다르다.
DB2는
이제
기존
함수
세트뿐만
아니라 Oracle과
호환되는
라이브러리도
지원한다. 다음은
이러한
함수
중
일부를
보여
주는
간단한
목록이다.
- 변환
및
캐스팅
함수
- TO_DATE
- TO_CHAR
- TO_CLOB
- TO_NUMBER
- TO_TIMESTAMP
- TO_DATE
이들
각
함수는
다양한
호환
형식
문자열
세트를
지원한다.
- 날짜
계산
- EXTRACT
- ADD_MONTHS
- MONTHS_BETWEEN
- NEXT_DAY
- 요일
부분을
추가하는
더하기(+) 부호
- EXTRACT
- 문자열
조작
- LPAD
- RPAD
- INSTR
- INITCAP
- SUBSTR에
대한
확장
- LPAD
- 기타
- NVL
- DECODE
- LEAST
- GREATEST
- BITAND
- NVL
두
제품에서
동일하게
지원되는
함수가
많아졌다는
것은 Oracle 애플리케이션을 DB2에서
사용할
수
있도록
만드는
작업의
기본적인
성공률이
높아졌다는
것을
뜻한다.
지금까지
동시성, 데이터
유형, 유형
지정
및
함수에
대해
살펴보았다. 하지만 Oracle와 DB2의
차이점은
이
정도에서
그치지
않는다. SQL 언어의
핵심인
키워드
및
의미에서도
차이가
있으며
일부
기능은
두
제품
중
한
제품에서만
지원되기도
한다. 이러한
기능이
많이
사용되는
기능일
경우에는
두
제품에
공통으로
적용되는 SQL을
제출하는
데
제한이
따르게
된다. 표 6에서는
여러
가지
크고
작은
언어
기능
중
몇
가지
중요한
기능을
보여
준다.
|
기능
|
설명
|
|
CONNECT BY 재귀
|
DB2에서는
지금까지 ANSI SQL 재귀가
지원되었지만
이제는
LEVEL 및
CONNECT_BY_PATH와
같은
다양한
함수
및
의사
열을
비롯한 Oracle 유형의
CONNECT BY가
추가되었다.
|
|
조인(+) 구문
|
이
구문은 Oracle에서도
실제로
사용되지
않고
있지만
아직까지도
OUTER JOIN 구문
형식을
사용하는
애플리케이션과
개발자가
많이
있다.
|
|
DUAL 테이블
|
단일
행과
단일
열로
구성된
테이블이며 Oracle 애플리케이션에서
더미로
자주
사용된다.
|
|
ROWNUM 의사
열
|
이
의사
열은
대개
리턴되는
행의
수를
제한하고
결과
세트의
행을
열거하는
데
사용된다.
|
|
ROWID 의사
열
|
Rowid는
이전에
가져온
행을
물리적
주소를
기반으로
빠르게
검색하는
데
사용된다.
|
|
MINUS SQL 연산자
|
Oracle에서는
하나의
결과
세트에서
또
다른
결과
세트를
제거할
때
EXCEPT 대신
MINUS를
사용한다.
|
|
SELECT INTO FOR UPDATE
|
SELECT INTO에
대한
FOR UPDATE 구문은
나중에
커서를
사용하지
않고
수정할
의도로 DB2에서
행을
추출할
때
사용된다.
|
|
Public 동의어
|
Public 동의어는
스키마
이름이
없는
별명이다. DB2에서는
테이블
오브젝트, 시퀀스
및 PL/SQL 패키지에
대한 Public 동의어가
지원된다.
|
|
CREATE TEMPORARY TABLE
|
DB2에서는
작성된
전역
임시
테이블과
선언된
전역
임시
테이블이
지원된다.
|
|
TRUNCATE 테이블
명령문
|
이
명령문은
트리거를
실행하지
않은
채로
전체
테이블의
컨텐츠를
빠르게
삭제한다.
|
|
낮은
수준의
이름
확인
|
DB2 9.7에서는
더
이상
인라인
보기에
이름을
지정할
필요가
없다. 또한 UNION 등의
세트
연산자로부터
열
이름을
수비게
상속할
수
있다.
|
위
표를
보면
데이터베이스에
대해 SQL을
제출하는 Oracle 애플리케이션에서
실행할
수
있도록 DB2에
적용된
변경
사항이
많이
바뀌지는
않았다는
것을
알
수
있다. 하지만
많은
애플리케이션의
주요
부분이
서버
자체에서
실행되고
있으며 Oracle 애플리케이션에
사용할
수
있는
서버측
언어는 PL/SQL이다. 따라서 PL/SQL에
대한
지원이
없으면
호환성을
이야기할
수
없다.
일반적으로
애플리케이션을
한
제품에서
다른
제품으로
이식할
경우에는 SQL 및
프로시저
언어
코드도
다른 SQL 언어
코드로
변환되어야
한다. 이로
인해
몇
가지
문제점이
발생한다.
- 소스
및
대상
언어
사이의
자동화
및
제한
사항
불일치로
인해
변환된
결과
코드의
내용이
복잡해진다.
- 애플리케이션
개발자가
대상 SQL 언어
코드에
익숙하지
않기
때문에
이식된
코드를
디버그하기가
어렵다. 스킬이
부족하기
때문에
시간이
지날수록
유지보수
부담이
커진다.
- 패키지된
애플리케이션의
경우에는
애플리케이션이
새롭게
릴리스될
때마다
변환
작업을
수행해야
한다.
- 결국에는
원본보다
느린
에뮬레이션이
되고
만다.
이러한
문제를
해결하기
위해 DB2 9.7에는
기본 PL/SQL 지원이
포함되었다. 그렇다면
이
말의
의미가
무엇일까?
그림 3에서
볼
수
있듯이
이제 DB2 엔진에는 PL/SQL 컴파일러와 SQL PL 컴파일러가
모두
들어
있다. 두
컴파일러
모두 DB2의 SQL Unified Runtime Engine에
대한
가상
시스템
코드를
생성한다. 이는 Optim Development Studio와
같은
모니터링
및
개발
도구가
런타임
엔진
수준에서 DB2에
연결되기
때문에
중요하다.
PL/SQL이 DB2에
중요한
프로시저
언어로
통합되면서
얻게
되는
효과는
다음과
같다.
- 변환이
필요하지
않다. 소스
코드가
스키마
카탈로그에
그대로
유지된다.
- 개발자는
익숙한
언어를
계속해서
사용할
수
있다. 새
논리가 SQL PL로
작성되었다고
하더라도
논리를 DB2의
언어로
이동하지
않아도
된다. 다른
언어를
사용하는
루틴끼리
상호
간에
호출할
수
있다.
- 패키지된
애플리케이션
공급업체의
경우
하나의
소스
코드를 Oracle 및 DB2에
사용할
수
있다.
- PL/SQL과 SQL PL 모두 DB2의 SQL Unified Runtime Engine에
대해
동일한
가상
시스템
코드를
생성하므로
동일한
속도로
실행된다.
- 디버거
인프라가 SQL Unified Runtime Engine에
직접
연결되므로 Optim Development Studio에서 PL/SQL이
자연스럽게
지원된다.
그림 4에서는 PL/SQL 디버깅
세션을
보여
준다. 이
디버거는 step into, step over 및
중단점과
같은
표준
기능을
지원한다. 또한
프로그램
실행
중에
사용자가
로컬 PL/SQL 변수를
변경할
수
있다.
그렇다면 PL/SQL 지원이
구체적으로
의미하는
바는
무엇일까? 첫
번째
의미는
핵심
구문이
지원된다는
것이다. 즉, DB2에서
다음과
같은 PL/SQL의
공통
구문이
모두
지원된다.
- if then else
- while 루프
- := 할당
- 로컬
변수
및
상수
- #PRAGMA EXCEPTION 및
예외
처리
- 다양한
형식의
루프(범위, 커서
및
쿼리)
- 변수
및
매개
변수를
다른
오브젝트에
고정하는 %TYPE 및 %ROWTYPE 앵커링
- 프로시저를 private 트랜잭션에서
실행할
수
있도록
지원하는 #PRAGMA AUTONOMOUS 트랜잭션
프로시저
논리가
허용되는
다양한
오브젝트에서 PL/SQL을
사용할
수
있다.
- 스칼라
함수
- 각
행
트리거
앞
- 각
행
트리거
뒤
- 프로시저
- 익명
블록
- PL/SQL 패키지
Oracle 애플리케이션에
사용되는
대부분의 PL/SQL은
패키지에
포함되어
있다. PL/SQL 패키지(DB2 패키지가
아님)는
외부에서
액세스할
수
있는
오브젝트와
패키지
내에서
사용하기
위한
도우미
오브젝트를
구별하는
기능을
갖춘
개별
오브젝트의
모음이다. ANSI SQL에서
패키지와
동등한
개념으로
사용되는
용어는
모듈이다. DB2는
이제 ANSI SQL 모듈
및 PL/SQL 패키지에
대한
지원을
제공한다. 제공되는
기능
중
특히
중요한
기능은
다음과
같다.
- CREATE [OR REPLACE] PACKAGE는
외부에서
볼
수
있는
루틴에
대한
프로토타입을
정의하며
변수
및
유형과
같이
외부에서
볼
수
있는
비프로시저
오브젝트도
정의한다.
- CREATE [OR REPLACE] PACKAGE BODY는
모든 private 및 public 루틴과
다른
모든 private 오브젝트를
구현한다.
- 패키지
또는
패키지
본문
내에서
다음과
같은
오브젝트를
정의할
수
있다.
- 변수
및
상수
- 데이터
유형
- 예외
- 스칼라
함수
- 프로시저
- 커서
- 변수
및
상수
- 패키지
초기화
- 패키지의 public 동의어
일부 Oracle 애플리케이션에서는 RDBMS에서
제공하는
패키지를
활용한다. 특히
보고, 이메일
또는
연결
간
통신을
제공하는
라이브러리는
많이
사용될
수
있다. 이러한
애플리케이션을 DB2에서
많이
사용할
수
있도록 DB2에서는
표 7에
나열된
패키지를
제공한다.
|
패키지
|
설명
|
|
DBMS_OUTPUT
|
명령행에서
설정
또는
해제할
수
있는
기본적인
보고
기능을
제공한다.
|
|
UTL_FILE
|
DB2 서버에서
파일
작업을
수행하는
데
필요한
기능을
제공하는
모듈이다.
|
|
DBMS_SQL
|
기존
EXECUTE 및
EXECUTE IMMEDIATE 명령문과
함께
동적 SQL을
수행할
수
있는 SQL API를
제공하는
패키지이다.
|
|
UTL_MAIL
|
SQL의
이메일
알림을
보낼
수
있는
모듈이다.
|
|
UTL_SMTP
|
UTL_MAIL과
비슷한
하위
수준 API로 SMTP 통합
기능을
제공한다.
|
|
DBMS_ALERT
|
다른
세션끼리
서로
세마포어를
설정하는
데
사용할
수
있는
패키지이다.
|
|
DBMS_PIPE
|
세션
간에
데이터를
보내는
데
필요한
기능을
제공하는
모듈이다.
|
|
DBMS_JOB
|
DB2의
작업
스케줄러와
통합되는
호환
가능한 API를
제공한다.
|
|
DBMS_LOB
|
DB2의
내장 LOB 함수를
에코하는 LOB 처리를
위한 Oracle API이다.
|
|
DBMS_UTILITY
|
애플리케이션에
사용되는
다양한
프로시저의
모음이다.
|
Oracle 관련 JDBC 확장
JDBC는
표준 Java 클라이언트
인터페이스이다. 하지만
표준이
아닌
특정
데이터
유형을
지원하기
위해 Oracle의 JDBC 드라이버에
추가된
확장이
있다.
Java 기술
기반
애플리케이션에
대한
호환성
수준을
극대화하기
위해 DB2 9.7 JDBC 드라이버는
무엇보다도
참조
커서
및 VARRAY 매개변수를
사용하여
프로시저를
호출할
수
있는
기능을
지원한다.
SQL*Plus 명령행
프로세서를
사용하여 DDL 스크립트
및
보고서를
작성하는
경우가
자주
있다. 이러한
스크립트뿐만
아니라
스크립트를
작성하는
개발자의
스킬까지도
더
쉽게
이전할
수
있도록
지원하기
위해 DB2에서는 CLPPlus라고
하는 SQL*Plus 호환
명령행
프로세서를
제공한다. 이
도구의
기능은
다음과
같다.
- SQL*Plus 호환
명령
옵션
- 변수
대체
- 열
형식
지정
- 보고
함수
- 제어
변수
DB2를 PL/SQL 및 Oracle SQL에
맞게
조정한
후에는
복잡한
마이그레이션
툴킷이
필요하지
않다. 대신 IBM Data Movement Tool을
사용하여
테이블, 패키지
또는
전체
스키마를 Oracle에서 DB2로
끌어
놓기만
하면
된다. 애플리케이션을 DB2로
이동하거나
동일한
소스가 DB2 및 Oracle에
대해
작동할
수
있도록
애플리케이션을
수정할
경우에도
예외에
대한
최소한의
조정만
수행하면
된다.
이를
수행하는
단계도
매우
간단하다.
1. 필요한
레지스트리
변수를
설정한다.
o db2set DB2_COMPATIBILITY_VECTOR=ORA
o db2set DB2_DEFERRED_PREPARE_SEMANTICS=YES
2. 데이터베이스
관리자를
다시
시작한다.
o db2stop
o db2start
3. Oracle 호환
데이터베이스를
작성한다.
o db2 create database mydb pagesize 32 K
o db2 update db cfg for mydb using auto_reval
deferred_force
4. IBM Data Movement Tool을
시작하고 Oracle 및 DB2 데이터베이스에
연결한다(그림 6 참조). 연결이
설정되면 DDL만
추출할지
또는 DDL과
데이터를
모두
추출할지
선택할
수
있다. 마지막으로
생성된
스크립트를
실행하여
직접
전개할지
또는
Interactive Deploy
창을
사용하여
작업을
수행할지
여부를
선택할
수
있다. (일반적인
대부분의
애플리케이션의
경우에는
두
번째
방법을
사용하는
것이
좋다.)
5. Interactive Deploy를
사용하여
원하는
스키마를 Oracle에서 DB2로
이동한다(그림 7 참조). Interactive Deploy 모드의
탐색
트리에 Oracle 데이터베이스에서
추출한
모든
오브젝트가
표시된다. 모든
오브젝트를
선택하고
전개
메뉴
옵션을
실행한다. 결과적으로
이
도구는
오브젝트를 DB2에
복사하고
진행
상태를
기록한다. 일부
오브젝트의
경우
전개되지
않을
수도
있으며
이러한
오브젝트에
대한
작업을
수행할
수
있는
옵션이
제공된다. 오브젝트를
선택하면 DDL과
함께 DB2에서
발생한
오류가
표시된다. 이제
내장
편집기를
사용하여
필요에
따라
정의를
수정하고
다시
전개할
수
있다. 이
작업의
목표는
예외를
기반으로
모든
오브젝트를 DB2로
대화식으로
이동하는
것이다.
DB2에
대한
호환성
평가하기
그렇다면
애플리케이션을 DB2 9.7에서
실제로
얼마나
쉽게
사용할
수
있을까? 당연한
말이겠지만
애플리케이션에
따라
다르다고
말할
수
있다. IBM에는 Oracle 데이터베이스의
모든
오브젝트를
분석하여
점수로
환산해서
보여
주는 MEET DB2라는
내부
도구가
있다. 이
도구는
기본적으로
사용할
수
있는
기능과
조정이
필요한
부분에
대한
보고서를
제공한다. IBM 계정
담당자
또는
영업
담당자는
이
유틸리티를
실행하여
현재 Oracle 데이터베이스와 DB2의
호환성에
대한
평가
결과를
빠르게
제공할
수
있다.
DB2 9.7 베타
단계를
진행했던 1년
동안
총 75만
행
이상의 PL/SQL 코드로
구성된
많은
애플리케이션을
자세히
분석한
결과
평균 90%-99%의
기본
전송
속도를
보여
주었다.
댓글 없음:
댓글 쓰기