1. 環境
  2. インストール
  3. 設定
  4. トラブル

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

参考

環境

  • 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>