Oracle Database 11g XE インストール (今更ながら)

最近会社で聞かれて答えたことをQiitaにまとめるために、実験や再現確認を目的としたOracle Database環境を作成しました。

検討の結果 Oracle Database 11g Express Edition (以下XE) on CentOS 6 on VirtualBox on Windows を選びました。

# バージョンとエディションの選定

今回最優先にしたのは、VirtualBoxゲストを使用することと、Linux版のインストールをお手軽に行うことです。そのため、XEを選択しました。

会社で聞かれたことを実験する目的であれば、大容量メモリや大容量データを扱う必要もなさそうです。そのため、XEの各種制限は問題なしと判断しました。

ちょうど [Oracle Database 11g XE のインストールを解説しているサイト](http://www.ajisaba.net/db/ora_linux_install.html)がありました。そのため11gを選択しました。

11g XEの制約により、Linuxには64ビット版を使用します。

解説サイトでは CentOS 6.5 Minimal を使用していました。今回は CentOS 6.xの最新ということで CentOS 6.10 Minimal を使用しました。

一度 CentOS 7.6 (1810) を試しました。しかしインストーラの起動時にkernel panicを起こしてしまいました。お手軽インストールを優先したため、調査せず CentOS 6.x を使用することで問題を回避しました。

# インストール手順

[参考にしたサイト](http://www.ajisaba.net/db/ora_linux_install.html)に書かれている手順、ほとんどそのままでOKでした。

サイトがなくなっても大丈夫なように、簡単ながら手順を書いておきます。自分用なので簡素に書いてある点、作業漏れや記憶違いにはご容赦ください。

## ゲスト環境の準備

仮想マシンに以下を割り当てて起動します。

* メモリ = 1GB
* ストレージ = 50GB
* ネットワーク = NAT

[公式サイト](https://www.centos.org/)から CentOS-6.10-x86_64-minimal.iso をダウンロードし、CD/DVDに割り当てます。

## OSインストール

仮想マシンの起動後、基本的には手順に従ってインストールします。

パーティション構成は、デフォルトをベースとしつつ、一番大きいパーティションを1GB減、SWAPを1GB増としました。これは「SWAPがメモリ(1GB)の2倍以上」というOracleの要件をわずかに満たさないからです。

参考サイトにあるようにSWAPを少し増やせばよいだけです。ただ、面倒だったので1,024MB増やしました。

## OSインストール後の準備作業

* yum groupinstall "Development Tools"
* yum install bc
* /etc/hosts にホスト名を追加 ( "127.0.0.1"の行の末尾に追加、Oracleの起動に失敗するのを回避するため )

## Oracle XEのRPMの送り込み

* VirtualBoxホストのWindows機で、[公式サイト](https://www.oracle.com/technetwork/jp/database/database-technologies/express-edition/downloads/index.html
)からインストール用のファイル ( oracle-xe-11.2.0-1.0.x86_64.rpm.zip ) をダウンロード
* Windows機で[MiniWeb](http://miniweb.sourceforge.net/)を起動
* ゲスト機に作業ディレクトリ /usr/src/oracle を作成して cd
* ゲストから "curl -O http://～～～:8000/oracle-xe-11.2.0-1.0.x86_64.rpm.zip" でダウンロード

SSHサーバーを入れるならscpするところです。
SSHサーバーを入れるつもりがないので、curlでpullするようにしました。

## Oracle XEのRPMのインストール

* unzip oracle-xe-11.2.0-1.0.x86_64.rpm.zip
* rpm -ivh Disk1/oracle-xe-11.2.0-1.0.x86_64.rpm

## RPMインストール後のスクリプトの実行

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

パスワード以外はデフォルトのままでOKです。この処理の完了後、Oracle Databaseが起動します。

## 共有ライブラリ設定

* /etc/ld.conf.d/oracle.conf を /u01/app/oracle/product/11.2.0/xe/lib の内容で作成
* 設定内容を反映するために ldconfig
* "ldconfig -v | grep -5 oracle" で設定内容の確認

## Oracleユーザー用設定

* su -l oracle
* cp -p /etc/skel/{.bash_profile,.bashrc} .
* echo '. /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh' >> .bashrc

## SQL*Plus 動作確認

* su -l oracle
* sqlplus system/*****
* sqlplus sys/***** as sysdba

## ファイヤウォール設定

* iptables -L --line-number
* iptables -I INPUT 5 -m state --state NEW -m tcp -p tcp --dport 1521  -j ACCEPT
* service iptables save

## VirtualBoxのネットワークの設定変更

* NAT ⇒ ホストオンリーアダプター

## ホストからOracle接続の確認

ホストから[A5:SQL Mk-II](https://a5m2.mmatsubara.com/)あたりで接続確認

## 補足

「Oracleのインストールで作成されたユーザー"oracle"」だったためか、sysdbaは正常に接続できました。

# まとめ

こんな簡単な手順でセットアップできるとは思っていませんでした。

XE以外だと、「Xをセットアップ」「Oracle関連ユーザの作成」「xhostでoracleに許可」「"runInstaller.sh"起動」「GUI画面でインストール」「データベース作成(各種パラメータ設定)」といった感じになります。

XEとXE以外で共通に行うこと(インストールファイルの送り込み、ファイヤウォール設定など)を抜きにすると、XEは実質RPMインストールのみ、せいぜいldconfig関連の設定を追加する程度です。それを考えるとXEは何とも簡単です。

"18c XE"もこのくらい簡単に使えるなら、いずれは"18c XE"に環境を移すかもしれません。

あるいは、XEでは実験できないようなことが出てきたら、XE以外の選択肢を考えるかもしれません。

# 参考にしたサイト

* http://www.ajisaba.net/db/ora_linux_install.html