sqlrelay with oracle instant client
 CGIなどからDBMSに接続する場合、あまりに大量の要求がくると、DBMSのコネクションを食い尽くして
しまう。
そのため、client processから直接DBMSにコネクションせず、途中にコネクションの整理をする中継>デーモンを置く「コネクションプーリング」という技法が必要となる。
この実装例が「sqlrelay」である。

このsqlrelayをphp client <->Oracle仕様でsetupする。
必要なファイル
- sqlrelay-0.39.4.tar.gz
 - rudiments-0.31.tar.gz
 
setup
まずは、必要なクラスライブリrudimentsのsetup。
% tar xvfz udiments-0.31.tar.gz % cd rudiments-0.31 % ./confiure % make % su % make install
そして、sqlrelayのsetup。
% tar xvfz sqlrelay-0.39.4.tar.gz % cd sqlrelay-0.39.4 % ./configure --disable-mysql --disable-postgresql --disable-sqlite \\ --disable-sybase --disable-odbc \\ --with-oracle-instantclient-prefix=/usr/local/oracle/10.2.0.3/lib % make % su # make install
phpといいながら、perlにも対応している。
***** Summary ***********************************************
Version      : 0.39.4
 
APIs         : C/C++       yes           Perl       yes
               Python      no            Ruby       no
               PHP         yes           Java       no
               TCL         no            Zope       no
  
Connections  : Oracle8     dynamic       MySQL      no
               PostgreSQL  no            SQLite     no
               FreeTDS     no            Sybase     no
               ODBC        no            DB2        no
               Firebird    no            MDB Tools  no
*************************************************************
設定
「/usr/local/firstworks/etc/sqlrelay.conf」にDBMSの環境を設定する。
識別子(ID)「dbrelay」でDBMSサーバ名「dbserver」、DBMSサービス名「KURO」にuser01/pass01でログインする設定。
<?xml version="1.0"?>
<!DOCTYPE instances SYSTEM "sqlrelay.dtd">
 
<instances>
   <!-- Regular SQL Relay Instance -->
   <instance id="dbrelay" port="9000" socket="/tmp/example.socket" dbase="oracle8" connections="3" maxconnections="15" maxqueuelength="5" growby="1" ttl="60" endofsession="commit" sessiontimeout="600" runasuser="nobody" runasgroup="nobody" cursors="5" authtier="listener" handoff="pass" deniedips="" allowedips="" debug="none" maxquerysize="65536" maxstringbindvaluelength="4000" maxlobbindvaluelength="71680" idleclienttimeout="-1" maxlisteners="-1" listenertimeout="0" reloginatstart="false">
       <users>
           <user user="user01" password="pass01"/>
 
       <connections>
           <connection connectionid="KURO" string="user=user01;password=pass01;oracle_sid=dbserver/KURO;" metric="1" behindloadbalancer="no"/>
       </connections>
   </instance>
</instances>
起動と終了
起動の確認
# export PATH=/usr/local/firstworks/bin:$PATH # /usr/local/firstworks/bin/sqlr-status -id 識別子
起動
# export PATH=/usr/local/firstworks/bin:$PATH # /usr/local/firstworks/bin/sqlr-start -id 識別子
終了
# export PATH=/usr/local/firstworks/bin:$PATH # /usr/local/firstworks/bin/sqlr-stop -id 識別子
フロントエンド(sqlplus相当)
% export PATH=/usr/local/firstworks/bin:$PATH
% /usr/local/firstworks/bin/sqlrsh -id 識別子
SQLRShell - Version 0.22
       Connected to: localhost:9000 as user01
 
       type help; for a help.
0>quit;