一分一秒真剣勝負!

Ruby, Railsなど。Web系の技術ネタを充実させたい・・が、そうなるかは分からない。

Ruby on RailsでOracleにtnsnames.oraを使用して接続する

 tnsnames.oraを使わないで接続する方法の反対で、tnsnames.oraを使って外部DBサーバに接続する方法。インスタントクライアントを使用するのでタダ。

実行環境

OS CentOS 5.4
Shell bash
Oracle関連ソフト 無償のパッケージのみを使用する
接続先DBサーバ 自サーバ以外で稼働している
インストール済み Ruby, Ruby on Rails
rubygems activerecord-oracle_enhanced-adapter, ruby-oci8

環境構築手順

 Instant Clientのダウンロードより、該当するパッケージをダウンロードし、インストールを行う。

$ wget http://download.oracle.com/otn/linux/instantclient/112010/oracle-instantclient11.2-basic-11.2.0.1.0-1.i386.rpm
$ wget http://download.oracle.com/otn/linux/instantclient/112010/oracle-instantclient11.2-devel-11.2.0.1.0-1.i386.rpm
$ sudo rpm -ivh oracle-instantclient11.2-basic-11.2.0.1.0-1.i386.rpm
$ sudo rpm -ivh oracle-instantclient11.2-devel-11.2.0.1.0-1.i386.rpm

 .bashrcの末尾に以下の環境変数を追加する。

export ORACLE_HOME=/usr/lib/oracle/10.2.0.4/client
export PATH=${ORACLE_HOME}/bin:${PATH}
export LD_LIBRARY_PATH=${ORACLE_HOME}/lib:${ORACLE_HOME}

 環境変数を反映し、gemをインストールする。

$ source ~/.bashrc
$ gem install activerecord-oracle_enhanced-adapter -v=1.2.3
$ gem install ruby-oci8 -v=1.0.7

 無料のインスタントクライアントだと、何故かtnsnames.oraを設置する場所が無いので作成する。

$ mkdir -p ${ORACLE_HOME}/network/admin
$ cp ~/tnsnames.ora ${ORACLE_HOME}/network/admin/ # ここにtnsnames.oraをコピー

 以上でRoRからOracleに接続出来るようになります。ちなみにdatabase.ymlの設定はこちら。database:の部分を「IPアドレスorホスト名/サービス名」のようなフォーマットで書くと、tnsnames.oraがいらなくなります。

development:
  adapter: oracle_enhanced
  database: スキーマusername: hogehoge
  password: hogehoge