DBD-Oracle with oracle instant client

  • 投稿日:
  • by

perlのDBIライブラリから、instant client経由でoracleにアクセスするためのDBD-Oracleのsetup方>法。

必要なファイル

  • tar xvfz DBD-Oracle-1.19.tar.gz

DBIについては、CPANなどであらかじめsetupしておく。

setup

% tar xvfz DBD-Oracle-1.19.tar.gz
% cd DBD-Oracle-1.19/
% vi Makefile.PL

ここで、Makefile.PLの以下の部分を修正する。

640,643c640,641
<     #my @h_dirs = find_headers();
<     my @h_dirs;
<     #my $inc = join " ", map { "-I$_" } @h_dirs;
<     my $inc = "-I//usr/local/oracle/10.2.0.3/lib/sdk/include";
---
>     my @h_dirs = find_headers();
>     my $inc = join " ", map { "-I$_" } @h_dirs;

makeの続き。

% export ORACLE_HOME=/usr/local/oracle/10.2.0.3
% export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
% perl Makefile.PL -m /usr/local/oracle/10.2.0.3/lib/sdk/demo/demo.mk
% make
% su
# make install

このままperlを実行すると、libstdc++.so.5がないというエラーが起こる。
glibcのバージョンの古いものでcompileされたどっかのモジュールが悪さをしているらしい。
こういうこともあろうかと用意されているRPMをinstall。

% su -
# rpm -i  compat-libstdc++-33-3.2.3-47.3.i386.rpm

perlのsample

#!/usr/bin/perl
 
 use DBI;
 
 $ds = "dbi:Oracle:host=dbserver;sid=KURO";
 $user = ''user01/pass01'';
 $pass = '''';
 
 $dbh = DBI->connect($ds, $user, $pass)
   or die "Cannot connect: " . $DBI::errstr;
 
 $sth = $dbh->prepare("select * from dual") or die "Cannot prepare: " .   
 $sth->errstr();
 
 $sth->execute() or die "Cannot execute: " . $sth->errstr();
 
 while ( @row = $sth->fetchrow_array() ) {
   print "@row\\n";
 }

$sth->finish();
$dbh->disconnect();