Oracle Database 19c インストール奮闘記 (in VM)

こんにちは，一応DevOpsエンジニアのTomです．

今いろいろあってOracle Databaseの勉強をしています．
テキストやらに沿って実際に構築して学習していこうと思い，VMに構築していったのですがなかなかうまく行かず．．．

いろいろ調べてセットアップまで至ることができたので，ここで書いていこうと思います．

## 各種マテリアルと結論
https://www.oracle.com/jp/a/tech/docs/technical-resources/19c-sidb-installationguide.pdf

ユーザ作成の手順など，大まかこの通りにやっておけば大丈夫だと思います．
（アプリのインストールのように一筋縄では行きませんが．．）

あと後述しますが，OSはOracle Linux 7.9をおすすめします．
下記，エラーに関してはどのようなものか軽く触れますが，パッケージが足りないだの何だのは盲目的に対応してますのであしからず．．．笑

## 今回構築のプラットフォーム要件
Hypervisor: KVM
vCPU allocation: 2
Memory: 2048 MiB
Storage: 40.00 GiB
OS: Oracle Linux 7.9 (重要)

AlmaやOracle Linux 9ですらうまく行きませんでした．
インストールの過程で同様のエラーが出続けたのですが，結果的にOracle Linux 7.9ではうまく行きました．

https://support.oracle.com/knowledge/Oracle%20Database%20Products/2760289_1.html

https://community.oracle.com/mosc/discussion/4526575/error-in-invoking-target-libasmclntsh19-ohso-libasmperl19-ohso-client-sharedlib-of-makefile

Linuxインストールはこちら（2024/04/27現在でインストール可能）
https://yum.oracle.com/oracle-linux-isos.html

そして私の場合，ホストOSからVMに対してX転送して作業しました．
（ここにイメージ図を放りこもう）

同様の構築をされる際は下記お試しください．
```shell: ssh
# VM内で作成済みのユーザ（おそらくoracleかと思います）
ssh -X oracle@[VMのIPアドレス] 
# ログインできたらインストーラを立ち上げる
[oracle@localhost home]$ ./runInstaller 
```

:::note info
JenkinsやKubernetesでもそうですが，リモートでGUIを操作できるのはハッカー感があってテンションが上がります．
:::

# 経験したエラーの種類と対策
### 1. /oracledb/home/perl/bin/perl: error while loading shared libraries: libnsl.so.1: cannot open shared object file: No such file or directory

原因： libnsl.soがインストールされていない
対策： インストールする（そのまま）


```shell: インストールコマンド
sudo yum install libnsl
```

### 2. [INS-08101] Unexpected error while executing the action at state: 'supportedOSCheck' Summary  - java.lang.NullPointerException 

![Screenshot from 2024-03-31 16-11-21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2918716/c218d09b-b9c5-e290-85ed-601b0d52723e.png)

原因： エラーの表記上はOSがサポートしているかどうかをチェックするフェーズでコケていそう．
対策： export CV_ASSUME_DISTID='OL7'で環境変数を設定

Cluster Verification Utility
https://docs.oracle.com/cd/E57425_01/121/CWADD/GUID-C3B4C5FF-DD8F-495F-A656-476DE533E5E9.htm

後々不整合が出るのはイヤなので，とりあえずContinueせずに解消することにした．
調べるとこのCV_ASSUME_DISTIDは，Condaのインストーラが動作する際にOracle Linux 7 (OL7) を想定して動作することを示した環境変数だとかナントカ．．．
OracleDBのパッケージマネージャが実行環境を認識できていないため，こちらから明示的に教えてあげるものだと認識しました

しかしこんなエラーのサマリが出るんやね．．．

Almaでやっていたときも同様のエラーが検出されて，サポートされていないんかなとドキドキしたが，Oracleでも出た．

### 3. インストーラの画面でパッケージやらカーネルのパラメータがないと怒られる

OS_Kernel_Parameter: rmem_default, rmem_max, wmem_default, wmem_max, aio-max-nr
Package: compat-libcap-1-1.10, libstdc++-devel-4.8.2 (x86_64), sysstat-10.1.5, ksh, make-3.82, glibc-devel-2.17 (x86_64), libaio-devel-0.3.109 (x86_64)

原因： 実行に必要なパラメータを認識できていないのとパッケージが入っていない．
対策： 手順書に記載のパラメータをviで入れてやる

```shell: パラメータと説明
rmem_default: ソケットの受信バッファのデフォルトサイズを設定します。
rmem_max: ソケットの受信バッファの最大サイズを設定します。
wmem_default: ソケットの送信バッファのデフォルトサイズを設定します。
wmem_max: ソケットの送信バッファの最大サイズを設定します。
aio-max-nr: 同時に処理できる非同期I/O操作の最大数を設定します。
compat-libcap-1-1.10: 互換性のあるlibcapライブラリが必要です。
libstdc++-devel-4.8.2 (x86_64): C++標準ライブラリの開発パッケージが必要です。
sysstat-10.1.5: システムの統計情報を収集するためのsysstatツールが必要です。
ksh: Kornシェルが必要です。
make-3.82: ビルドプロセスのためのmakeツールが必要です。
glibc-devel-2.17 (x86_64): GNU Cライブラリの開発パッケージが必要です。
libaio-devel-0.3.109 (x86_64): Linuxの非同期I/Oライブラリの開発パッケージが必要です。
```
```shell: OS側パラメータ設定の2コマンド
vi /etc/sysctl.conf
# Oracle Database kernel parameters
kernel.rmem_default = 262144
kernel.rmem_max = 4194304
kernel.wmem_default = 262144
kernel.wmem_max = 1048576
fs.aio-max-nr = 1048576
# 区別できるようにコメントアウトまで書きました
sysctl -p
# 反映をお忘れなきよう 
```

Oracleの場合は `/proc/sys/net/core/` 配下に格納されます．

値は下記も合わせて参照ください．

https://docs.oracle.com/cd/E96517_01/ladbi/minimum-parameter-settings-for-installation.html#GUID-CDEB89D1-4D48-41D9-9AC2-6AD9B0E944E3

Appendix （swapとパッケージの問題はコマンドを書かないでおく）
別のOSで挑戦される方は再起動するタイミングで，ライブラリがないと怒られることがあると思います．その際は，以下をお試し下さい．

```shell: パラメータと説明
yum install compat-libcap-1-1.10 libstdc++-devel sysstat ksh make glibc-devel libaio-devel
# libcapやらがないらしい．ほかをインストールして...

curl -o compat-libcap1-1.10-7.el7.x86_64.rpm http://mirror.centos.org/centos/7/os/x86_64/Packages/compat-libcap1-1.10-7.el7.x86_64.rpm
# リポジトリにないものはcurlでダウンロード．
sudo yum -y localinstall compat-libcap1-1.10-7.el7.x86_64.rpm
# localinstallのサブコマンドでインストールします

curl -o compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm
# まだまだ足りないと怒られます．
rpm -ivh compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm
# 懲りずにインストールしてください．依存性の関係で一個ずつ怒られているのかな？

```
参考） https://hellomyworld.net/posts/oracle-19c-preinstall-rpm-failed-by-nothing-provides-combat/


### 4. Error in invoking target 'libasmclntsh19.ohso libasmperl19.ohso client_sharedlib' of makefile '/oracledb/home/rdbms/lib/ins_rdbms.mk'. See '/tmp/InstallActions2024-03-30_03-34-41PM/installActions2024-03-30_03-34-41PM.log' for details.

通称11%のラスボス．ここでかなりハマりました．サンプルイメージは下記．

![Screenshot from 2024-03-31 17-36-33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2918716/5066a8a1-d7f6-0a8f-907c-09ffe175023b.png)

原因： よくわからん．なんでmakeに失敗するねん．ChatGPTに投げてみると，
> エラーメッセージから推測すると、Oracle Databaseのインストール中にmakeコマンドが失敗したようです。特に、libasmclntsh19.ohso, libasmperl19.ohso, client_sharedlibというターゲットが問題を引き起こしているようです。

んー，なんで？w
パッケージは揃って入ってるから，内部的な問題しかなさそうやけど．．．
日本から海外まで，大量のサイトを漁りましたが，有益なものがなく．．
改めてベーシックに戻り，上記のOracle公式の手順書を見つけ出しました．

対策： ここで初めてOSを変えました．というのもいろいろ調べたところ下記で顕在のバグであり，OPatchのインストールで回避できるそう．しかしこれには契約が必要のようです．
ベンダーだなぁと思いつつ，個人レベルでどうにかできないかということでOracle Linux 7.9にインストールしました．インストール時にシェルスクリプトを噛ませる方法なんかも見ましたが，僕はそのスクリプトもダウンロードができませんでした．
(Oracle Grid Infrastructure https://docs.oracle.com/cd/F19136_01/cwlin/installing-oracle-grid-infrastructure.html)

(多分違うなこれ．GridをインストールするときにOPatch
が必要なんや．https://qiita.com/plusultra/items/7dae26a702e3aa9ab059）

https://stackoverflow.com/questions/77618776/error-in-invoking-target-libasmclntsh19-ohso-libasmperl19-ohso-client-sharedlib

https://updates.oracle.com/Orion/SimpleSearch/process_form?search_type=patch&patch_number=35775632&plat_lang=226P&display_type=&search_style=8&orderby=&direction=&old_type_list=&gobuttonpressed=&sortcolpressed=&tab_number=&c_release_parent=product&c_product_child=release

コネコネしていると．．．！

![Screenshot from 2024-04-15 22-11-44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2918716/8b1a9a48-ac2a-5854-9ab7-3be888ae4dc8.png)

いけた！！！
一度セットアップしたOSを捨てて，再スタートを切るのは勇気が必要でしたが，やってよかったです．インストール中，11%で止まった時に「まだダメかなぁ」と思いましたが，乗り切ってくれました．

# 結論
現在Oracle Masterに挑戦したいのでOracleを選びましたが，ただのDBの勉強としてやるのであれば快適性を重視してMySQLとかの方も十分検討してみてもいいのではないかと思いました．
個人レベルでやるにはコミュニティがちゃんとしてるのソフトを選ぶのが一番ですね．．．
次回は構築の段階でエラーを起こしているので，Express Manager編も取り扱います！