無料のLinux版 Oracle Database 11g Express Edition(XE)をCentOSにインストールします。

参考

追記 2019年10月20日

Oracleの公式Dockerfileを使って、DockerコンテナでOracleを動作できるようになっていました。その方法は以下を参照

環境

Linuxは64bit版

無料版のOracle Database Express Edition 11gのLinux版は64bit版のみ対応ということで、64bit版のLinuxを用意します。 今回はCentOS 6.5 64bit版 minimalをWin7のVirtualBoxの仮想マシンにインストールして使用します。

作成したVirtualBoxの仮想マシン構成は以下のようになります。

  • RAM: 1GB
  • スワップ領域: 2.05GB
  • HDD領域: 50GB

注意. Oracle XE は、スワップ領域、RAM、ディスク領域やglibcのバージョンなどいくつか気を付けないといけない 要件があるので、以下のインストレーションガイドにある要件を事前に確認しておきます。

今回のCentOS 6.5 64it minimalでは、メモリ1GでHDD領域をデフォルトでインストールすると、スワップ領域がメモリの2倍以上の2024MBを下回り、Oracleをインストールできませんでした。 結局、CentOSの再インストールで、スワップ領域が2024MBを越えるように手動で変更して対応しました。

開発用パッケージ

開発用パッケージをまとめてインストールしておきます。

 # yum groupinstall "Development Tools"

bcコマンド

bcコマンドが無いと以下のようなエラーが表示されます。

# rpm -ivh oracle-xe-11.2.0-1.0.x86_64.rpm
準備中...                ########################################### [100%]
/var/tmp/rpm-tmp.gAtjqi: line 186: bc: コマンドが見つかりません
   1:oracle-xe              ########################################### [100%]
Executing post-install steps...
/var/tmp/rpm-tmp.RRbpv8: line 76: bc: コマンドが見つかりません
/var/tmp/rpm-tmp.RRbpv8: line 77: bc: コマンドが見つかりません
/var/tmp/rpm-tmp.RRbpv8: line 78: [: -gt: unary operator expected
/var/tmp/rpm-tmp.RRbpv8: line 82: bc: コマンドが見つかりません
You must run '/etc/init.d/oracle-xe configure' as the root user to configure the database.
インストール自体はできているようですが、念のため、Oracleより先にbcコマンドをインストールしておきます。
 # yum install bc

インストール

ダウンロード

Oracleのサイトからダウンロードします。

インストール

ダウンロードした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

Disk1というディレクトリができるので、その中に移動します。

# cd Disk1
  # ls -l
合計 309892
-rw-rw-r-- 1 root root 317320273  8月 29 14:57 2011 oracle-xe-11.2.0-1.0.x86_64.rpm
drwxr-xr-x 2 root root      4096  8月 29 14:57 2011 response
drwxrwxr-x 2 root root      4096  8月 29 14:57 2011 upgrade

rpmファイルがありますので、それをインストールします。

# rpm -ivh oracle-xe-11.2.0-1.0.x86_64.rpm
準備中...                ########################################### [100%]
   1:oracle-xe              ########################################### [100%]
Executing post-install steps...
You must run '/etc/init.d/oracle-xe configure' as the root user to configure the database.

初期化

rpmでのインストールに成功した場合、''/etc/init.d/oracle-xe configure'を実行するようにとメッセージが表示されます。 そのためメッセージ通りに実行します。 すると、いくつか問い合わせがありますので、そのつど回答します。 Oracleを試すだけならデフォルト設定で問題ないので、パスワードを除いてすべてEnterにします。

# /etc/init.d/oracle-xe configure

Oracle Database 11g Express Edition Configuration
-------------------------------------------------
This will configure on-boot properties of Oracle Database 11g 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:
Password can't be null. Enter password:
Confirm the password:

Do you want Oracle Database 11g Express Edition to be started on boot (y/n) [y]:

Starting Oracle Net Listener...Done
Configuring database...Done
Starting Oracle Database 11g Express Edition instance...Done
Installation completed successfully.

設定

共有ライブラリ

共有ライブラリへのパス設定が必要なので、設定ファイルを作成します。 作成する場所は、/etc/ld.so.conf.d/で、ファイル名は、"oracle.conf" にします。。

例 以下の内容のファイルを作成。ファイルパスは /etc/ld.so.conf.d/oracle.conf
/u01/app/oracle/product/11.2.0/xe/lib

作成した設定ファイルを読み込ませます。

# ldconfig

設定が反映されているかは、オプション"-v"で確認できます。

# ldconfig -v
/usr/lib64/mysql:
        libmysqlclient.so.16 -> libmysqlclient.so.16.0.0
        libmysqlclient_r.so.16 -> libmysqlclient_r.so.16.0.0
/u01/app/oracle/product/11.2.0/xe/lib:
        libuini11.so -> libuini11.so
        libntcpaio11.so -> libntcpaio11.so
        ・・・
        ・・・
/lib64/tls: (hwcap: 0x8000000000000000)
/usr/lib64/sse2: (hwcap: 0x0000000004000000)
/usr/lib64/tls: (hwcap: 0x8000000000000000)

クライアントユーザーの環境設定

Oracleインストール時に作成されたユーザー"oracle"は、sqlplusへのパスや環境変数が設定されていません。 そのため、Oracle用のパスや環境変数を設定するために、以下を実行する必要があります。

. /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh
注. 最初のドットを忘れないこと。

毎回、実行するのは手間なので、.bashrcに追加することにします。 ただし、ユーザーoracleは、ホームディレクトリに.bashrc.bash_profileが無いので、これらを用意する必要があります。 そのため、/etc/skel/ から.bashrc.bash_profileを、 ホームディレクトリ/u01/app/oracle/にコピーしておきます。

# su - oracle
-bash-4.1$ cp /etc/skel/.bash_profile /u01/app/oracle/
-bash-4.1$ cp /etc/skel/.bashrc /u01/app/oracle/
-bash-4.1$ vi ~/.bashrc
追加の".bashrc"は以下のようになります。
# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# User specific aliases and functions

. /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh

oracle用ユーザーを新規作成している場合も同様に追加しておきます。

systemでの接続テスト

動作確認のためsqlplusでOracleに接続してみます。ユーザーはsystemで、パスワードは初期化の"/etc/init.d/oracle-xe configure"で入力したものになります。

$ sqlplus

SQL*Plus: Release 11.2.0.2.0 Production on 土 8月 16 05:42:37 2014

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

ユーザー名を入力してください: system
パスワードを入力してください:


Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
に接続されました。
SQL>			

sysdbaでの接続テスト

sysdbaで接続する場合は、ユーザー"oracle"になって接続します。

# su - oracle
-bash-4.1$ . /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh
-bash-4.1$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.2.0 Production on 月 8月 18 13:53:53 2014

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



Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
に接続されました。
SQL>
SQL> SELECT username, default_tablespace FROM dba_users;

USERNAME                       DEFAULT_TABLESPACE
------------------------------ ------------------------------
SYSTEM                         SYSTEM
SYS                            SYSTEM
ANONYMOUS                      SYSAUX
APEX_PUBLIC_USER               SYSTEM
APEX_040000                    SYSAUX
XS$NULL                        SYSTEM
OUTLN                          SYSTEM
XDB                            SYSAUX
CTXSYS                         SYSAUX
MDSYS                          SYSAUX

USERNAME                       DEFAULT_TABLESPACE
------------------------------ ------------------------------
FLOWS_FILES                    SYSAUX
HR                             USERS

12行が選択されました。			

注意. ユーザー"oracle"以外で、oracle_env.shを実行してsysdba で接続できない場合は以下を参照。

トラブル

ホスト名解決失敗

oracleの初期化処理で以下のように失敗して、ログに"ORA-00130: invalid listener address "とある場合、 ホスト名解決に失敗している可能性があります。

# /etc/init.d/oracle-xe configure

Oracle Database 11g Express Edition Configuration
・・・
・・・
Configuring database...
Database Configuration failed.  Look into /u01/app/oracle/product/11.2.0/xe/config/log for details

メッセージにあるlogディレクトリを調べます。 ディレクトリには4つのログファイルがありますが、その中の以下の2つに原因を特定するログがありました。

/u01/app/oracle/product/11.2.0/xe/config/log/postDBCreation.log

begin
*
ERROR at line 1:
ORA-01034: ORACLE not available
Process ID: 0
Session ID: 0 Serial number: 0



File created.

ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux-x86_64 Error: 2: No such file or directory
ORA-00119: invalid specification for system parameter LOCAL_LISTENER
ORA-00130: invalid listener address '(ADDRESS=(PROTOCOL=TCP)(HOST=ora.localdomain)
(PORT=1521))'
select 'utl_recomp_begin: ' || to_char(sysdate, 'HH:MI:SS') from dual
*
・・・
・・・
ERROR at line 1:
ORA-01034: ORACLE not available
Process ID: 0
Session ID: 0 Serial number: 0

/u01/app/oracle/product/11.2.0/xe/config/log/cloneDBCreation.log

Create controlfile reuse set database "XE"
・・・
・・・
*
ERROR at line 1:
ORA-01034: ORACLE not available
Process ID: 0
Session ID: 0 Serial number: 0


ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux-x86_64 Error: 2: No such file or directory
ORA-00119: invalid specification for system parameter LOCAL_LISTENER
ORA-00130: invalid listener address '(ADDRESS=(PROTOCOL=TCP)(HOST=ora.localdomain)
(PORT=1521))'
Create controlfile reuse set database "XE"
*
ERROR at line 1:
ORA-01034: ORACLE not available
Process ID: 0
Session ID: 0 Serial number: 0

上記ログのエラーは、ホスト名のora.localdomainの名前解決失敗が原因でした。 ora.localdomainはCentOSのインストール時に設定したホスト名ですが、 /etc/hostsには追加されてなく、名前解決ができなかったようです。 そのため名前解決が正しくできるように/etc/hostsにホスト名とIPアドレスを追加し、 再度初期化を実行したらエラーがなくなりました。

例 /etc/hostsに以下を追加

127.0.0.1   ora.localdomain

sysdbaで接続できない

インストール後にOracle用ユーザーを新規追加して、oracle_env.shで環境変数、パスを設定後、 sysdbaで接続しようとすると以下のようなエラーになります。 ただし、Oracleのインストールで作成されたユーザー"oracle"ではエラーにならず、sysdbaで接続できます。

# su - ora
# . /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh
[ora@ora ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.2.0 Production on 月 8月 18 13:50:31 2014

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

ERROR:
ORA-01031: insufficient privileges


ユーザー名を入力してください:

原因はアクセス権?のようです。新規ユーザーのグループをユーザー"oracle"と同じグループ"dba"にするか、 /etc/groupの"dba"に追加すれば、sysdbaにアクセスできるようになります。

例 グループ"dba"に新規ユーザーを追加

rpmからインストールすると、/etc/group に以下のような"dba"というグループが追加されているはずです。
dba:x:501:
新規追加したユーザーが"ora"とすると、root権限で以下のように/etc/groupに追加します。
dba:x:501:ora
追加後、ユーザー"ora"になると、sysdbaで接続できるようになります。
# su - ora
[ora@ora ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.2.0 Production on 土 8月 23 00:37:00 2014

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



Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
に接続されました。
SQL>