Varagnt 環境の CentOS 6.6 に Oracle XE(11g Release 2) を導入してみる

## Oracle 11g XE とは
以前から Oracle XE てなんだろう？って思っていたのですが、Oracle Database 11g リリース2 (11.2.0.2)をベースにした無償データベースのことだったんですね。

Oracle XEは商用利用もOKです。
https://boxil.jp/mag/a862/

システム要件
　https://blogs.oracle.com/oracle4engineer/entry/column_xe_11g1
制限事項
　システム要件に記述してありますが、インスタンスは１つ（SID=XE）のみです。
　あと制限もあるけど、、検証用環境としてなら十分では？と思います。

## Oracleのインストールって、お難しいんでしょう？
そうなんですよね、Oracle のインストールって難しいんです。が、この Oracle 11g XE は超簡単に10分程度でセットアップできます。何故かというと必要最低限の機能しかないからですｗ

## OracleXE をダウンロード
[Oracleダウンロードページ](http://www.oracle.com/technetwork/jp/database/database-technologies/express-edition/overview/index.html)から「oracle-xe-11.2.0-1.0.x86_64.rpm.zip」をダウンロードします。ダウンロードにはユーザ登録（無料）が必要です（ちなみに linux版は、64bitしかありませぬ）。

## Varagnt環境の設定
OracleXEのインストールは簡単ですが、以下の点を注意し環境設定すること。
　・hosts の設定がされていること
　・swap領域は、メモリの2倍があること（http://edo.blog.jp/archives/1535522.html）

```
# OracleXE 
config.vm.define :oracle do |oracle|
  oracle.vm.hostname = "oracle"
  oracle.vm.network :private_network, ip: "xxx.xxx.xxx.xxx" 
  oracle.vm.provider "virtualbox" do |v| 
    v.customize ["modifyvm", :id, "--memory", 512] 
  end 
end
```

## OracleXEインストール
OracleXEインストールに必要なパッケージをあらかじめインストールします。

```
$ sudo yum -y install glibc make gcc binutils libaio libaio-devel bc unzip
```

ダウンロードした oracle-xe-11.2.0-1.0.x86_64.rpm.zip を適当な場所において…

```
$ sudo su
# unzip oracle-xe-11.2.0-1.0.x86_64.rpm.zip
# cd Disk1
# rpm -ivh oracle-xe-11.2.0-1.0.x86_64.rpm
```


/etc/init.d/oracle-xe configure を実行し質問に答え環境を設定していきます。
　・Oracle Application Express ポート（デフォルト：8080）
　・Oracleリスナーポート（デフォルト：1521）
　・Oracle ユーザ SYS と SYSTEM のパスワード（入力必須）
　・システム起動時の自動実行の設定（デフォルト：y）


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

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:
Confirm the password:

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

Installation completed successfully. 
```

Vagrant環境なので特にデフォルト値でいいと思います。
と、この設定が終わると Oracle XE が起動していますぜｗ

インストールに失敗したりインスタンスが立ち上がらないときは…下記のlogを参照すること。
/u01/app/oracle/product/11.2.0/xe/config/log/ 

> [[S2K] Oracle(on RHEL6)インストール直後の操作の覚書](http://signposts2k.com/?p=1909)

## Oracle ユーザと環境設定
Oracle XE のインストールが終了すると Oracle ユーザが作成されているのでパスワードを変更すること。

```
$ sudo passwd oracle
```

```/u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh``` に以下の文を追加します。
> [NLS 関連パラメータ](http://www.shift-the-oracle.com/config/nlsparameter.html)

```
export ORACLE_BASE=/u01/app/oracle
export LD_LIBRARY_PATH=$ORACLE_HOME/lib/:/lib:/usr/lib
export NLS_LANG=Japanese_Japan.AL32UTF8
export NLS_DATE_FORMAT='YYYY/MM/DD HH24:MI:SS'
```

## sqlplus を使用しデータベースに接続してみる
oracle ユーザになり sqlplus コマンドを使いデータベースに接続してみます。
※パスワードは、/etc/init.d/oracle-xe configure で設定したパスワードを入力する。

```
$ su - oracle
Password: 
$ . /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh
$ sqlplus /nolog
SQL> conn system
パスワードを入力してください: 
接続されました。
```

適当に SQL コマンドを実行してみる。

```
SQL> select sysdate from dual;

SYSDATE
-------------------
2015/02/08 14:31:24
```

## ユーザーを作成、テーブルの作成
ここからは、Oracle の世界ですが、usr01 ユーザを作成して実際にテーブルまで作ってみます。

```
$ sqlplus /nolog
SQL> conn system
SQL> create user usr01 identified by 12345;
SQL> grant CONNECT,RESOURCE to usr01;
SQL> quit
```

して

```
$ sqlplus usr01/12345@XE
```

## windowsから接続してみる
[A5:SQL Mk-2](http://www.wind.sannet.ne.jp/m_matsu/developer/a5m2/) をダウンロードして接続確認してみます。

![a5-01.png](https://qiita-image-store.s3.amazonaws.com/0/44540/2aa8295e-e1f6-bb1f-b461-096446d60a03.png)

## Oralce 管理UI を外部から接続してみる
sqlplus で、、いつものようにログインし

```
SQL> EXEC DBMS_XDB.SETLISTENERLOCALACCESS(FALSE);
```

としたあとに、```http://<ip-addr>:8080/apex/f?p=4950``` もしくは ```http://<ip-addr>:8080/apex/``` にアクセスする。

![oracle-01.png](https://qiita-image-store.s3.amazonaws.com/0/44540/82901124-3557-5e58-586c-8105590f910f.png)

と、こちらは [DB/Oracle/XE 環境構築](http://wiki.kurokobo.com/index.php?DB%2FOracle%2FXE%20%B4%C4%B6%AD%B9%BD%C3%DB) を参考にさせてもらいました。

## 表領域を作成しテーブルを作成してみる
もう oracle の世界ですが…まあ、メモ程度にｗ

```
$ cd /u01
$ sudo mkdir data
$ sudo chown oracle:oracle data
$ sqlplus system/passwd@XE
SQL> create tablespace MY_DATA datafile '/u01/MY_DATA.dbf' size 200M segment space management auto;
SQL> conn usr01
SQL> create table emp
(
  emp_id char(3) ,
  job_id char(3) ,
  emp_name varchar2(10) ,
  primary key( emp_id, job_id )
) tablespace MY_DATA;
SQL> desc emp;
```

# 参考にさせていただきました！
> [CentOSにOracleを入れる ](http://blog.katashiyo515.com/entry/2013/12/23/192352)
> [Linux版Oracle 11g XEのインストール](http://blog.katashiyo515.com/entry/2013/12/23/192352)
> [ORACLE/TABLESPACE ](http://centromezzo.sakura.ne.jp/wiki/?ORACLE%2FTABLESPACE)