본문 바로가기
Tibero/기타

PHP와 tbOCI(Tibero OCI) 연동

by dan.de.lion 2016. 6. 14.

PHP와 tbOCI(Tibero OCI) 연동


PHP와 tbOCI(Tibero OCI) 연동

테스트 환경

OS : OEL release 7.2
PHP : 5.6.11
Tibero : 5SP1 FS05
Oracle : 10.2.0.3(10g Release 2)

Tibero OCI 설치


Tibero OCI는 참 아이러니 한 명칭이다.
Tibero는 Tibero니깐 맞다.
하지만, OCIOracle Call Interface의 약자다.
Tibero지만 Oralce이다. 오묘한 명칭이다.
OCI와 관련해서는 해당을 참조하자.

  • Tibero OCI 설치라고 했지만 실제로는 TIbero Client 설치와 동일하다.
    (또는, Tibero 엔진 설치와 동일하다. 그게 그거다.)
  • 티맥스소프트 TECHNET에서 설치하고자 하는 엔진을 받을 수 있다.
  • 문제는 설치 파일별로 Tibero OCI 라이브러리인 libtboci.so파일이 없는 경우가 있다.
    (좀 더 정확하게는 들어있는 경우가 있다.)
  • 따라서, 해당 libtboci.so 라이브러리가 없는 경우 TMAX에 요청하는게 빠르다.
  • 정상적인 경우라면 $TB_HOME/client/lib/libtboci.so에 존재하게 된다.
$ gzip -dc tibero5-bin-5_rel_FS05-linux64-127068-opt-tested.tar.gz | tar -xvf - 

Oracle Client 설치


  • oracle 사이트 이용하여 서버버전(리눅스 64bit)에 맞는 Instant Client를 확보한다.
    (Instant Client가 아니어도 상관은 없다. 가벼워서 사용하기 좋다.)
  • zip 파일로 적당한 위치에 압축을 푼다.(본 테스트에서는 OS 계정의 HOME경로 아래로 설정하였다.)
  • 참고로 Oracle DBLINK에서 퍼왔다.
$ unzip instantclient-basic-linux-x86-64-10.2.0.3-20070103.zip
  • Instant Client Package 중 SDK가 추가적으로 필요하다. (동일한 사이트에서 받을 수 있다.)
  • OCI와 관련된 Header 파일들이 들어있다.
$ unzip instantclient-sdk-linux-x86-64-10.2.0.3-20070103.zip

PHP 설치


  • 당연한 이야기지만 PHP를 설치해야 한다.
  • PHP 사이트에서 받을 수 있다.
  • 버전은 크게 상관없는듯 하니 필요한 버전을 받도록 하자.(본 테스트에서는 5.6.11버전을 사용한다.)
  • 적당한 위치에 압출을 풀어주고 역시나 적당한 위치에 설치해 준다.
    (본 테스트에서는 $HOME/php5 경로에 PHP를 설치한다.)
$ gzip -dc php-5.6.11.tar.gz | tar -xvf -

$ cd php-5.6.11
$ ./configure --prefix=$HOME/php5  ##경로는 환경에 맞게 변경
$ make
$ make install

OS 계정 환경설정



  • Oracle client 및 Tibero client 경로, Library 경로 등을 추가한다.
  • ORACLE_HOMETIBERO_HOME 경로는 위의 각 Client 설치 경로가 된다.
  • 각 경로는 적당한 위치로 지정한다.(본 테스트에서는 OS 계정의 HOME경로 아래로 설정하였다.)
  • 본 테스트에서는 리눅스의 bash쉘을 사용하므로 $HOME/.bash_profile을 편집한다.
    • 다른 쉘을 사용하는 경우 해당 쉘의 환경파일을 편집하면 된다.(e.g. .profile 등)
    • OS에 따라 Library 경로 설정이 달라진다.(e.g. SHLIB_PATH, LIBPATH, LD_LIBRARY_PATH 등등)
  • 아래와 같은 내용을 추가해 준다.(해당 OS 계정으로 재접속시 적용된다. 또는 강제적용(. ~/.bash_profile)한다.)
  • PHP의 경우도 설치경로를 추가 해주어야 한다.
  • PHP_HOME 추가 및 PATH 등록이 필요하다.
  • 제품_HOME 환경변수를 설정하는 이유는 다음과 같다.(꼭 필요하지는 않을 수 있다.)

각 제품(Software)별로 경로를 단순화하고 환경설정 파일의 가독성을 높일 수 있다.
간혹 제품별로 기본적으로 제품_HOME 경로를 통해 구현되는 로직이 있기는 하다.
하지만 PATHLabrary 경로 설정을 통해 대부분은 해결된다.

(전략)
############## TIBERO ENV ##############
TB_HOME=$HOME/tibero5
export TB_HOME
LD_LIBRARY_PATH=$TB_HOME/lib:$TB_HOME/client/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
PATH=.:$TB_HOME/bin:$TB_HOME/client/bin:$PATH
export PATH

##################ORACLE ENV##################
ORACLE_HOME=$HOME/instantclient_10_2
export ORACLE_HOME
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME
export LD_LIBRARY_PATH

##############PHP ENV############
PHP_HOME=$HOME/php5
export PHP_HOME
PATH=.:$PHP_HOME/bin:$PATH
export PATH
  • $TB_HOME/client/bin/libtbOCI_info이 포함된 경우 해당 파일을 실행하면 tbOCI 버전을 알 수 있다.
  • profile 적용 후에 한다.
$ $TB_HOME/client/bin/libtbOCI_info

Get tbOCI Build Version Success!!!
Build Version: 5sp1 r126804
  • 설정이 정상적인 경우 PHP 버전도 확인 가능하다.
$ php -v

PHP 5.6.11 (cli) (built: Jun 14 2016 17:43:01) 
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies

라이브러리 설정


  • 다음단계를 위해 Tibero Client 라이브러리 경로에 Oracle Client의 일부 파일의 심볼릭 링크 파일을 생성해준다.
  • 또한, libtboci.so파일을 libclntsh.so.10.1로 심볼릭 링크를 걸어준다.
    (tbOCI라는 이름만큼 변태적인 단계다.)
  • Tibero의 라이브러리를 Oracle의 라이브러리처럼 인식시키는 단계다.
$ cd $TB_HOME/client/lib

$ ln -s libtboci.so libclntsh.so.10.1
$ ln -s libclntsh.so.10.1 libclntsh.so
$ ln -s $ORACLE_HOME/libnnz10.so libnnz10.so
  • SDK의 Header 파일들도 $TB_HOME/client/include로 복사해준다.
$ cp $ORACLE_HOME/sdk/include/* $TB_HOME/client/include/.

oci8 설치


  • oci8 설치가 필요하다.
  • PHP 확장 모듈인것 같다.
    (자세한건 해당페이지를 참조하자. 나도 모른다는 말이다.)
  • pecl이란 명령을 통해 받을 수 있으며 phpize 명령으로 설치하게 된다.
  • 설치전에 OCI관련 함수(oci_connect())를 호출하면 정의되지 않았다고 나온다.
$ php -r "oci_connect();"

Fatal error: Call to undefined function oci_connect() in Command line code on line 1
  • pecl명령으로 oci 확장 모듈을 다운받는다.
$ pecl download oci8-2.0.8

downloading oci8-2.0.8.tar ...
Starting to download oci8-2.0.8.tar (1,608,704 bytes)
.................................done: 1,608,704 bytes
File /home/bach/oci8-2.0.8.tar downloaded
  • oci 확장 모듈을 적당한 위치에 풀어 phpize 명령으로 PHP 확장모듈을 위한 빌드환경을 만든다.
  • oci8을 설치한다.
$ tar -xvf oci8-2.0.8.tar
$ cd oci8-2.0.8
$ phpize
Configuring for:
PHP Api Version:         20131106
Zend Module Api No:      20131226
Zend Extension Api No:   220131226

$ ./configure --with-oci8=shared,instantclient,$TB_HOME/client/lib
$ make all install
  • PHP의 ini파일에 oci8 관련 설정을 추가한다.
$ php --ini

Configuration File (php.ini) Path: $HOME/php5/lib
Loaded Configuration File:         (none)
Scan for additional .ini files in: (none)
Additional .ini files parsed:      (none)

$ echo 'extension=oci8.so' >> $HOME/php5/lib/php.ini

$ php --ini
Configuration File (php.ini) Path: $HOME/php5/lib
Loaded Configuration File:         $HOME/php5/lib/php.ini
Scan for additional .ini files in: (none)
Additional .ini files parsed:      (none)

PHP + OCI 설치 확인


  • 정상적으로 설치가 되었는지 확인해보자.
$ php -i | grep oci

oci8
oci8.default_prefetch => 100 => 100
oci8.events => Off => Off
oci8.max_persistent => -1 => -1
oci8.old_oci_close_semantics => Off => Off
oci8.persistent_timeout => -1 => -1
oci8.ping_interval => 60 => 60
oci8.privileged_connect => Off => Off
oci8.statement_cache_size => 20 => 20

$ php -m | grep oci

oci8
  • 설치후 oci_connect() 함수를 호출하면 파라미터가 부족하다고 나온다.
$ php -r "oci_connect();"

Warning: oci_connect() expects at least 2 parameters, 0 given in Command line code on line 1

'Tibero > 기타' 카테고리의 다른 글

Tibero Session Kill  (0) 2016.09.06
Tibero To Tibero DB Link  (0) 2016.06.14
Tibero To MS-SQL DB Link  (0) 2016.06.03
Tibero To Sybase DB Link  (0) 2016.06.03
Tibero to Oracle DB Link(Local Gateway)  (0) 2016.06.03

댓글