Archive for the ‘Oracle Database’ tag
Oracle DatabaseとphpでOPAL環境を構築する
昨日はOracle Database XEの紹介とインストール手順を解説しました。
今日はそのXEを使ってOPAL環境を構築したいと思います。OPALとはかなりマイナーな略式名称ですが、Oracle Database, PHP, Apache, Linuxで構成するWeb+DBのスタックのことです。いわゆるアレです、LAMP(Linux, Apache, MySQL, PHP)みたいなもんです。というか平たく言えばパクリでしょう。*ちなみに「P」はPHP,Python,Perlのどれか。
昨日まででLinuxとOracle Databaseのインストールは済んでいるという前提で、その同じマシンにApacheとPHPをインストール/セットアップしていきましょう。それぞれ今日現在で最新のhttpd-2.2.10とphp-5.2.8を使用します。
まずはApacheですがこれは簡単、というかとくにOPALだからといって特別な手順やオプションはありません。普通にコンパイルしてインストールします。
# tar xvfj httpd-2.2.10.tar.bz2 # cd httpd-2.2.10/ # ./configure ¥ --prefix=/srv/httpd ¥ #適当に置き換えてください --enable-so #多分デフォルト有効なのでいらないと思われますが一応 # make # make install
終了ーー。では次にphpのインストールへ。
# tar xvfj php-5.2.8.tar.bz2 # cd php-5.2.8/
次のコンフィグが結構ミソです。phpからOracleに接続するにはOCI (Oracle Call Interface) を使うのが一般的かつ、性能面、機能面で最適な方法と言われています。ただしこれにも2種類あって、PDO_OCIと普通のOCI8というのがあります。実際、よりup-to-dateなドライバはOCI8になります。PDO_OCIの方はMySQLやPostgreSQLに接続する際でも統一されたインターフェースを提供してくれるいわゆる抽象化ドライバです。なので一見こいつをつかっといた方が後でDBを切り替えることがあった際に便利なのですが、残念ながら最近このPDO_OCIはメンテナンスされておらず、OCI8で実装されているBugFixや機能拡張などが反映されていません。なのでOracle一筋な方は迷わずOCI8を選択してください。そしてこのOCI8を使用するにはコンフィグ時に--with-oci8オプションを指定しておく必要があります。ちなみにPDO_OCIの方は--with-pdo-ociとします。一応こいつも入れておいてやろう。
# ./configure ¥ --prefix=/srv/php ¥ #適当に置き換えてください --with-apxs2=/srv/httpd/bin/apxs ¥ #Apacheをインストールした場所によって置き換えてください --with-oci8=shared,/usr/lib/oracle/xe/app/oracle/product/10.2.0/server ¥ # $ORACLE_HOMEを指定します。 --with-pdo-oci=shared,/usr/lib/oracle/xe/app/oracle/product/10.2.0/server ¥ # 同じく$ORACLE_HOMEを指定します。 --with-gd ¥ --with-gettext ¥ --disable-short-tags ¥ --enable-pdo ¥ --enable-mbstring ¥ --enable-exif ¥ --enable-sigchild
これでOK。ビルドしていきます。
# make # make install
これでバイナリがインストールされました。次に設定ファイルを作成します。テンプレートがあるのでそれをコピーして少しだけ編集(追記)します。
# cp php.ini-recommended /srv/php/lib/php.ini # vi /srv/php/lib/php.ini extension_dir=/srv/php/lib/php/extensions/no-debug-non-zts-20060613 extension=oci8.so
あと、httpd.confにも少し手を入れます。以下を最後の方にでも追記してください。
# vi /srv/httpd/conf/httpd.conf AddType application/x-httpd-php .php AddType application/x-httpd-php .phtml AddType application/x-httpd-php-source .phps
これでOKです。なお、今更ですがSE Linuxとかが有効になっているとphpのモジュールをロードする際にエラーになっていまうので/etc/selinux/configでSELINUX=disabledにしておいてください。もうこれで使える状態にあるのですが、実はこのphpのソースにバンドルされているOCI8は結構古かったりします。気持ち悪いので最新版にアップデートしておきたいところです。というわけでPECLから最新のソースをとってきます。
# wget http://pecl.php.net/get/oci8-1.3.4.tgz # tar xvfz oci8-1.3.4.tgz # cd oci8-1.3.4/ # /srv/php/bin/phpize # ./configure --with-oci8=shared,/usr/lib/oracle/xe/app/oracle/product/10.2.0/server # make # make install
これでばっちりです。最新のモジュールが/srv/php/lib/php/extensions/no-debug-non-zts-2006061にインストールされました。あとはapachectl startするだけです。ちなみに一応ちゃんとOCI8がインストールされているか確認するためにphpinfo()を活用しましょう。Apacheのドキュメントルートに以下の様にファイルを作成します。
# vi /srv/httpd/htdocs/phpinfo.php <?php phpinfo(); ?>
そしてこのサーバにアクセスしましょう。
http://あなたのIPアドレス/phpinfo.php
するとこんな画面が出てくるはずです。

下の方にスクロールしていき・・・

ありましたね。よかったよかった。ひとまずこれでセットアップは完了です。
ちなみに今回のようなOPAL環境の構築について、佐藤さんがいち早く良いドキュメントを紹介されています。
http://www.oracle.com/technology/tech/php/pdf/underground-php-oracle-manual.pdf
英語にはなってしまうのですがこれははっきり言ってかなりの良書です。Oracle好きだけどJavaはちょっと、という僕のような人にはたまらない感じです。
Oracle Database XEをインストールする
Oracle Databaseにも実はフリーエディションがあります。日本では全く露出していないのであんまり知られていません。その名もOracle Database Express Edition、略してXEです。
ライセンス料が発生するStandard Edition, Enterprise Editionと比べるといくつか制限があります。
- プラットフォームはLinuxかWindowsの32bit
- データは4GByteまで
- メモリは1Gbyteまで
- CPUは1ソケットまで
しかしながら開発環境はもちろん、ある程度の環境であれば十分使えるデータベースです。なにせデータベースそのものは上位のエディションとまったく同じコードベースですから。それではインストールしましょう。
OSはOracle Enterprise Linux 5 – i386でいきます。ちなみにswapが1024MByte確保されてないとインストーラにはじかれてしまいますのでご注意を。あと、事前に名前解決だけご注意を。hostnameコマンドをうって、そのホスト名が/etc/hostsとかで正しいIPに解決されることを確認しておいてください。さてインストーラですが、コマーシャル版はOUI (Oracle Universal Installer)でインストールするのが定石ですが、XEはRPMで提供されるためrpmコマンド一発でインストールできます。
[root@local]# rpm -ivh oracle-xe-univ-10.2.0.1-1.0.i386.rpm Preparing... ########################################### [100%] 1:oracle-xe-univ ########################################### [100%] Executing Post-install steps... You must run '/etc/init.d/oracle-xe configure' as the root user to configure the database.
うーむ、こういうシンプルさ、好きです。
そしてマネージャやリスナーのポート設定、アカウント設定等の初期設定をするために上記メッセージ通りにoracle-xe configureを実行します。
[root@local]# /etc/init.d/oracle-xe configure Oracle Database 10g Express Edition Configuration ------------------------------------------------- This will configure on-boot properties of Oracle Database 10g Express Edition. The following questions will determine whether the database should be starting upon system boot, the ports it will use, and the passwords that will be used for database accounts. Press <Enter> to accept the defaults. Ctrl-C will abort. Specify the HTTP port that will be used for Oracle Application Express [8080]: Specify a port that will be used for the database listener [1521]: Specify a password to be used for database accounts. Note that the same password will be used for SYS and SYSTEM. Oracle recommends the use of different passwords for each database account. This can be done after initial configuration: Confirm the password: Do you want Oracle Database 10g Express Edition to be started on boot (y/n) [y]:yStarting Oracle Net Listener...Done Configuring Database...Done Starting Oracle Database 10g Express Edition Instance...Done Installation Completed Successfully. To access the Database Home Page go to "http://127.0.0.1:8080/apex"おぉ。これでインストール終わりですか。
ちなみにこのメッセージ、みたことある人もいらっしゃるかも。実はOracleVM ManagerはデータストアとしてこのXEを使っているのです。なのでOracleVM Managerをインストールするときに同じようなメッセージが表示されます。さて、インストールが済んだら管理画面を開いてみよう。これはXEをインストールしたホスト上のブラウザで以下のURLを参照することでアクセスできます。
http://127.0.0.1:8080/apexデフォルトではローカルホスト上からしかアクセスできないことに注意。これは簡単にリモートからも操作可能に設定できます。
参考までにテーブルを作る画面。
このようにXEではApplication ExpressというEnterprise Managerとは別の管理プログラムがついてきます。これもでもなかなか使えますよ。
あと、$ORACLE_HOME/binにoracle_env.shというのがあります。こいつはOracle固有の環境変数を設定してくれるスクリプトになっています。
. $ORACLE_HOME/bin/oracle_env.shとしておくもよし、.bash_profileに適当に書き写しておくもよし、です。
PythonでOracle Databaseに接続する(cx_Oracleで)
何か半年前くらいに下書きしてたエントリを発見したのでPublishしてみることに。多分途中で切れてる気がしますがまたあとで修正すればいいや。それが気楽な個人ブログ。
pythonスクリプトからOracle Databaseに接続するための実装(モジュール)はいくつかあるようですが、検索した感じでいわゆるデファクトっぽかったのがcx_Oracleというモジュール。ドキュメント、ダウンロード先等は下記を参照ください。
僕はソースをとってきてインストールすることにしました。OSはOracle Enterprise Linux 5.1。Redhat EnterpriseLinux 5.1等でも変わらないと思います。コンパイルにはソフトウェア要件としてpython-develとOracle Databaseのクライアントライブラリがインストールされている必要があります。そしてそのライブラリがLD_LIBRARY_PATHに含まれていることが必要です。
# set | grep LD_LIBRARY_PATH等として確認し、入っていいなければ追加しておきます。
# export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/PATH/TO/LIBまずtarボールを/opt等に保存して展開。
# tar xvfz cx_Oracle-4.4.tar.gz # cd cx_Oracle-4.4/そしてビルド&インストール。
# python setup.py build # python setup.py installこれだけでOK。
あとはpythonスクリプトの中で、
import cx_Oracleとすればcx_Oracleのモジュールがロードできるはずです。


