Skip to end of metadata
Go to start of metadata

 

 

개요 


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

 

 

Icon

이 문서와 관련된 오류 및 개선사항은 기술지원포털 또는 기술지원센터로 문의주시기 바랍니다.

Icon

이 문서는 정보 제공을 목적으로 제공되며, 사전에 예고 없이 변경될 수 있습니다. 이 문서는 오류가 있을 수 있으며, 상업적 또는 특정 목적에 부합하는 명시적, 묵시적인 책임이 일절 없습니다.

이 문서에 포함된 Altibase 제품의 특징이나 기능의 개발, 발표 등의 시기는 Altibase 재량입니다.

Altibase는 이 문서에 대하여 관련된 특허권, 상표권, 저작권 또는 기타 지적 재산권을 보유할 수 있습니다.

 

 

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  에 따라서  구분한다.

    Icon

    unixodbc 와 odbc driver 의 bit 종류가 서로 일치하여야 한다. unixodbc를 64bit 로 컴파일 한 경우는 altibase odbc driver 도 64bit를 써야 하며 unixodbc가 32bit 인 경우는 altibase odbc driver도 32bit 전용 odbc driver를 사용한다.

  • 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로 사용할 것 

    Icon

    export CFLAGS=-DBUILD_LEGACY_64_BIT_MODE=1 를 사용하여 SQLLEN 을 4byte(32bit) 로 사용할 것을 적극적으로 권고한다. SQLLEN/SQLULEN 을 64bit(8byte) 로 사용시 unixodbc 와 Altibase 간의 값 전달에 오류가 발생하는 현상이 확인되었다.  

    이로 인해서 PHP/Python 에서 unixODBC의 SQLColAttribute 함수 사용시 인자값으로 전달된 칼럼 타입 구분값이 잘못된 값으로 계산되어 정상적으로 값이 조회되지 않는 현상이 발생할 수 있으므로 SQLLEN=4byte(32bit) 를 사용하도록 한다.

    또한 Altibase에서 제공하는 sqltypes.h 는 compile 시 별다른 옵션을 주지않으면 기본적으로 SQLLEN 이 32bit 가 되므로 응용 프로그램이 ALTIBASE sqltypes.h 를 사용할 경우 SQLLEN은 32bit 로 unixodbc manager로 전송하게 된다.

    그러나 unixodbc manager는 별도의 옵션을 주지 않을 경우 SQLLEN 을 64bit 로 사용하게 되어서 응용프로그램과 unixodbc manager간의 SQLLEN 길이 mismatch 로 인해서 ODBC 함수인 SQLfetch(), SQLMoreResult()  함수가 간헐적으로 잘못된 반환값을 전달하는 문제가 생기는 경우가 있다.

    이를 방지 하기 위해서도 unixodbc SQLLEN 을 32bit 만 사용할 것을 권장한다.

  • unixodbc 컴파일 bit 종류 선택
    컴파일 환경변수를 통해서 unixodbc 를 32bit  또는 64bit 로  선택적으로 컴파일할 수 있다.  64bit OS에서 default로 64bit 로 컴파일된다.    64bit OS에서 32bit 프로그램으로 unixodbc를 컴파일 하기 위해서는 아래와 같이  설정한다.


    각 플랫폼 별로 설정할 환경변수들은 아래와 같다.

    구분AIXHP-UXSUN

    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 에 최종적으로 설치된다.

Icon

prefix : unixODBC를 설치할 경로

enable-gui :  GUI ODBC Administrator를 build 여부 
enable-threads : The default is "yes" if thread-support is found on your machine. All modern Linuxes will have pthreads support in glibc so it is probably best to leave this to default.
enable-threads 옵션을 no로 설정할 경우  isql로 접속테스트시 아래 에러가 발생할 수 있으므로 enable-threads=yes 로 설정한다.
$ ./isql Altiodbc
./isql: symbol lookup error: /home/altibase_home/lib/libaltibase_odbc-64bit-ul64.so: undefined symbol: pthread_sigmask

 

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를 지정해서 사용해야 한다.

LongDataCompatONlob 데이타를 사용할 경우 ON 설정을 한다.

 

위의 SQLLEN의 길이정보는 다음과 같이 확인한다.

Icon

unixODBC에서 정의된 SQLLEN 사이즈에 따라서 사용해야 하는 odbc driver가 달라져야 한다. SQLLEN = (4byte/32bit) 인 경우는 odbc driver를 libaltibase_odbc-64bit-ul32.so 를 사용해야 한다. SQLLEN = ( 8byte/64bit) 인 경우는 libaltibase_odbc-64bit-ul64.so 를 사용한다.

 

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 를 남기도록 설정하는 방법은 아래와 같다.

  1. ODBCINST.INI 파일 설정

    odbc.ini 파일이 위치한 경로와 동일 디렉토리 경로에  odbcinst.ini 에  위와 같이 설정한다.   DSN 명은 반드시  [ODBC] 를 사용하여야 한다.   TraceFIle 설정값은 로깅할 내용이 기록될  파일의 위치와 파일명이다.  Trace = Yes/No 로깅 여부를 선택할 수 있다.


  2. unixODBC Trace 출력예

    trace.log  열어 보면 위와 같은 파일 내용을 확인할 수 있다. 

 

 

 

 

  • No labels