Oracle 에서 DB2로의 DBlink 연결을 위해서 Gateway for ODBC 를 이용하여 구성하였는데.
테스트 하다보니. 문제점이 발견하여 찾아서 해결한 내용이다.
DB2 에서
insert into test values(1) 후 dblink로 조회 -- 정상적으로 oracle 에서 조회됨
insert into test values(2) 후 dblink로 조회 -- ORA-28528 발생
또, 문자 Type 입력의 경우
'테스트'
'가나다'
'TEST'
를 순서대로 입력후 조회해보면 '테스트', '가나다' 만 보여짐. count(*) 해보면 3건을 출력됨
initDG4ODBC.ora 에
HS_FDS_SQLLEN_INTERPRETATION=32 파라미터 추가후 위의 문제 모두 해결됨
Datatype Conversion Error ORA-28528 Using Dg4odbc With DB2, Informix, MySQL or SQL*Server 64-bit ODBC Drivers on Unix Platforms (Doc ID 554409.1)
Cause
The DB2, Informix, MySQL or SQL*Server 64-bit ODBC driver being used from whichever vendor handle the SQLLEN value as a 32-bit value instead of a 64-bit value.
In the Microsoft 64-bit ODBC documentation SQLLEN is defined as INT64 with 8 bytes and the
DG4ODBC gateway is using the same definition as Microsoft.
Examining the data returned on a SQLFetch() shows that the drivers are returning SQLLEN as 4 bytes.
Solution
C. For 11.2
In 11.2 there is a new parameter which allows 64bit drivers to follow the 32bit standard so they do not need to be re-compiled - HS_FDS_SQLLEN_INTERPRETATION.
To allow a 64-bit driver to follow the 32-bit standard add the following to init.ora -
HS_FDS_SQLLEN_INTERPRETATION=32
To follow the 64-bit standard add -
HS_FDS_SQLLEN_INTERPRETATION=64