2013年12月23日月曜日

Oracle Database Express Edition 11g をUbuntu13.10(64bit)にインストールしようとしてひどい目にあった話

どうもどうも。久しぶりです。
学校の課題でOracleのDBを使っていたのでいっそ家でもできるようにとマイUbuntuにインストールしようとしたらひどい目にあいました。ただそれだけの話。

Ubuntu13.10を使ったインストール例が殆ど無いので、完全に手探りだったのですが、そのせいもあって5時間程度格闘することに。もうやりたかない。

後にこの無謀なチャレンジをする人たちのためにヒント的なまとめを記録しておこうと思う。自分のメモ書き的意味も含めて。




まずは、足りないものをインストール。
$ sudo aptitude install alien libaio1 unixodbc

ダウンロードしたOracle11gXEが面倒なことにRPMパッケージなのでdebパッケージに変換しちゃいます。おなじみalienです。
$ unzip oracle-xe-11.2.0-1.0.x86_64.rpm.zip
$ cd Disk1/
$ sudo alien --to-deb --scripts oracle-xe-11.2.0-1.0.x86_64.rpm

元がRPMパッケージなので、chkconfingを作って色々と面倒事を回避します。
$ 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

chkconfigファイルに実行権を与えておきます。
$ sudo chmod 755 /sbin/chkconfig

awkディレクトリのパスがRed Hat系とビミョーに違うので、シンボリックリンクを貼っておきます。
$ sudo ln -s /usr/bin/awk /bin/awk

oracleユーザーが作られますが、大体失敗するので、事前に作っておきます。
$ sudo groupadd dba
$ sudo /usr/sbin/useradd -g dba -d /u01/app/oracle -s /bin/bash oracle
$ sudo passwd oracle
   (パスワードの設定をしておく)

さあインストール。
$ sudo dpkg --install ./oracle-xe_11.2.0-2_amd64.deb
/etc/init.d/oracle-xe configureしてね!って出てくるけど色々と設定がアレなのでUbuntu向けに改良してからにします。

configureの途中touchコマンドを使うのですが、そんなパスはねえとばかりに怒られるので、ディレクトリを作っておきます。
$ sudo mkdir /var/lock/subsys
$ sudo chmod 755 /var/lock/subsys

以下の2つのファイルを環境に合わせて同じ設定にしておきます。メモリサイズは適当ですが、うちの環境(64bit&6GBRAM)ではこれで動いてます。
$ 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


あと、最近のUbuntuだと/etc/hostsが完全な状態になっていないと思うので、完全な状態にします。
$ sudo vi /etc/hosts
127.0.0.1       localhost localhost.localdomain ←追加
127.0.1.1       (初期に決めたホスト名)

やっとconfigureします。
$ sudo /etc/init.d/oracle-xe configure
...
Configuring database...Done
Starting Oracle Database 11g Express Edition instance...Done
Installation completed successfully.

こんな感じのメッセージが出れば成功です。

実は、このままだとリスナーさんがちゃんと起動できないので、リスナーの設定を変更します。
まずは、ファイルをいじるのでOracleをストップ。
$ sudo /etc/init.d/oracle-xe stop

/u01/app/oracle/product/11.2.0/xe/network/admin/listener.oraを変更します。
$ sudo vi /u01/app/oracle/product/11.2.0/xe/network/admin/listner.ora

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
#     (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE)) ←コメントアウト
      (ADDRESS = (PROTOCOL = TCP)(HOST = UB4VB)(PORT = 1521))
    )
    (DESCRIPTION=
      (ADDRESS=(PROTOCOL=tcp)(HOST=localhost.localdomain)(PORT=8080)) ←追加
      (Presentation=HTTP)
      (Session=RAW)
    )
  )

#DEFAULT_SERVICE_LISTENER = (XE) ←コメントアウト

これで保存します。その後Oracleをスタート。
$ sudo  /etc/init.d/oracle-xe start
Starting Oracle Net Listener.
Starting Oracle Database 11g Express Edition instance.

これで成功です。

ついでに.bashrcに以下の一文を最後に追加します。
source /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh

保存して、
source .bashrc

これでSQLPlusにアクセスできるようになります。
$ sqlplus

SQL*Plus: Release 11.2.0.2.0 Production on 月 12月 23 20:31:57 2013

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

ユーザー名を入力してください: system
パスワードを入力してください: (configure時に設定したパスワード)


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

やったね!SQLPlusが使えるよ!



ついでにiptablesを設定しておきます。VirtualboxのNATモードなら、ポートフォワーディングを設定すればホストからもアクセスできるようになります。
$ sudo iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 1521 -j ACCEPT
$ sudo iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

さらに、ブート時に自動でiptables設定を適用できるようにしておきます。
$ sudo /sbin/iptables-save -c > /etc/iptables.rules

/etc/network/if-pre-up.d/iptables_startを用意します。
$ sudo vi /etc/network/if-pre-up.d/iptables_start
#!/bin/sh
/sbin/iptables-restore < /etc/iptables.rules
exit 0

実行権をつけておきます。
$ sudo chmod +x /etc/network/if-pre-up.d/iptables_start

もし、iptablesの設定を編集してブート時に追加したい場合は、/etc/iptables.rulesをいじるか、iptables -A…とかを実行してから、「sudo /sbin/iptables-save -c > /etc/iptables.rules」をじっこうすればOKです。

変更後のお約束、リスタート。
$ sudo ufw reload

これでおしまい。


<番外編>アンインストールするには
失敗しちゃったのでアンインストールしたい場合、ちょっと面倒なことになります。
$ aptitude pugre oracle-xe
ゴミ削除。
$ sudo rm -fr /u01/
$ sudo rm /etc/default/oracle-xe
他にもゴミが有りますので、完全に削除したい場合はシステム検索で見つける。大体はリンク切れの残骸です。

こんな感じ?たぶん。





0 件のコメント:

コメントを投稿