개요
Altibase가 제공하는 Unix용 ODBC driver를 이용하여 Unix용 ODBC Driver Manager와 연동하는 방법을 설명한다.
본 문서에서는 http://www.unixodbc.org/ 에서 제공하는 ODBC Driver Manager를 기준으로 설명한다.
본 문서는 장비 별 Native 컴파일러를 기준으로 하며 gcc/g++의 경우는 컴파일비트를 제외한 특별한 주의점은 없기 때문에 별도로 기술하지 않는다.
그리고, unixODBC의 설치 및 설치를 위한 제반 환경의 구축은 사용자가 해야 할 사항임으로 Altibase는 그 부분에 대한 기술지원 서비스는 원칙적으로 하지 않는다.
본 문서의 테스트 환경은 다음과 같다.
- Altibase : Altibase 6.3.1
- OS : Linux ( 2.6.32-504.el6.x86_64 )
- unixODBC : unixODBC-2.3.2
unixODBC Manager의 설치
unixODBC Manager를 사용하기 위해서는 해당 제품의 바이너리를 플랫폼에 맞게 생성해야 한다.
각 단계별로 필요한 부분을 설명한다. 컴파일러는 기본적으로 Native 컴파일러를 쓰는 것으로 가정하며 gcc/g++의 경우는 특별히 주의할 옵션이 없음으로 설명을 생략한다.
(단, 32/64bit의 생성 시 동일하게 컴파일 옵션은 주의해서 써야 한다.)
unixODBC Manager 다운로드
다음의 웹 주소에서 다운로드 받을 수 있다.
- http://www.unixodbc.org -> 화면 좌측의 Download 클릭 -> Download 버튼 클릭을 통해 소스를 다운 받도록 한다.
다운로드 받은 제품은 다음과 같은 형태의 압축 파일이다.
unixODBC Manager 설치
unixODBC의 설치를 위해서 다음과 같은 과정을 수행한다.
1. unixODBC 파일 압축 해제
unixODBC 압축파일을 적절한 경로에서 압축을 해제한다.
2. 컴파일용 환경변수 설정
사용할 ODBC Driver의 Bit 확인
확인된 비트를 기준으로 unixODBC Manager를 32/64bit 중 어떤 bit 로 컴파일 할지를 결정해야 한다. 여기서 주의할 점은 odbc driver 파일 이름에 포함된 ul32/ul64 가 odbc driver 의 파일 bit를 의미하지 않는 점이다.
ul32 는 SQLLEN=4byte(32bit) 를 사용하는 Driver 란 의미이고 ul64는 SQLLEN=8byte(64bit) 를 사용하는 Driver 라는 의미이다. 파일의 bit 타입은 위 명령어 실행 결과중에 ELF 64-bit , ELF 32-bit 에 따라서 구분한다.
SQLLEN 및 SQLULEN type의 크기 설정
SQLEN 과 SQLULEN type은 unixodbc function 의 파라미터 변수 type 선언시 사용된다. SIZEOF_LONG_INT 크기에 따라서 SQLEN 과 SQLULEN 의 크기가 32bit 일지 64bit 일지 결정된다.SQLLEN /SQLULEN 크기는 기본적으로 32bit OS에서는 32bit 이고 64bit OS에서는 64bit 로 선언된다. 64bit OS에서 SQLLEN/SQLULEN을 32bit(4byte) 로 사용하기 위해서는 아래의 컴파일 환경변수 선언을 하면 된다.
위와 같이 BUILD_LEGACY_64_BIT_MODE=1 로 설정된 경우 SQLLEN 은 32bit(4byte) 크기를 사용하도록 컴파일 된다.
SQLLEN /SQLULEN type 크기를 반드시 32bit로 사용할 것
unixodbc 컴파일 bit 종류 선택
컴파일 환경변수를 통해서 unixodbc 를 32bit 또는 64bit 로 선택적으로 컴파일할 수 있다. 64bit OS에서 default로 64bit 로 컴파일된다. 64bit OS에서 32bit 프로그램으로 unixodbc를 컴파일 하기 위해서는 아래와 같이 설정한다.
각 플랫폼 별로 설정할 환경변수들은 아래와 같다.구분 AIX HP-UX SUN CC
/usr/vac/bin/xlc
/opt/aCC/bin/aCC
/opt/SUNWspro/bin/cc
CXX
/usr/vacpp/bin/xlC_r
/opt/aCC/bin/aCC
/opt/SUNWspro/bin/CC
CFLAGS
LDFLAGS
-q64 (64bit)
+DD64 (64bit)
-xarch=v9 (64bit)
LD
/opt/SUNWspro/bin/CC
64bit 컴파일
환경변수에 OBJECT_MODE=64
CFLAGS에 "+DD64 -DBUILD_REAL_64_BIT_MODE" 추가한다.
LD_LIBRARY_PATH_64에 "/usr/lib/64" 및 "/usr/ucblib/sparv9"을 설정한다.
컴파일러의 경우는 사용자가 설치한 경로에 따라서 경로가 바뀔 수 있음으로 대상 장비에 설치된 경로는 사용자가 확인하여야 한다.
CFLGAS 및 LDFLAGS의 옵션도 32/64bit 컴파일 옵션에 따라 다르게 지정하도록 한다. (ELF class 오류가 발생할 수 있음)Linux 64bit OS에서 unixodbc를 32bit로 컴파일 하기 위한 컴파일 환경변수 예
위와 같이 선언한 후 이후의 컴파일 과정을 거치면 SQLLEN 크기가 4byte(32bit) 이며 실행파일의 bit 수가 32bit 인 unixodbc가 컴파일된다.
3. make를 위한 Configuration 과정
configuration을 수행한다. 여기서는 설치할 디렉토리 및 make과정에 필요한 몇 가지 옵션을 설정한다.
configuration 단계에서는 컴파일을 수행하기 위한 제반 환경을 체크하기 때문에 에러가 발생할 경우 필요한 바이너리 등은 직접 설치해야 한다.
unixODBC가 설치된 디렉토리는 prefix 인자값으로 설정된 경로에 설치된다. 예를 들어서 prefix=/home/unixODBC 일 경우 install 작업후에 unixODBC는 /home/unixODBC 에 최종적으로 설치된다.
4. 컴파일 수행
make 수행
AIX의 경우 운영체제의 패치레벨에 따라 컴파일이 오류가 나는 경우가 있는 것으로 추정되는 경우가 있다
make Install 수행
make 가 끝나면 make instal 수행을 통해서 컴파일이 완로된 바이너리 파일들이 설치 디렉토리에 설치 되도록 한다. 앞서 configuration단계에서 지정한 prefix디렉토리에 설치되기 때문에 사전에 해당 디렉토리에 대한 접근권한이 있어야 한다.정상 설치여부 확인
설치 후 정상적으로 library를 로딩하는지 확인한다.dltest 실행파일은 unixODBC가 설치된 디렉토리의 bin 아래에 위치한다. 위와 같이 정상적으로 unixODBC Manager가 설치되면 Altibase가 제공하는 unix용 ODBC driver에 대한 dltest가 정상적으로 성공해야 한다.
unixODBC Manager의 연동
실제 Altibase의 unixODBC Driver와 연동하기 위한 방법을 설명한다.
ODBC.INI 설정
사용자계정의 환경변수에 다음을 설정한다.
해당 설정은 ODBC driver의 접속정보를 기록하는 설정파일을 지정한 파일로 사용하겠다는 의미이다.
/home/unixODBC/etc/odbc.ini에는 다음과 같이 기록한 후 저장한다
odbc.ini 예제
- 주요 설정값
설정항목 | 설정값 | 설명 |
---|---|---|
Driver | libaltibase_odbc-64bit-ul64.so | Bit에 따라 제공되며 중요한 것은 ul64/32의 확인이다. 일부 ODBC Manager의 컴파일단계에서 SQLLEN에 대한 정의를 4byte/8byte로 달리하여 접속단계부터 오류가 날 수 있음으로 해당 ODBC Manager를 컴파일 할 때 SQLLEN을 어떻게 정의했는지를 확인해야 한다. (32/64bit의 구분이 아님) |
libaltibase_odbc-64bit-ul32.so | ||
libaltibase_odbc.so | libaltibase_odbc.so는 32bit용 unixodbc driver와 사용되는 odbc driver이다. altibase 32bit client package 에 포함되어 있는 파일이다. 정확하게는 파일의 비트를 사용자가 확인해서 써야 한다. (file <FileName>으로 확인) unixodbc 를 32bit 로 컴파일해서 사용하는 경우 이 Driver를 지정해서 사용해야 한다. | |
LongDataCompat | ON | lob 데이타를 사용할 경우 ON 설정을 한다. |
위의 SQLLEN의 길이정보는 다음과 같이 확인한다.
ODBC 연결 테스트
위과 같이 설정이 완료되면 unixODBC Manager가 설치된 디렉토리에서 다음과 같은 수행을 한다.
위와 같이 정상적인 접속 프롬프트가 보여지면 정상적으로 DB에 연결될 상태라고 볼 수 있다. AIX의 경우는 간혹 libodbcinst.so 의 파일이 LIBRARY_PATH에 잡히지 않거나 특이한 이유로 정상적으로 설치했음에도 불구하고 접속이 안 되는 경우가 있다.
libodbcinst.so.1 파일이 컴파일 한 소스디렉토리에 존재하는지 확인하고 이것에 대한 libodbcinst.so 가 존재하지 않을 경우 libodbcinst.so.1에 대한 심볼릭 링크를 걸어 LD_LIBRARY_PATH내에 위치시킬 경우 해결이 가능하다.
SUN의 경우는 LD_LIBRARY_PATH_64 에 unixODBC Manager의 lib경로를 설정해야 접속이 가능하다
ODBC Trace Log 설정
unixODBC 에서 호출하는 ODBC 함수를 파일로 로깅하여 문제 원인분석시 유용하게 활용할 수 있다. unixODBC가 trace log 를 남기도록 설정하는 방법은 아래와 같다.
ODBCINST.INI 파일 설정
odbc.ini 파일이 위치한 경로와 동일 디렉토리 경로에 odbcinst.ini 에 위와 같이 설정한다. DSN 명은 반드시 [ODBC] 를 사용하여야 한다. TraceFIle 설정값은 로깅할 내용이 기록될 파일의 위치와 파일명이다. Trace = Yes/No 로깅 여부를 선택할 수 있다.
unixODBC Trace 출력예
trace.log 열어 보면 위와 같은 파일 내용을 확인할 수 있다.