Oracle Database Express Edition を Azure VM にインストールしてみた

## 背景と目的

Azure VM 上の Oracle Database を本番環境として使う場合は、Ultra Disk を使ったり Oracle Data Guard を構成したりしなければなりませんが、今回は検証環境を用意する目的で単一仮想マシン内に Oracle Database Express Edition をインストールしてみました。なお、Oracle Database は OTN 開発者ライセンスに基づいて使用します。

## 前提条件

コマンドの実施環境は、Mac + Azure CLI です。

```bash:bash
$ sw_vers
ProductName:    macOS
ProductVersion: 12.3.1
BuildVersion:   21E258

$ az version
{
  "azure-cli": "2.35.0",
  "azure-cli-core": "2.35.0",
  "azure-cli-telemetry": "1.0.6",
  "extensions": {}
}
```

## 検証用の仮想マシンを作る

```bash:bash
# 環境変数をセットします
region=japaneast
prefix=mnrora

# リソースグループを作成します
az group create \
  --name ${prefix}-rg \
  --location $region

# パスワードを生成します
vmpass=$(openssl rand -base64 8)
echo $vmpass

# 仮想マシンを作成します
az vm create \
  --resource-group ${prefix}-rg \
  --name ${prefix}-vm \
  --os-disk-name ${prefix}-vmOSDisk \
  --image CentOS \
  --size Standard_DS2_v2 \
  --admin-username azureuser \
  --admin-password $vmpass \
  --nsg-rule NONE \
  --public-ip-address-dns-name ${prefix} \
  --storage-sku StandardSSD_LRS

# SSH 用ポートを自身の IP アドレスから許可します
az network nsg rule create \
  --resource-group ${prefix}-rg \
  --name Allow-SSH \
  --nsg-name ${prefix}-vmNSG \
  --priority 100 \
  --source-address-prefixes $(curl -s inet-ip.info) \
  --destination-port-ranges 22 \
  --access Allow \
  --protocol Tcp

# Oracle Enterprise Manager 用ポートを自身の IP アドレスから許可します
az network nsg rule create \
  --resource-group ${prefix}-rg \
  --name Allow-EM \
  --nsg-name ${prefix}-vmNSG \
  --priority 200 \
  --source-address-prefixes $(curl -s inet-ip.info) \
  --destination-port-ranges 5500 \
  --access Allow \
  --protocol Tcp

# SSH 接続します
ssh azureuser@${prefix}.$region.cloudapp.azure.com
```

## Oracle Database をインストール

```bash:bash
# root で作業します
sudo su -

# RPM をダウンロードします
wget https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracle-database-preinstall-21c-1.0-1.el7.x86_64.rpm
wget https://download.oracle.com/otn-pub/otn_software/db-express/oracle-database-xe-21c-1.0-1.ol7.x86_64.rpm

# Oracle Database をインストールします
yum -y localinstall oracle-database-pre*
yum -y localinstall oracle-database-xe*

# Oracle Database を初期設定します（任意のパスワードを入力します）
/etc/init.d/oracle-xe-21c configure

# oracle ユーザーで動作確認します
su - oracle

# 環境変数をセットします
export ORACLE_SID=XE
export ORAENV_ASK=NO
. /opt/oracle/product/21c/dbhomeXE/bin/oraenv

# oracle ユーザーに SYSDBA 特権が付与されているのを確認します
sqlplus / as sysdba

# リスナーの起動状態を確認します
lsnrctl status

# system ユーザーでログインします（初期設定時のパスワードを入力します）
sqlplus system@localhost:1521

# Oracle Enterprise Manager をローカル以外からも接続出来るようにします
sqlplus system
EXEC DBMS_XDB.SETLISTENERLOCALACCESS(FALSE);

# oracle ユーザーから抜けます
exit

# システムステータスを確認します
/etc/init.d/oracle-xe-21c status

# システム起動時に Oracle Database が自動起動するようにします
systemctl daemon-reload
systemctl enable oracle-xe-21c
```

## 参考

```bash:bash
# リソースグループを削除します
az group delete \
  --name ${prefix}-rg \
  --yes
```

<https://docs.microsoft.com/ja-jp/azure/virtual-machines/workloads/oracle/oracle-database-quick-create>

<https://docs.oracle.com/en/database/oracle/oracle-database/21/xeinl/installing-oracle-database-xe.html#GUID-728E4F0A-DBD1-43B1-9837-C6A460432733>