오라클 호환성 기능은 DB2_COMPATIBILITY_VECTOR 레지스트리 변수에 값을 적용함으로서 오라클 문법/표현등을 사용하게 된다.
그러나 일부 기능은 데이터베이스를 생성하기 전에만 적용되는 것들이 있다.
Developerworks에 나온 문서(https://www.ibm.com/developerworks/mydeveloperworks/blogs/SQLTips4DB2LUW/entry/about_the_db2_compatibility_vector_and_what_not_to_say_at_the_dinner_table282?lang=en) 의 내용 및 기억을 더듬어보면
1. NUMBER
2. VARCHAR2
3. DATE
4. Oracle Data Dictionary
정도가 아닌가 싶다.
이 중 VARCHAR2를 세부적으로 들여다보면 특별한 기능을 포함하고 있다.
오라클이 공백과 NULL 값 구분을 하지 않기 때문에, DB2로 Data Migration을 하게 되면 이것은 문제가 된다. (DB2는 공백과 NULL을 구분하기에)
따라서 SQL 내에서 공백의 데이터를 처리하다보면 Oracle과는 다른 결과를 갖게 된다.
이 문제를 해결하기 위해서 VARCHAR2 (0x20) 값을 적용할 필요가 생긴다.
1. DB2에서 공백 값 테스트
$ db2 "values (COALESCE('','NULL'))" 1
1
1 $> db2 "values (bigint(''))" 1 SQL0420N Invalid character found in a character string argument of the function "BIGINT". SQLSTATE=22018 |
2. 오라클의 공백 값 테스트
SQL> select nvl('','NULL') as C1 from dual; C1 SQL> select nvl(' ','NULL') as C2 from dual; C SQL> select nvl(NULL,'NULL') as C3 from dual; C3 SQL> select to_number('') as C4 from dual; C4 |
4번째 SQL을 통하여 DB2에서는 “공백 값"이 숫자로 캐스팅되지 못하고 SQL0420N 오류가 발생했다.
오라클 호환성 (db2set DB2_COMPATIBILITY_VECTOR=20) 을 적용해도 “공백"값은 숫자형으로 형 변환되지 못한다.
이 경우 오라클처럼 “공백" 값을 숫자로 형변환 되도록 하기 위해서는 db2set DB2_COMPATIBILITY_VECTOR=20 를 적용하고 DB 재생성을 해야 된다.
$> db2set -all [i] DB2_COMPATIBILITY_VECTOR=20 $> db2 drop db sample $> db2stop $> db2start $> db2sampl $> db2 connect to sample $> db2 "values (bigint(''))" 1 |
위 문제는 사전 테스트를 통하여 “공백"처리 문제가 발생함을 확인하는 경우 VARCHAR2 호환성을 적용되어야 할 것이다.
그렇지 않다면 SQL 수정이 되어야 할 것이다.
다른 관점에서는 “해당 DB가 오라클 호환성을 적용하고 생성된 DB인지” 확인하는 방법이 될 수도 있다.
예를 들어 DB2 구성 작업에 많은 수의 인스턴스 및 DB 생성 작업 시, “오라클 호환성"을 적용하고 DB가 만들어져야 되는 상황이라면
오라클 호환성이 제대로 적용되어 생성된 것인지 확인하고 싶을 수 있다.
- 많은 반복 작업으로 작업 검증 절차를 빠뜨리거나
- 인스턴스 구성 후 자동으로 인스턴스가 실행 중인 상황에서, 호환성 적용하고 (인스턴스 재시작 없이) DB를 생성된 것은 아닌지
- 이미 구축된 DB2 환경에 (히스토리 없이 지원을 하게 되어) 오라클 호환성 관련된 문제가 발생한 경우 호환성 적용 시점이 언제인지 확인할 때
'Note' 카테고리의 다른 글
[이관] lobsinfile 및 tempfiles path (0) | 2014.01.27 |
---|---|
[이관] admin_cmd 프로시저를 이용한 이관 자동화 (0) | 2014.01.27 |
[개발] db2dclgn (선언부 생성기) (0) | 2013.12.17 |
[개발] db2jcc 와 db2jcc4 의 차이 (0) | 2013.11.28 |
[개발] Windows에서 ESQL 컴파일 및 Connect By Siblings (0) | 2013.11.28 |