IBM에서는 V9.5부터 DB2_COMPATIBILITY_VECTOR 라는 레지스트리 변수를 통하여 ORACLE의 특수 기능을 동일하게 사용하도록 지원하기 시작하였다.
ORACLE에서 DB2로 object들을 변환 작업할 때, 도움이 많이 되지만 DBMS가 다른 만큼 동일하게 작용하지 않는 부분이 존재한다. 개인적으로는 “오라클 호환성” 기능은 ORACLE 적인 SQL 등을 내부적으로 DB2 기능으로 mapping 혹은 변환시켜주는 기능이지 “Oracle SQL”을 직접 수행하는 기능은 아니라고 생각하고 있다.
보통은 DB2 V9.7에서 오라클 호환성을 사용하기 위해서는 레지스트리 변수를 DB2_COMPATIBILITY_VECTOR=ORA 로 설정을 한 후 DB를 생성하도록 안내를 한다. 면밀하게 살펴보지는 않았으나 ORACLE의 시스템 관리 뷰들의 생성 유무 차이가 있다.
일반적인 기능은 DB 생성 후에도 “오라클 호환성 변수”를 적용해도 (db2 restart는 필요함) 되는 것으로 알려져 있는데, 다음과 같이 “미묘한 차이”가 발생을 한다.
1. 오라클 호환성을 적용한 후 DB 생성한 경우
테이블 생성 > db2 "create table t1(c1 date, c2 timestamp)" 테이블 DDL 생성 > db2look -d test -e -z "INST97" -t "T1" 결과 확인 CREATE TABLE "INST97 "."T1" ( "C1" TIMESTAMP(0) , "C2" TIMESTAMP ) IN "USERSPACE1" ; 테이블 삭제 db2 drop table t1
오라클 호환성 제거 db2set DB2_COMPATIBILITY_VECTOR= db2stop db2start
테이블 생성 db2 "create table t1(c1 date, c2 timestamp)"
테이블 DDL문 생성 db2look -d test -e -z "INST97" -t "T1"
결과 확인 CREATE TABLE "INST97 "."T1" ( "C1" TIMESTAMP(0) , "C2" TIMESTAMP ) IN "USERSPACE1" ; db2 "select * from t1" C1 C2 ------------------- -------------------------- 2011-10-26-16.47.38 2011-10-26-16.47.38.548792 |
테스트 결과에서 보듯이, date 값이 timestamp(0) 으로 변환됨을 알 수 있다.
반면, 오라클 호환성을 적용하지 않고 DB를 생성한 경우 date 컬럼 속성은 변경되지 않았다.
2. 오라클 호환성을 적용하지 않고 DB 생성 후 오라클 호환성 적용한 경우
오라클 호환성 적용 db2set DB2_COMPATIBILITY_VECTOR=ORA db2stop db2start 테이블 생성 db2 "create table t1(c1 date, c2 timestamp)" 테이블 DDL 생성 db2look -d test -e -z "INST97" -t "T1" CREATE TABLE "INST97 "."T1" ( "C1" DATE , "C2" TIMESTAMP ) IN "IBMDB2SAMPLEREL" ; 데이터 값 조회 db2 "select * from t1" C1 C2 ---------- -------------------------- 2011-10-26 2011-10-26-16.57.49.963273 |
오라클 호환성을 적용하지 않고 DB 생성한 후에는 오라클 호환성 적용과 상관없이 date 형변환은 발생하지 않았다.
만일, 오라클 호환성을 DB를 생성한 상태에서 date 컬럼의 형 변환 막을 방법은 없을 것 같다. 다만 Application에서 값을 가공 처리할 수는 있을 것 같다.
개인적으로는 오라클 호환성을 적용한 경우, SQL 해석기를 DB2로 할 것인지, Oracle로 할 것인지 사용자가 선택할 수 있는 장치가 마련되어야 하지 않은가 하는 생각이 든다.
IBM 기술지원센터에 문의를 해 보지 않아서 bug 여부는 확인하지 않았다.
'Note' 카테고리의 다른 글
[관리] Application에서 실행 중인 SQL 확인 (0) | 2012.03.12 |
---|---|
[관리] Windows 작업스케줄러를 이용한 DB2 백업 자동화 (0) | 2012.02.22 |
[관리] DB2 설정정보 백업방법과 그 활용 (0) | 2012.01.09 |
[SQL] 집계함수 listagg() (0) | 2012.01.05 |
[관리] DB2가 사용하는 메모리 확인은 어떻게? (0) | 2011.12.26 |