sqlrelay with oracle instant client

  • 投稿日:
  • by

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

sqlrelay.png

この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;