2011年12月12日月曜日

[Rails3] 外部のOracle DBに接続する(その1:準備編)

実行環境:
centOS 5.7
ruby 1.9.3
Rails 3.1.3
ruby-oci8 2.0.6
activerecord-oracle_enhanced-adapter 1.4.0
Rails3で外部のOracle DBにアクセスします。
その1:準備編として Oracle Instant Client のインストール・設定をします。

Oracle Instant Clientをインストール

OracleのサイトからInstant Clientをダウンロードします。Instant ClientはORACLEが提供しているORACLE接続用クライアントソフトウェアです。外部のOracle DBに直接接続できたりします。DB接続の下地を作ってくれるのでRailsでもその恩恵をあずかろうというわけです。まずはInstant Clientのうちのsqlplusコマンドで目的のOracle DBに接続するのが今回の目標です。

以下の3つのRPMファイルをダウンロードします。無料ですが、ユーザー登録しないとダウンロードできません。
  • oracle-instantclient11.2-basic-11.2.0.2.0.i386.rpm
  • oracle-instantclient11.2-devel-11.2.0.2.0.i386.rpm
  • oracle-instantclient11.2-sqlplus-11.2.0.2.0.i386.rpm
の3つです。

Rails3でOracle DBに接続するだけであれば basic と devel だけでいいようなのですが、sqlplus で目的のDBに接続できるかのテストもしたいので sqlplus も入れておきます。
# rpm -hiv oracle-instantclient11.2-basic-11.2.0.2.0.i386.rpm
# rpm -hiv oracle-instantclient11.2-devel-11.2.0.2.0.i386.rpm
# rpm -hiv oracle-instantclient11.2-sqlplus-11.2.0.2.0.i386.rpm

環境変数の設定

Oracle用の環境変数の設定を行います。
/etc/profile.d/oracle.sh
export ORACLE_HOME='/usr/lib/oracle/11.2/client' export C_INCLUDE_PATH='/usr/include/oracle/11.2/client' export LD_LIBRARY_PATH='/usr/lib/oracle/11.2/client/lib'
これでsqlplus用にはOKです。※Passengerを使ってデプロイすると環境変数の設定がうまくできないないので後で別途設定をします。

ライブラリの設定

以下のように記載してファイルを保存します。
/etc/ld.so.conf.d/oracle.conf
/usr/lib/oracle/11.2/client/lib

ローカル・ネーミング・パラメータ(tnsnames.ora)の設定

ローカル・ネーミング・パラメータというのは、要するにOracle DBへの接続情報(ホストアドレスやポート番号、データベース名)をサービス名でタグづけして、接続する際に接続先の情報をサービス名で一発で指定することができる、というものです。
/etc/tnsnames.ora
サービス名 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = IPあるいはホスト名)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = サービス名) ) )
複数のOracle DBがある場合は、1つの tnsnames.ora ファイルの中に、上記の「サービス名 = (...)」を繰り返し記載することで複数のサービス名を定義できます。

SQL*Plusで接続のテスト

※上記の設定をしてから、設定を反映させるために一旦は端末を立ち上げなおして下さい。
$ sqlplus [ユーザー名]/[パスワード]@[サービス名]
でOracle DBに接続します。
SQL> select * from [テーブル名] where rownum <= 5;
SQL> select table_name from tabs;
などとSQL文を叩いてみます。

問題なく結果が返ってくれば接続の設定はOKです。

0 件のコメント:

コメントを投稿