Oracle Corporation、あるいは日本オラクル株式会社のこと。 また単に Oracle と言えば Oracle Database を指すことも多い。
Perl からは DBI用ドライバ DBD::Oracle を使用することで、接続できる。
インストール方法は「Instant Client10g」を参考にした。
Oracle Technology Network License のもとで配布されている、Oracle Database 10g の instant client を利用する。 30日間試用可能。
をダウンロード。
/usr/local/oracle の下に展開。シンボリックリンクをいくつか設定する。
mkdir /usr/local/oracle cd /usr/local/oracle unzip /tmp/instantclient-basic-linux32-10.1.0.3.zip unzip /tmp/instantclient-sdk-linux32-10.1.0.3.zip unzip /tmp/instantclient-sqlplus-linux32-10.1.0.3.zip cd instantclient10_1 ln -s . lib ln -s libclntsh.so.10.1 libclntsh.so ln -s libocci.so.10.1 libocci.so
環境変数を設定する
export ORACLE_HOME=/usr/local/oracle/instantclient10_1 export LD_LIBRARY_PATH=$ORACLE_HOME:$LD_LIBRARY_PATH
まずはソースアーカイブを展開。
tar ztvf DBD-Oracle-1.16.tar.gz cd DBD-Oracle-1.16
次に Makefile.PL を編集
5a6,7 > push(@ARGV, '-l'); > 279c281 < my @h_dirs = find_headers(); --- > #my @h_dirs = find_headers(); 283c285 < push @h_dirs, 'network/public'; --- > #push @h_dirs, 'network/public'; 289c291,292 < my $inc = join " ", map { "-I$OH/$_" } @h_dirs; --- > #my $inc = join " ", map { "-I$OH/$_" } @h_dirs; > my $inc ="-I/usr/local/oracle/instantclient10_1/sdk/include"; 725c728 < exit 0; --- > #exit 0; 1606a1610 > 1;
ヘッダファイルディレクトリ自動取得を止めて決め打ちにし、また Makefile.PL 実行時に -l を指定するようにする。 それから dh-make-perl がモジュール依存関係取得するため Makefile.PL を require した際に真を返さないでエラーになってしまうようなので、これも修正。
でパッケージ化。
rm META.yml # あると dh-make-perl が deb パッケージ名をつけ間違える? dh-make-perl --build --notest
deb パッケージ
libdbd-oracle-perl_1.16-1_i386.deb
ができあがるので、これを dpkg でインストール。
とりあえず、手近のサーバに接続して、簡単な select が動くことを確認。
いまのところ DBD::Oracle を使用するPerlプログラム実行時にも LD_LIBRARY_PATH を同様に設定しておく必要あり。
Makefile.PL 書き換え時に、
$opts{dynamic_lib}->{OTHERLDFLAGS} .= '-Wl,-rpath -Wl,/usr/local/oracle/instantclient10_1';
と -rpath を指定してみたが、
DBI connect('host=192.168.x.x;sid=dbsid','usr',...) failed: ERROR OCIEnvNlsCreate (check ORACLE_HOME and NLS settings etc.) at test.pl line 3 ERROR OCIEnvNlsCreate (check ORACLE_HOME and NLS settings etc.) at test.pl line 5.
というエラーが出て駄目。
Naney (なにい) です。株式会社MIXIで SNS 事業の部長をしています。
※本サイトの内容は個人的見解であり所属組織とは関係ありません。