Oracle XE をインストールしてみる

FreeBSD の Linux コンパチ機能を用いて、Oracle 10g XE を動かす話。 結論から言うと、動く。

ハンドブックには Oracle 8.0.5 のインストール手順が書いてある (2007.01 現在)。 また、2002.03 に書かれた 8.1.6 の事例 もある。 では 10g Express の Linux 版は FreeBSD で動くかな?と軽くググってみたところ、 ML アーカイブにチャレンジャーの情報 があった。 この投稿をベースに、実験してみた。

実験機材

Oracle というとどうしても「環境汚染」と思ってしまうため、 どうなっても構わない会社のマシンを生贄にすることにする。

  機体 : FLORA 350W DE3
  CPU  : Celeron 2G
  RAM  : 1G
  HDD  : 40G
  OS   : FreeBSD 6.2-PRERELEASE (2006.12.28 頃)

いくつか ports を入れてあるものの、 kernel も GENERIC のままだし、凝った設定は何もしていない。

あえて言えばヘッドレス(KVM なし)なのが特徴かもしれない。 本体に刺さっているケーブルは 電源と UTP だけ。

準備

上述の ML のアーカイブ には tar ファイルが添付されていて、 その中に貴重なスクリプトが入っているので、入手して展開しておく。

kernel の設定

先述のメイルにある通り、kernel にパッチをあてる(かどうかを考える)。 ざっと見た感じでは、以下のような状況だった。

 compat/linux/linux_misc.c     …実験用の機材では、すでに入っている。
 compat/linprocfs/linprocfs.c  …該当箇所が見当たらない。
 fs/pseudofs/pseudofs_vnops.c  …面倒なので見ないことにしておく。

吸収されているっぽい雰囲気なので、パッチは特に当てないことにした。

次に、kernel config で共有メモリの設定をする。

options COMPAT_LINUX #it is as you would like it, you may load the module
options SEMMAP=128
options SEMMNI=128
options SEMMNS=32000
options SEMOPM=100
options SEMMSL=250
options SHMMAXPGS=262144
options SHMMNI=4096
options SHMSEG=4096
options MAXDSIZ="(1024*1024*1024)" # as to this and what is below I am not sure
options MAXSSIZ="(1024*1024*1024)"
options DFLDSIZ="(1024*1024*1024)"

面倒なので GENERIC をコピーしてファイル末尾に上記部分を加えただけ、とした。

# cd /usr/src
# make buildkernel KERNCONF=ORA
# make installkernel KERNCONF=ORA
# sync
# sync
# sync
# shutdown -r now

再起動後、無事にログインできることを確認。

linux_base

続いて linux_base の投入。 ところが、他の何かを ports で入れた時に既に linux_base は入っていたらしい。

# pkg_info -aI | grep linux_base
linux_base-fc-4_9   Base set of packages needed in Linux mode (for i386/amd64)

libaio が入っていないので、これは入れることに。

# pwd
/usr/ports/emulators/linux-libaio
# make install clean

linprocfs が mount されていることも確認。

XE を投入

あとは rpm を突っ込めばいいらしい。本当か。

# mkdir -p /compat/linux/var/lib/rpm/
# rpm --root=/compat/linux --ignoreos --ignorearch --noscripts --nodeps -ivh \
  oracle-xe-univ-10.2.0.1-1.0.i386.rpm
oracle-xe-univ              ##################################################

linux の流儀に従って、library を /usr/lib に移動する。 愚痴については上述の投稿を参照。

# mv /compat/linux/usr/lib/oracle /usr/lib

rpm でパッケージを突っ込んだあとで、install.sh を用いてインストールを行う。 何か変な感じもするが…。

# sh install.sh
(略)
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: (パスワード入力)
Starting Oracle Net Listener...Done
Configuring Database... (ここでかなり、相当、待つ) Done
Starting Oracle Database 10g Express Edition Instance...Done
Installation Completed Successfully.

8080 は Tomcat などとぶつかるので、10210 など適当に違うポート番号に しておくとよいかもしれない。

これでしばらく待つと、Installation Completed Successfully. らしい。 マシン再起動時に下げ/上げできるよう、起動スクリプトも放りこんでおく。

# mv oraclexe.sh /usr/local/etc/rc.d

使え

install.sh が oracle ユーザを作ってくれているので、これを使ってみる。

# passwd oracle
(適当に設定する)
# su - oracle
-su-3.00$ cat <<EOF > hoge
ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server
ORACLE_OWNER=oracle
ORACLE_SID=XE
SQLPLUS=\$ORACLE_HOME/bin/sqlplus
LSNR=\$ORACLE_HOME/bin/lsnrctl
export ORACLE_HOME
export ORACLE_SID
export PATH=\$ORACLE_HOME/bin:\$PATH
export LD_LIBRARY_PATH=\$ORACLE_HOME/lib
EOF
-su-3.00$ . hoge
-su-3.00$ which sqlplus
/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/bin/sqlplus
-su-3.00$ sqlplus sys/admin as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Sat Jan 6 18:23:58 2007

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


Connected to:
Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production

SQL> select count(*) from tab;

  COUNT(*)
----------
      3528

SQL> quit
-su-3.00$ du -sk app oradata
543172  app
1077796 oradata

うぉ。動いた。

LANG と NLS_LANG を設定してあげれば日本語メッセージも出る。むぅ…。

export NLS_LANG=Japanese_Japan.JA16EUC
export LANG=ja_JP.eucjp

tnsnames.ora を書いてあげれば SQL Plus で他のマシンに繋ぐこともできる。 これはかなり便利である。

Application Express (HTMLDB)

デフォルトでは http で LISTEN しているのが localhost である。 これを他のマシンからもアクセスできるようにするためには、 Application Express (HTMLDB) にて「管理 → HTTP アクセスの管理」を開いて ラジオボタンを操作してやる必要がある。

しかし、これって、ローカルにブラウザを持たない限り変更できないのでは? しょうがないので firefox でも入れることにする。

各国語パラメータ

NLS_DATABASE_PARAMETERS によれば、DB の national character set は AL16UTF16 らしい。 AL16UTF16 は Unicode 標準の最新バージョン(3.2)をサポートするキャラクタセット ということなので、これでよい。

SQL> column PARAMETER format a32
SQL> column VALUE format a32
SQL> select * from NLS_DATABASE_PARAMETERS;
SQL> select * from NLS_DATABASE_PARAMETERS
  2  where PARAMETER = 'NLS_NCHAR_CHARACTERSET';

PARAMETER                        VALUE
-------------------------------- --------------------------------
NLS_NCHAR_CHARACTERSET           AL16UTF16
[$Revision: 1.4 $ $Date: 2011.05.21 07:44:41 $]
[EOF]