CentOS7にOracle Database XEのインストール（t2.microインスタンス編）

# 前置き
とある案件の開発用にEC2のインスタンスを立てて
Oracle Database XEをインストールする際に色々グダッた事の記録。

まずは公式ドキュメントを読む良い子スタイル
https://docs.oracle.com/cd/E96517_01/xeinw/installing-oracle-database-xe.html#GUID-8A8E5F6D-F00E-40BD-B74D-A41CCC502AE9

`前提条件として、Oracle Database XEのインストールでは、/optの下の9GBのディスク領域が消費されます。このディスク・パーティションに必要なディスク領域がない場合、スペースを追加するか、代替パーティションを/opt/oracleとしてマウントする必要があります。このディスク・パーティションは、ソフトウェアおよびデータベースが存在する定義済Oracleベースです。`
### おそロシア。

なのでEBSは30GBにした。
スワップファイルの作成もした方がいいんでしょうね。いそいそ4GBの領域を作る。
そもそもですが、インスタンスタイプはt2.microなんかじゃなく最低でもt3.mideumとかに変えた方がいいと思った。とはいえ無駄に経費を使うわけにはいかないのでt2.microインスタンスという環境で続行。

# インストール
**・Red Hat互換Linuxディストリビューションの場合、次のコマンドを使用してDatabase Preinstallation RPMをダウンロードしてインストールします。**

```Bash
curl -o oracle-database-preinstall-18c-1.0-1.el7.x86_64.rpm https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracle-database-preinstall-18c-1.0-1.el7.x86_64.rpm
sudo yum localinstall oracle-database-preinstall-18c-1.0-1.el7.x86_64.rpm
```

**・Oracle Technology Networkから、Oracle Database RPMベースのインストールのソフトウェア・ダウンロード・ページに**
https://www.oracle.com/technetwork/database/database-technologies/express-edition/downloads/index.html

`RPMベースのインストールの実行に必要なoracle-database-xe-18c-1.0-1.x86_64.rpmファイルを選択済のディレクトリにダウンロード。yum localinstallコマンドを使用して、データベース・ソフトウェアをインストール。`

```Bash
wget https://download.oracle.com/otn-pub/otn_software/db-express/oracle-database-xe-18c-1.0-
sudo yum localinstall oracle-database-xe-18c-1.0-1.x86_64.rpm
```
こんなメッセージが出てインストールは完了しない。

```
[SEVERE] Oracle Database 18c Express Edition requires a minimum of 1GB of physical
memory (RAM).  This system has 971 MB of RAM and does not meet minimum
requirements
```
メモリが足りないと言われているのは分かるけど、4GBのswap領域でもアカンのかって事で
swapを足す。プラスして８GBの領域を作っても**無駄無駄無駄無駄**とDio様の如くOracle様に軽くシバかれる。

# エラー解消方法

ググるとこんな話が。
http://www.oaktable.net/content/how-install-oracle-xe-18c-oracle-cloud-free-tier
マシンは実際には971MBのRAMを持ち、Oracle XE 18cでは低くなり、RPMファイルをインストールしようとするとエラーが発生します。

なるほど
ここに至っては親切にrpmパッケージをrebuildしろとな。
https://dev.to/project42/install-oracle-database-xe-in-oracle-cloud-free-tier-vms-5akl

説明通りのyumでインストール出来なかったので、RPM Searchに行って該当のrpmパケージを落とす事にします。
http://rpm.pbone.net/
＊アドバンスドモードでcentos7を選択して「rpmrebild」でサーチ

```Bash
wget ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/home:/matthewdva:/build:/EPEL:/el7/CentOS_7/noarch/rpmrebuild-2.11-3.el7.noarch.rpm
sudo rpm -ivh rpmrebuild-2.11-3.el7.noarch.rpm
```
rpmrebildのインストールが上手くいったらRPMファイルの編集へ。

**・Edit the RPM and change the following Memory restrictions option:**
（RPM を編集し、次のメモリ制限オプションを変更します。）
＊ここからはrootで実行

```Bash
time rpmrebuild -e -p oracle-database-xe-18c-1.0-1.x86_64.rpm
```

するとviエディタで開かれるので、メモリチェックしている該当箇所にたどり着き値を変更する。

```diff
# Check and disallow install, if RAM is less than 1 GB
space=`cat /proc/meminfo | grep '^MemTotal' | awk '{print $2}'`
- PhyMem=`expr $space / 1024`
+ PhyMem=`expr $space / 100`
swapspace=`free -m | grep Swap | awk '{print $4}'`
for a number 100 (for example)
```

:wqで抜けてyを選択。

特に問題がなければ下記の様なリザルトが出力される。

```Bash
result: /hoge/rpmbuild/RPMS/x86_64/oracle-database-xe-18c-1.0-1.x86_64.rpm
```
rebuild出来たらインストールを実行

```Bash
yum install /hoge/rpmbuild/RPMS/x86_64/oracle-database-xe-18c-1.0-1.x86_64.rpm
```
```Bash
インストール:
  oracle-database-xe-18c.x86_64 0:1.0-1                                                                                                             

完了しました!
```
何とかインストールが成功

# Oracle Databaseの作成および構成
サービス構成スクリプトを実行

```Bash
/etc/init.d/oracle-xe-18c configure
```
を叩いたのですが、またか！ってな具合でメモリチェックに引っ掛かります。
既に何度もメモリチェックに引っ掛かり、いくぶん小慣れた私はサクッと編集を選択。

```bash
vim /etc/init.d/oracle-xe-18c
```
```diff
- MEMORY_CONSTRUCT="-initParams sga_target=${sga}M,pga_aggregate_target=${pga}M"
+ MEMORY_CONSTRUCT="-initParams sga_target=500M,pga_aggregate_target=400M"
```
再実行

```Bash
/etc/init.d/oracle-xe-18c configure
```
```Bash
Specify a password to be used for database accounts. Oracle recommends that the password entered should be at least 8 characters in length, contain at least 1 uppercase character, 1 lower case character and 1 digit [0-9]. Note that the same password will be used for SYS, SYSTEM and PDBADMIN accounts:
Confirm the password:
Configuring Oracle Listener.
Listener configuration succeeded.
Configuring Oracle Database XE.
[WARNING] [DBT-11209] 現在の使用可能メモリーは、データベースの作成に必要な使用可能メモリー(900MB)を下回っています。
   原因: 次のノードには必要な使用可能メモリーがありません:
 ノード:ip-xxx-xxx-xxx-xxx         使用可能なメモリー:669.6133MB (685684.0KB)

SYSユーザー・パスワードを入力してください: 
**** 
SYSTEMユーザー・パスワードを入力してください: 
*****
PDBADMINユーザー・パスワードを入力してください: 
*****
DB操作の準備
7%完了
データベース・ファイルのコピー中
29%完了
Oracleインスタンスの作成および起動中
30%完了
31%完了
34%完了
38%完了
41%完了
43%完了
データベース作成の完了
47%完了
50%完了
プラガブル・データベースの作成
54%完了
71%完了
構成後アクションの実行
93%完了
カスタム・スクリプトを実行中
100%完了
データベースの作成が完了しました。詳細は、次の場所にあるログ・ファイルを参照してください:
/opt/oracle/cfgtoollogs/dbca/XE。
データベース情報:
グローバル・データベース名:XE
システム識別子(SID):XE
詳細はログ・ファイル"/opt/oracle/cfgtoollogs/dbca/XE/XE1.log"を参照してください。

Connect to Oracle Database using one of the connect strings:
     Pluggable database: ip-xxx-xxx-xxx-xxx.ap-xxxx.compute.internal/XEPDB1
     Multitenant container database: ip-xxx-xxx-xxx-xxx.ap-xxxx.compute.internal
Use https://localhost:5500/em to access Oracle Enterprise Manager for Oracle Database XE
```
パスワード設定とかありますのでちゃんと入力する。

**あぁあぁあぁしんどい**
**しんどいわ**

ここまで来るのにパワーを使い果たした気がしたので接続設定等は後回しに。
とりあえず何が言いたいかというと**インスタンスタイプは絶対ケチんなよ**です。
ケチって良いことあったためしない。

では素敵なOracleライフを。