Appleシリコン搭載MacにOracle Grid InfrastructureとDatabaseをインストールしたメモ

# やったこと
1. M1等のAppleシリコン搭載Macで動作するハイパーバイザーである「UTM」を利用してOracle LinuxのVMを作成
1. Oracle Gird Infrastructure(ARM版)をインストール
1. Oracle Restart構成でOracle Database(ARM版)をインストール

# 事前準備：Homebrewのインストール
今回はHomebrewを利用してUTMをインストールするため、まだbrewをインストールしていない場合はインストールする
Macでコンソールを開き、以下のコマンドを実行する
```
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
$ (echo; echo 'eval "$(/opt/homebrew/bin/brew shellenv)"') >> /Users/<username>/.zprofile
$ eval "$(/opt/homebrew/bin/brew shellenv)"
```

# UTMのインストール
ここではHomebrewを使ってインストールをおこなう
Macでコンソールを開き、以下のコマンドを実行する
```
$ brew install utm
```

# Oracle Linux 8のVM構築
* ARM版Oracle DatabaseがサポートされているのはOracle Linux8.6以降になる
下記のサイトからOracle Linux8（aarch64）の入手可能な最新のリリースをダウンロードする
例：OracleLinux-R8-U9-Server-aarch64-dvd.iso

https://yum.oracle.com/oracle-linux-isos.html

* UTMでダウンロードしたisoファイルを使ってOracle Linux8を構築する
    * 「仮想化」と「エミュレート」は「仮想化」を選択
    * 「オペレーティングシステム」は「Linux」を選択
    * 「起動ISOイメージ」にダウンロードしたISOファイルを選択
    * その他項目は必要に応じて調整してVMを作成する（デフォルトのままでもよい）
    * 作成したVMを起動する
        * インストーラー画面に従ってインストールを進める
        * 「時刻と日付」がアメリカになっているので、必要に応じて修正する
        * 「ネットワークとホスト名」で「ホスト名」を任意のホスト名に修正する
        * 「ネットワークとホスト名」で「オフ/オン」のトグルスイッチをクリックし、「オン」にする
        * 「ネットワークとホスト名」で「設定」をクリックしてネットワークの設定をおこなう
            * IPv6設定は使用しないので「無効」にしておく
            * IPv4設定は「手動」にし、「アドレス」、「ネットマスク」、「ゲートウェイ」、「DNSサーバ」を設定する
メイン画面にDHCPから取得した情報が表示されているので、それを設定してもよい
        * rootのパスワードを設定し、「インストールの開始」をクリックする

# Grid Infrastructureのインストール

* rootユーザーでoracle-database-preinstall-19cをインストールする
  ```
  # dnf install oracle-database-preinstall-19c
  ```
　
* ASM用のグループを作成する
  ```
  # groupadd -g 54327 asmdba
  # groupadd -g 54328 asmoper
  # groupadd -g 54329 asmadmin
  ```
　
* インストール用のユーザーを作成し、パスワードを設定する
  ```
  # useradd -u 54331 -g oinstall -G asmadmin,asmdba,asmoper,dba,racdba grid
  # passwd grid
  ```
　
* インストールディレクトリを作成する
  ```
  # mkdir -p /u01/app/grid/product/19.0.0/grid
  # mkdir /u01/app/oraInventory
  # chown -R grid:oinstall /u01/app
  # chmod -R 775 /u01/app
  ```
　
* hostsにエントリを追加する
  ```
  vi /etc/hosts
  ```
  「[IPアドレス] 　[ホスト名].[ドメイン名]　 [ホスト名]」のエントリを追加する
　
* ASM用のディスクを追加する(※ ARM版ではASMFDやASMLIBは使用できない)
  * Linuxをシャットダウンし、UTMの画面からディスクを追加する
インターフェイスは「SCSI」を選択する
　
* Linuxを起動し、パーティションを作成する（ここではsda, sdb, sdcを追加したとする）
  ```
  # parted /dev/sda mklabel msdos
  # parted /dev/sda mkpart primary 2048s 100%
  # parted /dev/sdb mklabel msdos
  # parted /dev/sdb mkpart primary 2048s 100%
  # parted /dev/sdc mklabel msdos
  # parted /dev/sdc mkpart primary 2048s 100%
  ```
　
* 権限設定をおこなうudevルールを作成する
  ```
  # vi /etc/udev/rules.d/99-oracle-asmdevices.rules
  ```
  * 下記の内容を記載する
  KERNEL=="sda1", OWNER="grid", GROUP="asmadmin", MODE="0660"
  KERNEL=="sdb1", OWNER="grid", GROUP="asmadmin", MODE="0660"
  KERNEL=="sdc1", OWNER="grid", GROUP="asmadmin", MODE="0660"
　
* 設定した内容を反映させる
  ```
  # udevadm control --reload
  # udevadm trigger
  ```
　
* 下記のサイトからインストーラー（LINUX.ARM64_1919000_grid_home.zip）をダウンロードする

https://www.oracle.com/database/technologies/oracle19c-linux-arm64-downloads.html

 
* gridユーザーでダウンロードしたファイルを展開し、インストールをおこなう
  ```
  $ cd /u01/app/grid/product/19.0.0/grid
  $ unzip -q /home/grid/ダウンロード/LINUX.ARM64_1919000_grid_home.zip
  $ cd /u01/app/grid/product/19.0.0/grid/
  $ ./gridSetup.sh
  ```
  * 「スタンドアロン・サーバー用のOracle Grid Infrastructure(Oracle Restart)の構成」を選択
  * ASMディスクは準備したディスクを選択（ここでは/dev/sda1, /dev/sdb1, /dev/sdc1）
  * Oracleベースは「/u01/app/grid」
  * インベントリは「/u01/app/oraInventory」


# DBのインストール
* oracleユーザーにパスワードを設定し、operグループを追加
  ```
  # passwd oracle
  # usermod -a -G oper oracle
  ```
　
* インストールディレクトリの作成と権限の調整
  ```
  # mkdir -p /u01/app/oracle/product/19.0.0/dbhome_1
  # chown -R oracle:oinstall /u01/app/oracle
  # chown -R oracle:oinstall /u01/app/oraInventory
  ```
　
* 下記のサイトからインストーラー（LINUX.ARM64_1919000_db_home.zip）をダウンロードする


https://www.oracle.com/database/technologies/oracle19c-linux-arm64-downloads.html


* oracleユーザーでダウンロードしたファイルを展開し、インストールをおこなう
  ```
  $ cd /u01/app/oracle/product/19.0.0/dbhome_1/
  $ unzip -q ~/ダウンロード/LINUX.ARM64_1919000_db_home.zip
  $ ./runInstaller
  ```
  * 構成オプションは「ソフトウェアのみの設定」を選択
  * インストールタイプは「単一インスタンス・データベースのインストール」を選択
  * Oracleベースは「/u01/app/oracle」
  * インベントリは「/u01/app/oraInventory」


# DBの作成
* oracleユーザーの環境変数を設定する
  ```
  $ export ORACLE_BASE=/u01/app/oracle
  $ export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
  $ export PATH=$ORACLE_HOME/bin:$PATH
  ```
* dbcaを実行してDBを作成する
  ```
  dbca
  ```
  * 「記憶域タイプ」は「ASM」が選択されていなければ選択する
  * （拡張構成を選択した場合）リスナーはgrid配下のリスナーが表示される
  * （拡張構成を選択した場合）「グローバル・ポートとしてEM Database Expressポートを構成」にチェックを入れるとPDBも管理できる