nkjmkzk.net

Virtualization, Operating System, Storage, Cloud Computing

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はちょっと、という僕のような人にはたまらない感じです。

without comments

Written by nkjm

December 14th, 2008 at 7:49 pm

Posted in Database

Tagged with , ,

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]:y
Starting 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

デフォルトではローカルホスト上からしかアクセスできないことに注意。これは簡単にリモートからも操作可能に設定できます。

これがログイン画面。
3104578840_7b2547646c_o

そしてログイン後のトップ画面。
3103747423_e65d9b46d0_o

参考までにテーブルを作る画面。

3104578948_14fbf3b46e_o

このようにXEではApplication ExpressというEnterprise Managerとは別の管理プログラムがついてきます。これもでもなかなか使えますよ。

あと、$ORACLE_HOME/binにoracle_env.shというのがあります。こいつはOracle固有の環境変数を設定してくれるスクリプトになっています。

. $ORACLE_HOME/bin/oracle_env.sh

としておくもよし、.bash_profileに適当に書き写しておくもよし、です。

without comments

Written by nkjm

December 13th, 2008 at 7:18 pm

Posted in Database

Tagged with

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のモジュールがロードできるはずです。

without comments

Written by nkjm

December 6th, 2008 at 7:17 pm

Posted in Database

Tagged with ,