Rubyからオラクルに接続する(Linux,Windows両対応版!)
Rubyでオラクルに接続して、なにやらする方法です。
基本http://ruby-oci8.rubyforge.org/ja/index.htmlここ参考
今回の動き
今回はWindowsにサーバーを立てて、そこにWindows上で動くRubyからDBのテーブル読みと、Linuxで動くRubyからのDBのテーブル読みをやってみる
構成はWindowsはサーバで同一マシンでクライアントもやる。だからWindowsはローカルローカルのつながり
Linuxは別マシンでWindowsに接続にいくから、リモートの関係でやってます。
Windowsはxp pro LinuxはRed Hat Enterprise Linux 4だったかな
オラクルは10g
Windowsへのオラクルインストールはこちら参考・・・だけど別にダブルクリックだけなんで何したわけでもないですけど
http://yakinikunotare.boo.jp/orebase/index.php?Windows%A4%CB%A5%D5%A5%EA%A1%BC%A4%CE%A5%AA%A5%E9%A5%AF%A5%EB%A4%F2%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%EB
windowsクライアント準備
Oracle Database 10g Express Edition Downloads
http://www.oracle.com/technology/software/products/database/xe/index.html
クライアントをインストール
サーバを入れていればクライアントも同時に入っている。これはインストーラー一発。オラクルのクライアントが必要なのは、Rubyのモジュールがオラクルクライアントを使うからです。
オラクルへの接続モジュール導入(Windows編)
RubyForge: Ruby/OCI8: ファイルリスト
http://rubyforge.org/frs/?group_id=256
ここから、ruby-oci8-1.0.0-rc2-mswin32.rbをダウンロード、Windowsはバイナリ版が提供されているのでコンパイルいらず、楽チンです。
ダウンロードしてこんな感じでぶち込む
ruby ruby-oci8-1.0.0-rc2-mswin32.rb
聞かれますので
Copy OCI8.rb to c:/ruby/lib/ruby/site_ruby/1.8/DBD/OCI8 Copy oci8.rb to c:/ruby/lib/ruby/site_ruby/1.8 Copy oci8lib.so to c:/ruby/lib/ruby/site_ruby/1.8/i386-msvcrt OK? Enter Yes/No:
もちろんYes
Copying OCI8.rb to c:/ruby/lib/ruby/site_ruby/1.8/DBD/OCI8 ... done Copying oci8.rb to c:/ruby/lib/ruby/site_ruby/1.8 ... done Copying oci8lib.so to c:/ruby/lib/ruby/site_ruby/1.8/i386-msvcrt ... done OK
完了
早速接続してみる
Rubyから接続(Windows版)
このコードを書く前にWidnowsなら再起動する。
そうじゃないとパスを認識しないくて、実行時に
OCI.dll が見つからなかったため、このアプリケーションを開始できませんでした。アプリケーションをインストールし直すとこの問題は解決される場合があります。
なんて素敵なメッセージが表示されます
require 'oci8' myOra = OCI8.new("ゆ〜ざ〜めい", "ぱすわーど","localhost") myOra.exec('select * from hoge_tbl'){|r| puts r.join(',') }
こんなんです。
すばらしく簡単にSQLがぶち込めますね
あとは自由自在にどうぞ
Linux版オラクルクライアント準備
Windowsで出来たので気をよくしてLinux版に挑戦です。
同じといえば同じですね。
Linuxにオラクルのクライアントをぶち込みます。
今回はRedhat系に入れるのでrpmが提供されているので、これを便利に使わせてもらいます
http://otn.oracle.co.jp/tech/oci/instantclient/instantclient.html
ここからダウンロードします
めちゃくちゃ同意とか、登録とか書かないとダウンロードできません
この時点で使う気がうせます・・・
- Instant Clientパッケージ - 基本 :
- Instant Clientパッケージ - SDK :
この二つをダウソ
最新版にはrpmパッケージが用意されていないので少し古いバージョンを使います
いろいろ面倒なので、WindowsでダウンロードしてSCPとかで送り込みます
oracle-instantclient-basic-10.1.0.4-1.i386.rpm oracle-instantclient-devel-10.1.0.4-1.i386.rpm
rpm -i oracle-instantclient-basic-10.1.0.4-1.i386.rpm rpm -i oracle-instantclient-devel-10.1.0.4-1.i386.rpm
ここにインストールされる
/usr/lib/oracle/10.1.0.4/client/lib
なのでライブラリのサーチパスに追加する
LD_LIBRARY_PATH=/usr/lib/oracle/10.1.0.4/client/lib
※追記される場合は追記するように書いてくださいw
有効化
export LD_LIBRARY_PATH
Linux版Ruby接続モジュールコンパイルインストール
この入ったライブラリを元に、Ruby用のオラクル接続モジュールをコンパイルしてインストールします
先ほどのサーチパス追加はその意味嘘情報でした。
さっきのパスの設定は実行時にも必要になります
ここから
http://rubyforge.org/frs/?group_id=256
ruby-oci8-1.0.0-rc2.tar.gz
こいつを落とす
今回はまったく認証とかいろいろ書かなくていいのでwgetでゲッツ
wget http://rubyforge.org/frs/download.php/19956/ruby-oci8-1.0.0-rc2.tar.gz
ガッツり完了
展開
tar xvzf ruby-oci8-1.0.0-rc2.tar.gz
これができる
ruby-oci8-1.0.0-rc2
移動
cd ruby-oci8-1.0.0-rc2
コンパイルします
make
ずらずら出てmake完了
インスコ
make install
完了
Linuxクライアント→Windowsオラクルサーバ接続
次はこの状況で接続してみました
10gから簡易接続(EZCONNECT)というやり方が使えるっぽいので早速こいつでコネします
まず
Windowsサーバ側でドスっと、コマンド打ち込んでみます。サーバと一緒にインストールされているはずです
lsnrctl service
こんなのがズラズラでます
サービス"XEXDB"には、1件のインスタンスがあります。 インスタンス"xe"、状態READYには、このサービスに対する1件のハンドラがあります... ハンドラ: "D000" 確立:0 拒否:0 現行:0 最大:1002 状態:ready DISPATCHER <machine: 自分のコンピュータ名, pid: 5868> (ADDRESS=(PROTOCOL=tcp)(HOST=自分のコンピュータ名)(PORT=2025))
これで自分のコンピュータで受け付けているサービスがXEXDBってことがわかります。これを簡易接続パラメータに組み込んで接続すると、ソースはこうなる
require 'oci8' myOra = OCI8.new("ゆ〜ざ〜めい", "ぱすわーど","192.168.XXX.XXX:1521/XEXDB") myOra.exec('select * from hoge_tbl'){|r| puts r.join(',') }
うぉーまたも1日がかりの作業!ってかオラクルわかりにくいよ!慣れてないとダメダメです
実はこのrpmで入れたオラクルクライアントがwindows版よりも微妙に古いせいか、インスタント版なのかは知らんが微妙に性能が低いw
暗黙変換とかをやってくれなかったりします
↓このエントリーに関しての追加更新はたぶんこっちでやるので、満足されなかったかたはこちらもどうぞ
http://yakinikunotare.boo.jp/orebase/index.php?Ruby%2F%A5%AA%A5%E9%A5%AF%A5%EB%A4%CB%C0%DC%C2%B3%A4%B9%A4%EB
改訂新版 SQLポケットリファレンス (Pocket reference)
- 作者: 朝井淳
- 出版社/メーカー: 技術評論社
- 発売日: 2003/06/10
- メディア: 単行本
- 購入: 5人 クリック: 31回
- この商品を含むブログ (24件) を見る