徒然なるままに、日ぐらしP/Cに向ひて――
メインメニュー
ブログカレンダー
2013年 2月
« 1月   3月 »
 12
3456789
10111213141516
17181920212223
2425262728  
WordPress カテゴリ一覧
WordPress 検索


富士カメラ5

Kestrel とは、チョウゲンボウのことです。ハトくらいの小さな猛禽類、つまりワシの仲間で、ハヤブサに似ています。
チョウゲンボウにはホバリングという特技があります。よく農地の上空で空中に停止している姿が見られます。小さいけれどカッコイイ、そして最近は都会でも繁殖している頼もしいタカです。
このサイトのURLは、そんなチョウゲンボウから名前を借りました。

2013年2月5日(火曜日)

RoR から Oracle DB に接続する

カテゴリー: - flyman @ 21時50分48秒

拠ん所なき事由に依って、CentOS6.3上のRuby on Railsから既存の Oracle DB にアクセスすることになった。
その足跡を備忘録として書いておく。

flyman はOracle を知らない。で、取り敢えずは DB2/400 に接続しているのと同様の方法、すなわち、 DBI+ODBC の環境を構築することにしようとググッてみたところ、ruby-oci8 なるインターフェースがあるらしいと判った。これは単独でも、DBIと組み合わせても使えるようなので、これもインストールすることにした。

Oracle のドライバを入手する。

ドライバはOracleのサイトからDL出来るが、ユーザーアカウントが必要なので、無い人はアカウント登録をしておく。無料だ。
使用するのは、『Instant Client』ドライバだ。
Instant Clientのダウンロードサイトから、

instantclient-basic-linux-11.2.0.3.0.zip (またはinstantclient-basiclite-linux-11.2.0.3.0.zip)
instantclient-odbc-linux-11.2.0.3.0.zip
instantclient-sdk-linux-11.2.0.3.0.zip
instantclient-sqlplus-linux-11.2.0.3.0.zip

(現在の最新バージョン)を落としてくる。1番目は必須、2番目は、ODBC用、3番目は ruby-oci8 に必要、4番目はインタラクティブなツール SQL*Plus を使わなければ不要だ。今回は32bitバージョンを使用する。
これらにはそれぞれ、

oracle-instantclient11.2-basic-11.2.0.3.0-1.i386.rpm
oracle-instantclient11.2-odbc-11.2.0.3.0-1.i386.rpm
oracle-instantclient11.2-devel-11.2.0.3.0-1.i386.rpm
oracle-instantclient11.2-sqlplus-11.2.0.3.0-1.i386.rpm

というRPMパッケージも用意されている。こちらでも良いかも知れないが、flyman の環境では RPM でうまく行かず、ZIP バージョンでやり直してうまく行った。

落としてきた ZIP ファイルを同じディレクトリに解凍する。

flymanはインストール先を
/opt/Oracle
とした。
flyman は Windows 環境で解凍して CentOSにコピーしたのだが、実行ファイルに実行属性が付いていなかったので、実行属性を付けた。
ここで、後でインストールする OCI8 のために、

# cd /opt/Oracle
# ln -s libclntsh.so.11.1 libclntsh.so

と、リンクを張っておく。

環境変数を設定する。

/etc/profile.d/oracle.sh ファイルを作り、以下を記入する。

export ORACLE_HOME=/opt/Oracle
export LD_LIBRARY_PATH=$ORACLE_HOME
export TNS_ADMIN=$ORACLE_HOME
export PATH=$PATH:$ORACLE_HOME
export NLS_LANG=JAPANESE_JAPAN.UTF8

NLS_LANG は適宜設定する。

ODBCの設定ファイルを書く。

設定ファイルは、
/etc/odbcinst.ini
/etc/odbc.ini
の二つだ。1から手で書く必要はない。
ODBCの設定を追加するシェルスクリプトが用意されている。

# cd /opt/Oracle
# ./odbc_update.ini.sh /

実行時のパラメータ DriverManagerHome は “/” とする。
また、~/.odbc.ini が出来ているので、内容を /etc/odbc.ini (システムDSN)に追加する。

ここで、[]で囲われたDNS名とDSN=部分は、使用するDSN名称に変更する。
また、ServerNameも環境に合わせて書き換える。
ServerName = サーバー名:ポート/サービス名
といった具合だ。
ServerName = 192.168.0.100:1521/orcl
みたいな感じ。
なお、GUIのDSNツールは使えなかった。

tnsnames.ora を書く。

このファイルの置き場所は環境変数 TNS_ADMIN で指定した場所だ。今回は /opt/Oracle 直下に作る。内容は、

MyOracle =
 (DESCRIPTION =
  (ADDRESS_LIST =
   (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.100)(PORT = 1521))
  )
  (CONNECT_DATA = (SERVICE_NAME = orcl))
 )

こんな感じだ。書き方はググれば色々出てくるだろう。

/etc/hosts に、自分自身を追記する。

127.0.0.1 localhost localhost.localdomain HOST名 HOST名.ドメイン名

これがないと、sqlplusで ORA-21561 エラーになる。――ならないこともあるみたい。ややこしい。

ruby-oci8 を落としてくる。

場所は、冒頭のリンクから辿れる。flyman はソースから、
make
make install
した。

以上でインストールと設定は完了だ。

接続テストをする。
isqlなら、

isql MyOracle ユーザー名 パスワード -v

SQL*Plusなら、

sqlplus ユーザー名/パスワード@サーバー名:ポート/サービス名
または
sqlplus ユーザー名/パスワード@MyOracle

で、接続出来ればメデタシメデタシだ。
ruby でも試してみよう。test.rb を以下のように書いて、ruby test.rb してみる。

require “oci8″

print “Using OCI8\n”

begin
 conn = OCI8.new("ユーザー名”,"パスワード”,"192.168.0.100:1521/orcl")
 cursor = conn.exec("select VALUE from NLS_DATABASE_PARAMETERS where PARAMETER=’NLS_CHARACTERSET’")
 puts “Server Character: ” + cursor.fetch()[0]
 cursor.close
ensure
 conn.logoff if conn
end

DBI+ODBC のテストプログラムも書いてみる。

require “rubygems”
require “dbi”

print “Using DBI+ODBC\n”

begin
 conn = DBI.connect("DBI:ODBC:MyOracle”,"ユーザー名”,"パスワード")
 row = conn.select_one("select VALUE from NLS_DATABASE_PARAMETERS where PARAMETER=’NLS_CHARACTERSET’")
 puts “Server Character: ” + row[0]
ensure
 conn.disconnect if conn
end

いやはや、こうして書けばなんと言うこともないのだが、一週間も格闘してしまった。ちなみに、Windows版のInstant Client にも多々問題があったが、linuxよりは繋がりやすかった。

関東地方、明日はまた雪の予報。すでに午前中の電車の間引きが決定している。気が重いねぇ。


TrackBacks

このコメントのRSS

TrackBack URL : http://www.kestrel.jp/modules/wordpress/wp-trackback.php/876

  1. HVAC Repair
    flyman のおもちゃ箱 - PhotoLog : RoR から Oracle DB に接続する by flyman

    Trackback by maytag electric dryer repair — 2018年7月20日(金曜日) @ 03時23分12秒

コメント

_CM_NOTICE

21 queries. 0.022 sec.
Powered by WordPress Module based on WordPress ME & WordPress

ヘッドライン
nikkansports
IT Pro
レスポンス
テーマ選択

(4 テーマ)