ちょっとOracle 11g Express Edition for Linuxを触ってみた。以前CentOS 6.0 x86_64に入れてそのまま放ったらかしにしていたので少し詳しく見てみる。

なななんと、インストール先が/u01固定。なんじゃこりゃ。おそらくなるべくパス名を確保しよう(Oracleは異様にディレクトリーを深く掘る)という魂胆なのだろうが、はっきり言って気に食わない・・・・。が、インストール先を変える方法はあるんじゃろか。とりあえず実体が別の場所にあれば良いだけであれば好きな場所からシンボリックリンク/u01を作ってOracle君に/u01があるかのように見せかけてやれば良い。

# cd /
# mkdir /usr/local/oracle
# ln -s /usr/local/oracle u01
# rpm -i oracle-xe-11.2.0-1.0.x86_64.rpm

/var/oracleでもなんでもお好きなように。ちなみにCentOS 6.0は「デスクトップ」でインストールしたと思う。oracle-xeを入れるにあたってaioとか特に追加のパッケージは要求されなかったような気がするがインストールしたのがずいぶん前なので間違っているかも知れない。

ユーザーoracleが素のままである。ホームは/u01/app/oracle。面倒なので/etc/skelから,bash*をコピってくる。そして

$ echo . /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh >> .bash_profile

これでsu – oracleで速攻sqlplusとか使えるようになる。

apexはますます意味がわからなくなった。(GNOMEのスタートメニュー的なところに設置される)トップページは英語で表示され、中国語、日本語、ポルトガル語(?)をリンクで選べる。最初からパラメーターp_lang=jaを入れてやれば日本語で表示される。10gXEのAPEXはhttp://localhost:8080/apexとすれば自動でログインページにジャンプしていたが、なんか作りが大幅に変わった模様。http://localhost:8080/apex/f?p=4950とか、意味不明な番号が無いとトップページが表示されない。

createdb.shは健在。相変わらずflash_recovery_areaは場所の指定ができない(スクリプトの中では)。Oracleのぷろへっそなるな人から見たらひょっとしたらflash_recovery_areaを場所移動するのは常識はずれな事なのかも知れないのでもう少し勉強してからにしよう。
ちなみにcreatedb.sh(正確にはCreateDB.bat)はWindows版にもあるにはあるが、使ったことないので分からん。
なんか知らんが、10gXEの頃はこのcreatedb.shでDBを作りなおすとapexなるものが使えなくなっていたが、今回は作りなおしてもまた使える? というか・・・・JA16SJISTILDEにして作りなおしてもOracleを再起動したらなぜかAL32UTF8に戻ってる? なんじゃこりゃ。断念。日を改めて検証する。

(追記)日を改めて検証してみた。と言っても死ぬほどDB作りなおしただけ。文字コード変更はデータファイルの位置などをいじらなければできる。つまり、createdb.shの引数として-dbchar JA16SJISTILDEにする時に一緒に-datadirと-logdirを付けると後で妙な事になるようだ。pfileとかspfileとかその辺を見ればなんとかなるのかも知れんけど、面倒なのでこれもシンボリックリンクで行くことにしよう。
createdb.shは動かすたびにfiledirとlogdirをディレクトリーごと削除して作り直す。なので作り直すところをリンク貼り直し&中身だけ削除という動作に修正する。最終的にリンクは以下のようになる。もちろん、これらはoracle:dbaが読み書きできるようにしておく。

/u01 -> /usr/local/oracle
/u01/app/oracle/product/11.2.0/xe/dbs -> /var/oracle/dbs
/u01/app/oracle/product/11.2.0/xe/log -> /var/oracle/log
/u01/app/oracle/product/11.2.0/xe/flash_recovery_area -> /var/oracle/flash_recovery_area

/u01を専用のパーティションで/とは別に切るのが理想なのだろうが、とりあえず/usrと/varからプログラム領域とデータ領域を間借りしてしまおう。