Oracle 11g XE を Ubuntu 11.10 にインストールする

最近リリースされたばかりの Ubuntu 11.10 に Oracle 11g XE をインストールしようとしたら少しはまったので原因と対策を簡単にまとめておきます。

Emerge Technology: Oracle 11g XEをUbuntuにインストール の手順通りでほぼできますが、最後の configure スクリプトを実行したとき、データベース設定に失敗します。

$ sudo /etc/init.d/oracle-xe configure
...
Starting Oracle Net Listener...Done
Configuring database...
Database Configuration failed.  Look into /u01/app/oracle/product/11.2.0/xe/config/log for details

これからインストールする人にとって、分かりやすいように、ここでは最初からの手順を記載しておきます。

Oracle 11g XE のダウンロードと展開

Oracle Database Express Edition 11g Release 2のダウンロード からダウンロードします。ダウンロードするには、ユーザー登録が必要なようです。会社名等も登録の必須項目なので少し面倒です。

インストールに必要なパッケージ群をインストールします。

$ sudo aptitude install alien libaio1 unixodbc

ダウンロードした Oracle 11g XE は RPM パッケージなので deb パッケージに変換します。

$ ls oracle-xe-11.2.0-1.0.x86_64.rpm.zip 
oracle-xe-11.2.0-1.0.x86_64.rpm.zip
$ unzip oracle-xe-11.2.0-1.0.x86_64.rpm.zip 
Archive:  oracle-xe-11.2.0-1.0.x86_64.rpm.zip
   creating: Disk1/
   creating: Disk1/upgrade/
  inflating: Disk1/upgrade/gen_inst.sql  
   creating: Disk1/response/
  inflating: Disk1/response/xe.rsp   
  inflating: Disk1/oracle-xe-11.2.0-1.0.x86_64.rpm    
$ cd Disk1/
$ sudo alien --to-deb --scripts oracle-xe-11.2.0-1.0.x86_64.rpm 
oracle-xe_11.2.0-2_amd64.deb generated

おそらく RPM パッケージがベースになっているために chkconfig コマンドを作ってあげないといけないようです。この辺は面倒なのでそのまま従っておきましょう。

元記事はシェバングが /sbin/bash になっていますが /bin/bash の間違い?
$ sudo vi /sbin/chkconfig
#!/bin/bash
# Oracle 11gR2 XE installer chkconfig hack for Debian by Dude
file=/etc/init.d/oracle-xe
if [[ ! `tail -n1 $file | grep INIT` ]]; then
   echo >> $file
   echo '### BEGIN INIT INFO' >> $file
   echo '# Provides:             OracleXE' >> $file
   echo '# Required-Start:       $remote_fs $syslog' >> $file
   echo '# Required-Stop:        $remote_fs $syslog' >> $file
   echo '# Default-Start:        2 3 4 5' >> $file
   echo '# Default-Stop:         0 1 6' >> $file
   echo '# Short-Description:    Oracle 11g Express Edition' >> $file
   echo '### END INIT INFO' >> $file
fi
update-rc.d oracle-xe defaults 80 01
$ sudo chmod 755 /sbin/chkconfig 

awk のシンボリックリンクも作成しておきます
$ sudo ln -s /usr/bin/awk /bin/awk

これで準備は整いました。deb パッケージをインストールします。

$ sudo dpkg --install ./oracle-xe_11.2.0-2_amd64.deb 

インストールできましたね。最後の configure スクリプトです。

$ sudo /etc/init.d/oracle-xe configure
...
Starting Oracle Net Listener...Done
Configuring database...
Database Configuration failed.  Look into /u01/app/oracle/product/11.2.0/xe/config/log for details

何か失敗してしまいました (> <)

configure スクリプトの原因調査

Cannot Install Oracle 11gR2 Express Edition on Ubuntu Linux 11.04 (64-bit) Howto によると、以下のログを調べろと言ってるので調べてみます。

$ sudo cat /u01/app/oracle/diag/rdbms/xe/XE/trace/alert_XE.log 
Mon Oct 17 20:54:11 2011
Starting ORACLE instance (normal)
WARNING: You are trying to use the MEMORY_TARGET feature. This feature requires 
the /dev/shm file system to be mounted for at least 419430400 bytes.
/dev/shm is either not mounted or is mounted with available space less than this size.
Please fix this so that MEMORY_TARGET can work as expected. Current available is 0 and
used is 0 bytes. Ensure that the mount point is /dev/shm for this directory.
memory_target needs larger /dev/shm

memory_target とか /dev/shm が悪さをしてそうだと分かります。

ubuntu 11.10 ORA-00845: MEMORY_TARGET not supported on this system によると、Ubuntu 11.10 から /dev/shm が /run/shm へ移行されたことが原因のようだと分かります *1

$ ls -l /dev/shm
lrwxrwxrwx 1 root root 8 2011-10-17 20:44 /dev/shm -> /run/shm

/dev/shm は /run/shm のシンボリックリンクになっていますが、configure スクリプトはこの状態だとうまく動作しないようです。フォーラムのやり取りの中で memory_target のパラメーターを削除して、pga_aggregate_target と sga_target を追加しなさいとあります。

以下の2つのファイルに同じ設定をする必要があるようです。メモリのサイズは適当なので、環境に応じて適切な値を設定してください *2

$ sudo vi /u01/app/oracle/product/11.2.0/xe/config/scripts/init.ora
$ sudo vi /u01/app/oracle/product/11.2.0/xe/config/scripts/initXETemp.ora 

#memory_target=418381824
pga_aggregate_target=200540160
sga_target=601620480

先ほどの configure スクリプトの実行で Listener は起動しているので kill しておきます。

$ ps ax|grep oracle
15318 ?        Ssl    0:00 /u01/app/oracle/product/11.2.0/xe/bin/tnslsnr LISTENER -inherit
$ sudo kill 15318

再度、configure スクリプトを実行します。

$ sudo /etc/init.d/oracle-xe configure
...
Configuring database...Done
Starting Oracle Database 11g Express Edition instance...Done
Installation completed successfully.

今度は成功しましたね!sqlplus でも接続してみましょう o(^ ^)o

$ source /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh
$ sqlplus system/oracle
SQL*Plus: Release 11.2.0.2.0 Production on 月 1017 21:57:17 2011
Copyright (c) 1982, 2011, Oracle.  All rights reserved.
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
に接続されました。
SQL> 

2011/10/26 追記

Ubuntu 11.04 にインストールしたのを 11.10 にアップグレードしたときの解決方法のようです。
Emerge Technology: Ubuntu 11.04に入れたOracle XE 11gを11.10で動かす方法