CentOS Stream 8にOracle Database 23c Freeをインストールしてみた

## はじめに
2023年4月に、Oracle Database 23c Free(以下、23cFree)の提供が開始されました。
従来でいうところのXEに似たものになるかと思いますが、XEは正式版がリリースされた後に提供されていましたが、今回はFreeが先行して提供されています。

Oracle Database 23cは、19c以降で初のLong Term Releaseになり、非CDBがサポート外になる初めてのバージョンになります。

正式版のリリース時期は未定で、23cFreeと正式版とでは機能的にも差異があるようですが、どのようなものなのか、先行調査をしてみるべく、まずはインストールをしてみました。

以前よく利用していたCentOSは、もう利用できないものとばかり思っていたのですが、CentOS Stream 8(9も)が利用できる事を今更ながら知ったので、今回は、CentOS Stream 8に23cFreeをインストールしてみる事にします。

また、せっかくなので、CentOS Stream 8環境にOracle Databaseを入れる際にやっておいた方がよい設定について、改めて整理してみる事にしました。

23cFreeについての記事は、以下を参照ください。

https://qiita.com/nakaie/items/9992477e801c400aa7c6

https://cosol.jp/techdb/2023/04/oracle_23c_free_released/

## CentOS Stream 8のインストール
ISOイメージのダウンロードやインストールについては、以下の記事などを参照ください。
今回は、OracleVM上に環境を構築しました。

https://server-network-note.net/2021/02/centosstream8-install/

## CentOS Stream 8の設定
23cFreeを入れる前に念のためお約束のOS設定をしておきます。

CentOS Stream 8では、OSインストール時にOSアカウントを作成すると自動で「wheel」グループに追加されるので、お作法的にはsudoで以下の設定を行うべきなのですが、便宜的にrootユーザーで操作をしています。

#### SELinuxの無効化
`/etc/selinux/config`を編集し、SELINUXの値をdisabledにしてOSを再起動します。
```bash
[root@centos8stream ~]# vim /etc/selinux/config 

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
#SELINUX=enforcing
SELINUX=disabled
# SELINUXTYPE= can take one of these three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

[root@centos8stream ~]# 
[root@centos8stream ~]# reboot
```
#### Firewalldの無効化
Firewalldの停止、無効化をします。
```bash
[root@centos8stream etc]# systemctl stop firewalld
[root@centos8stream etc]# systemctl disable firewalld
```
#### journaldの設定変更
syslogの設定を変更し、ディスクに永続化するようにします。
```bash
[root@centos8stream ~]# vim /etc/systemd/journald.conf 
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.
#
# Entries in this file show the compile time defaults.
# You can change settings by editing this file.
# Defaults can be restored by simply deleting this file.
#
# See journald.conf(5) for details.

[Journal]
Storage=persistent
#Compress=yes
#Seal=yes
#SplitMode=uid
#SyncIntervalSec=5m
RateLimitIntervalSec=0
RateLimitBurst=0
#SystemMaxUse=
#SystemKeepFree=
#SystemMaxFileSize=
#SystemMaxFiles=100
#RuntimeMaxUse=
#RuntimeKeepFree=
#RuntimeMaxFileSize=
#RuntimeMaxFiles=100
#MaxRetentionSec=
#MaxFileSec=1month
#ForwardToSyslog=no
#ForwardToKMsg=no
#ForwardToConsole=no
#ForwardToWall=yes
#TTYPath=/dev/console
#MaxLevelStore=debug
#MaxLevelSyslog=debug
#MaxLevelKMsg=notice
#MaxLevelConsole=info
#MaxLevelWall=emerg
#LineMax=48K
SystemMaxUse=1G

[root@centos8stream ~]# systemctl restart systemd-journald
```

#### NTPサーバー設定
NTPサーバーを指定し、時刻同期設定をslewモードに変更します。
今回は、NTPサーバーに`jp.pool.ntp.org`を指定しました。
```bash
[root@centos8stream ~]# vim /etc/chrony.conf 
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
#pool 2.centos.pool.ntp.org iburst
server jp.pool.ntp.org prefer iburst

# Record the rate at which the system clock gains/losses time.
driftfile /var/lib/chrony/drift

# Allow the system clock to be stepped in the first three updates
# if its offset is larger than 1 second.
makestep 1.0 3

# Enable kernel synchronization of the real-time clock (RTC).
rtcsync

# Enable hardware timestamping on all interfaces that support it.
#hwtimestamp *

# Increase the minimum number of selectable sources required to adjust
# the system clock.
#minsources 2

# Allow NTP client access from local network.
#allow 192.168.0.0/16

# Serve time even if not synchronized to a time source.
#local stratum 10

# Specify file containing keys for NTP authentication.
keyfile /etc/chrony.keys

# Get TAI-UTC offset and leap seconds from the system tz database.
leapsectz right/UTC

# Specify directory for log files.
logdir /var/log/chrony

# Select which information is logged.
#log measurements statistics tracking

leapsecmode slew

[root@centos8stream ~]# systemctl restart chronyd
```

#### OSのタイムゾーンの確認と変更(必要に応じて)
OSインストール時にGUIでOSのタイムゾーンを「Asia/Tokyo」に指定していたのですが、何故か「America/New_York (EDT)」になっていたので、OSのタイムゾーンを変更します。
```bash
[root@centos8stream ~]# timedatectl status
               Local time: 火 2023-05-16 07:38:20 EDT
           Universal time: 火 2023-05-16 11:38:20 UTC
                 RTC time: 火 2023-05-16 11:38:21
                Time zone: America/New_York (EDT, -0400)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no
[root@centos8stream ~]# 
[root@centos8stream ~]# timedatectl set-timezone Asia/Tokyo
[root@centos8stream ~]# 
[root@centos8stream ~]# timedatectl status
               Local time: 火 2023-05-16 20:39:19 JST
           Universal time: 火 2023-05-16 11:39:19 UTC
                 RTC time: 火 2023-05-16 11:39:20
                Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no
[root@centos8stream ~]# 
```

#### hostsの設定
/etc/hostsの設定をします。
```bash
[root@centos8stream etc]# vim /etc/hosts
192.168.XXX.XXX  centos8stream
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
```

## 23cFreeのインストール
正式版のOracleをLinuxにインストールする場合、oracleユーザー、oinstallなどのグループ作成、カーネルパラメータの設定など、事前に色々とする必要がありますが、23cFreeの場合、2つのrpmパッケージをインストールする事で、ほぼお任せでインストールができます。

インストール用のRPMは、以下のサイトからダウンロード可能です。

https://www.oracle.com/jp/database/technologies/free-downloads.html

上記サイトから以下2つのRPMをダウンロードし、サーバーに配置しておきます。
【Preinstall RPMs for RHEL and CentOS】
`oracle-database-preinstall-23c-1.0-0.5.el8.x86_64.rpm`

【Oracle Database 23c Free Developer-Release for Linux x64 (OL8 or RHEL8)】
`oracle-database-free-23c-1.0-1.el8.x86_64.rpm`

23cFreeのインストールおよびデータベースの作成は、以下を参照して実施しました。

https://qiita.com/500InternalServerError/items/45b4dd0cfc04fb1bab5e

#### oracle-database-preinstall-23cのインストール
Oracleのインストールに必要となるパッケージをよしなに入れたり、更新してくれます。
```bash
[root@centos8stream ~]# dnf localinstall oracle-database-preinstall-23c-1.0-0.5.el8.x86_64.rpm 
メタデータの期限切れの最終確認: 0:22:46 時間前の 2023年05月15日 04時41分12秒 に実施しました。
依存関係が解決しました。
======================================================================================================================================================================================
 パッケージ                                            アーキテクチャー              バージョン                                             リポジトリー                        サイズ
======================================================================================================================================================================================
インストール:
 oracle-database-preinstall-23c                        x86_64                        1.0-0.5.el8                                            @commandline                         30 k
依存関係のインストール:
 compat-openssl10                                      x86_64                        1:1.0.2o-4.el8                                         appstream                           1.1 M
 glibc-devel                                           x86_64                        2.28-225.el8                                           baseos                               83 k
 glibc-headers                                         x86_64                        2.28-225.el8                                           baseos                              488 k
 kernel-headers                                        x86_64                        4.18.0-490.el8                                         baseos                               11 M
 ksh                                                   x86_64                        20120801-257.el8                                       appstream                           929 k
 libnsl                                                x86_64                        2.28-225.el8                                           baseos                              105 k
 libxcrypt-devel                                       x86_64                        4.1.1-6.el8                                            baseos                               25 k
 lm_sensors-libs                                       x86_64                        3.4.0-23.20180522git70f7e08.el8                        baseos                               59 k
 make                                                  x86_64                        1:4.2.1-11.el8                                         baseos                              498 k
 sysstat                                               x86_64                        11.7.3-9.el8                                           appstream                           426 k

トランザクションの概要
======================================================================================================================================================================================
インストール  11 パッケージ

合計サイズ: 15 M
ダウンロードサイズの合計: 15 M
インストール後のサイズ: 17 M
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
(1/10): sysstat-11.7.3-9.el8.x86_64.rpm                                                                                                               485 kB/s | 426 kB     00:00    
(2/10): ksh-20120801-257.el8.x86_64.rpm                                                                                                               902 kB/s | 929 kB     00:01    
(3/10): compat-openssl10-1.0.2o-4.el8.x86_64.rpm                                                                                                      1.1 MB/s | 1.1 MB     00:01    
(4/10): glibc-devel-2.28-225.el8.x86_64.rpm                                                                                                           228 kB/s |  83 kB     00:00    
(5/10): libnsl-2.28-225.el8.x86_64.rpm                                                                                                                1.2 MB/s | 105 kB     00:00    
(6/10): libxcrypt-devel-4.1.1-6.el8.x86_64.rpm                                                                                                        492 kB/s |  25 kB     00:00    
(7/10): lm_sensors-libs-3.4.0-23.20180522git70f7e08.el8.x86_64.rpm                                                                                    1.1 MB/s |  59 kB     00:00    
(8/10): glibc-headers-2.28-225.el8.x86_64.rpm                                                                                                         721 kB/s | 488 kB     00:00    
(9/10): make-4.2.1-11.el8.x86_64.rpm                                                                                                                  1.1 MB/s | 498 kB     00:00    
(10/10): kernel-headers-4.18.0-490.el8.x86_64.rpm                                                                                                     8.4 MB/s |  11 MB     00:01    
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
合計                                                                                                                                                  2.5 MB/s |  15 MB     00:05     
CentOS Stream 8 - AppStream                                                                                                                           1.5 MB/s | 1.6 kB     00:00    
GPG 鍵 XXXXXXXXXX をインポート中:
 Userid     : "CentOS (CentOS Official Signing Key) <security@centos.org>"
 Fingerprint: XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
これでよろしいですか? [y/N]: y
鍵のインポートに成功しました
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
  準備             :                                                                                                                                                              1/1 
  インストール中   : make-1:4.2.1-11.el8.x86_64                                                                                                                                  1/11 
  scriptletの実行中: make-1:4.2.1-11.el8.x86_64                                                                                                                                  1/11 
  インストール中   : compat-openssl10-1:1.0.2o-4.el8.x86_64                                                                                                                      2/11 
  scriptletの実行中: compat-openssl10-1:1.0.2o-4.el8.x86_64                                                                                                                      2/11 
  インストール中   : lm_sensors-libs-3.4.0-23.20180522git70f7e08.el8.x86_64                                                                                                      3/11 
  scriptletの実行中: lm_sensors-libs-3.4.0-23.20180522git70f7e08.el8.x86_64                                                                                                      3/11 
  インストール中   : sysstat-11.7.3-9.el8.x86_64                                                                                                                                 4/11 
  scriptletの実行中: sysstat-11.7.3-9.el8.x86_64                                                                                                                                 4/11 
  インストール中   : libnsl-2.28-225.el8.x86_64                                                                                                                                  5/11 
  インストール中   : kernel-headers-4.18.0-490.el8.x86_64                                                                                                                        6/11 
  scriptletの実行中: glibc-headers-2.28-225.el8.x86_64                                                                                                                           7/11 
  インストール中   : glibc-headers-2.28-225.el8.x86_64                                                                                                                           7/11 
  インストール中   : libxcrypt-devel-4.1.1-6.el8.x86_64                                                                                                                          8/11 
  インストール中   : glibc-devel-2.28-225.el8.x86_64                                                                                                                             9/11 
  scriptletの実行中: glibc-devel-2.28-225.el8.x86_64                                                                                                                             9/11 
  インストール中   : ksh-20120801-257.el8.x86_64                                                                                                                                10/11 
  scriptletの実行中: ksh-20120801-257.el8.x86_64                                                                                                                                10/11 
  インストール中   : oracle-database-preinstall-23c-1.0-0.5.el8.x86_64                                                                                                          11/11 
  scriptletの実行中: oracle-database-preinstall-23c-1.0-0.5.el8.x86_64                                                                                                          11/11 
  検証             : compat-openssl10-1:1.0.2o-4.el8.x86_64                                                                                                                      1/11 
  検証             : ksh-20120801-257.el8.x86_64                                                                                                                                 2/11 
  検証             : sysstat-11.7.3-9.el8.x86_64                                                                                                                                 3/11 
  検証             : glibc-devel-2.28-225.el8.x86_64                                                                                                                             4/11 
  検証             : glibc-headers-2.28-225.el8.x86_64                                                                                                                           5/11 
  検証             : kernel-headers-4.18.0-490.el8.x86_64                                                                                                                        6/11 
  検証             : libnsl-2.28-225.el8.x86_64                                                                                                                                  7/11 
  検証             : libxcrypt-devel-4.1.1-6.el8.x86_64                                                                                                                          8/11 
  検証             : lm_sensors-libs-3.4.0-23.20180522git70f7e08.el8.x86_64                                                                                                      9/11 
  検証             : make-1:4.2.1-11.el8.x86_64                                                                                                                                 10/11 
  検証             : oracle-database-preinstall-23c-1.0-0.5.el8.x86_64                                                                                                          11/11 

インストール済み:
  compat-openssl10-1:1.0.2o-4.el8.x86_64 glibc-devel-2.28-225.el8.x86_64                   glibc-headers-2.28-225.el8.x86_64  kernel-headers-4.18.0-490.el8.x86_64                  
  ksh-20120801-257.el8.x86_64            libnsl-2.28-225.el8.x86_64                        libxcrypt-devel-4.1.1-6.el8.x86_64 lm_sensors-libs-3.4.0-23.20180522git70f7e08.el8.x86_64
  make-1:4.2.1-11.el8.x86_64             oracle-database-preinstall-23c-1.0-0.5.el8.x86_64 sysstat-11.7.3-9.el8.x86_64       

完了しました!
```

#### Oracle Database Free 23cのインストール
23cFreeのインストールも、パッケージをインストールするだけです。
```bash
[root@centos8stream ~]# dnf localinstall oracle-database-free-23c-1.0-1.el8.x86_64.rpm 
メタデータの期限切れの最終確認: 0:24:11 時間前の 2023年05月15日 04時41分12秒 に実施しました。
依存関係が解決しました。
======================================================================================================================================================================================
 パッケージ                                              アーキテクチャー                      バージョン                           リポジトリー                                サイズ
======================================================================================================================================================================================
インストール:
 oracle-database-free-23c                                x86_64                                1.0-1                                @commandline                                1.6 G

トランザクションの概要
======================================================================================================================================================================================
インストール  1 パッケージ

合計サイズ: 1.6 G
インストール後のサイズ: 5.2 G
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
  準備             :                                                                                                                                                              1/1 
  scriptletの実行中: oracle-database-free-23c-1.0-1.x86_64                                                                                                                        1/1 
  インストール中   : oracle-database-free-23c-1.0-1.x86_64                                                                                                                        1/1 
  scriptletの実行中: oracle-database-free-23c-1.0-1.x86_64                                                                                                                        1/1 
[INFO] Executing post installation scripts...
[INFO] Oracle home installed successfully and ready to be configured.
To configure Oracle Database Free, optionally modify the parameters in '/etc/sysconfig/oracle-free-23c.conf' and then run '/etc/init.d/oracle-free-23c configure' as root.

  検証             : oracle-database-free-23c-1.0-1.x86_64                                                                                                                        1/1 

インストール済み:
  oracle-database-free-23c-1.0-1.x86_64                                                                                                                                               

完了しました!
```
インストール後の状態を確認してみます。

#### oracleユーザー、グループの確認
oracleユーザーおよびグループもよしなに作成されています。
```bash
[root@centos8stream etc]# id oracle
uid=54321(oracle) gid=54321(oinstall) groups=54321(oinstall),54322(dba),54323(oper),54324(backupdba),54325(dgdba),54326(kmdba),54330(racdba)
```
#### カーネルパラメータの確認
HugePageの設定以外は、よしなに設定されています。
```bash
[root@centos8stream etc]# cat sysctl.conf
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).

# oracle-database-preinstall-23c setting for fs.file-max is 6815744
fs.file-max = 6815744

# oracle-database-preinstall-23c setting for kernel.sem is '250 32000 100 128'
kernel.sem = 250 32000 100 128

# oracle-database-preinstall-23c setting for kernel.shmmni is 4096
kernel.shmmni = 4096

# oracle-database-preinstall-23c setting for kernel.shmall is 1073741824 on x86_64
kernel.shmall = 1073741824

# oracle-database-preinstall-23c setting for kernel.shmmax is 4398046511104 on x86_64
kernel.shmmax = 4398046511104

# oracle-database-preinstall-23c setting for kernel.panic_on_oops is 1 per Orabug 19212317
kernel.panic_on_oops = 1

# oracle-database-preinstall-23c setting for net.core.rmem_default is 262144
net.core.rmem_default = 262144

# oracle-database-preinstall-23c setting for net.core.rmem_max is 4194304
net.core.rmem_max = 4194304

# oracle-database-preinstall-23c setting for net.core.wmem_default is 262144
net.core.wmem_default = 262144

# oracle-database-preinstall-23c setting for net.core.wmem_max is 1048576
net.core.wmem_max = 1048576

# oracle-database-preinstall-23c setting for net.ipv4.conf.all.rp_filter is 2
net.ipv4.conf.all.rp_filter = 2

# oracle-database-preinstall-23c setting for fs.aio-max-nr is 1048576
fs.aio-max-nr = 1048576

# oracle-database-preinstall-23c setting for net.ipv4.ip_local_port_range is 9000 65500
net.ipv4.ip_local_port_range = 9000 65500

[root@centos8stream etc]#
```
23cFreeでは、デフォルトではSGA_TARGET、PGA_AGGREGATE_TARGET指定でメモリ設定がされるので、データベース作成後、必要に応じてHugePagesの設定を行います(必須ではない)。

:::note info
HugePagesを指定する場合、`/etc/sysctl.conf`に「vm.nr_hugepages」の値を指定して追加します。
指定する値は、SGA_TARGETに指定した値により変動します。
(計算式)
vm.nr_hugepages = (SGA_TARGETの値(MB) + 50MB) / hugepagesize = (SGA_TARGETの値(MB) + 50MB) / 2

23cFreeでは、SGA_TARGETに536Mが指定されているので、HugePages設定をする場合、vm.nr_hugepagesには、(536+50)/2=293を指定します。
```bash
vm.nr_hugepages = 293
```

またこの他に、`/etc/security/limits.conf `にmemlock(soft、hard両方)の値も指定して追加する必要があります。
(計算式)
memlock = (SGA_TARGETの値(MB) + 50MB + 10MB) * 1024 (KB)

23cFreeの場合は、memlockに、(536+50+10)*1024=610304を指定します。
```bash
oracle           soft    memlock         610304
oracle           hard    memlock         610304
```
:::

#### /etc/security/limits.confの設定
19cでは、HugePages関連の設定以外に、以下のような設定が必要でしたが、23cFreeインストール後も設定は追加されていませんでした。
```bash
oracle           soft    nproc           2047
oracle           hard    nproc           16384
oracle           soft    nofile          1024
oracle           hard    nofile          65536
oracle           soft    stack           10240
oracle           hard    stack           32768
```

#### /etc/pam.d/loginの設定
19cでは、以下の設定を追加していましたが、23cFreeインストール後も設定は追加されていませんでした。
```bash
session    required     pam_limits.so
```

#### /etc/profileの設定
19cでは、以下の設定を追加していましたが、23cFreeインストール後も設定は追加されていませんでした。
```bash
if [ $USER = "oracle" ]; then
    if [ $SHELL = "/bin/ksh" ]; then
        ulimit -p 16384
        ulimit -n 65536
    else
        ulimit -u 16384 -n 65536
    fi
    umask 022
fi
```

#### Transparent HugePagesの設定
Transparent HugePagesは、よしなに設定がされていました。
```bash
[root@centos8stream etc]# cat /sys/kernel/mm/transparent_hugepage/enabled 
always madvise [never]
[root@centos8stream etc]# 
[root@centos8stream etc]# cat /sys/kernel/mm/transparent_hugepage/defrag 
always defer defer+madvise madvise [never]
```
:::note warn
RHELの場合、Transparent HugePages設定を確認する際のパスが異なるため注意です。
(RHELの場合)
/sys/kernel/mm/redhat_transparent_hugepage/enabled
/sys/kernel/mm/redhat_transparent_hugepage/defrag
:::


上記OS設定周りについては、正式版リリース後に改めて確認してみたいと思います。

## データベースの作成
23cFreeのインストール後、rootユーザーで`/etc/init.d/oracle-free-23c configure`コマンドを実行すると、データベースが作成されます。

基本デフォルト設定でよいと思いますが、リスナーポートやDBのキャラクタセットを変えたいなどがある場合は、`/etc/sysconfig/oracle-free-23c.conf`を編集してから`/etc/init.d/oracle-free-23c configure`コマンドを実行します。
```bash
[root@centos8stream etc]# cat /etc/sysconfig/oracle-free-23c.conf
#This is a configuration file to setup the Oracle Database. 
#It is used when running '/etc/init.d/oracle-free-23c configure'.

# LISTENER PORT used Database listener, Leave empty for automatic port assignment
LISTENER_PORT=

# Character set of the database
CHARSET=AL32UTF8

# Database file directory
# If not specified, database files are stored under Oracle base/oradata
DBFILE_DEST=

# DB Domain name
DB_DOMAIN=

# SKIP Validations, memory, space
SKIP_VALIDATIONS=false
```

#### データベースの作成
rootユーザーで`/etc/init.d/oracle-free-23c configure`コマンドを実行すると、SYS、SYSTEM、PDBADMINユーザーのパスワードを聞かれるので、設定するとCDBおよびPDB(1つ)の作成が始まります。
```bash
[root@centos8stream ~]# /etc/init.d/oracle-free-23c configure
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 FREE.
SYSユーザー・パスワードを入力してください: 
************
SYSTEMユーザー・パスワードを入力してください: 
************
PDBADMINユーザー・パスワードを入力してください: 
***************
DB操作の準備
7%完了
データベース・ファイルのコピー中
29%完了
Oracleインスタンスの作成および起動中
30%完了
33%完了
36%完了
39%完了
43%完了
データベース作成の完了
47%完了
49%完了
50%完了
プラガブル・データベースの作成
54%完了
71%完了
構成後アクションの実行
93%完了
カスタム・スクリプトを実行中
100%完了
データベースの作成が完了しました。詳細は、次の場所にあるログ・ファイルを参照してください:
/opt/oracle/cfgtoollogs/dbca/FREE
データベース情報:
グローバル・データベース名:FREE
システム識別子(SID):FREE
詳細はログ・ファイル"/opt/oracle/cfgtoollogs/dbca/FREE/FREE.log"を参照してください。

Connect to Oracle Database using one of the connect strings:
     Pluggable database: centos8stream/FREEPDB1
     Multitenant container database: centos8stream
[root@centos8stream ~]#
```
作成が終わると、SID(CDB)：FREE、PDB：FREEPDB1が作成されます。

#### rlwrapのインストール
SQL*Plusでヒストリー機能を利用したいので、rlwrapをインストールします。
rlwrapのインストールにはEPELリポジトリが必要になるので、まずEPELリポジトリをインストールします。
```bash
# dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
```
続いてrlwrapをインストールします。
```bash
# dnf install rlwrap
```

#### 環境変数設定
oracleユーザーにスイッチし、環境変数を以下のように設定します。
```bash
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs
export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=$ORACLE_BASE/product/23c/dbhomeFree
export PATH=$PATH:$ORACLE_HOME/bin
export ORACLE_SID=FREE
export NLS_LANG=Japanese_Japan.AL32UTF8
#export ORAENV_ASK=NO
alias sqlplus='rlwrap sqlplus'
```

#### SYSユーザーでCDBにログインし、初期設定
CDBおよびPDBに接続し、監査設定およびデフォルトプロファイルの設定を変更します。
また、PDBが自動起動するよう設定(save state)します。
```sql
[oracle@centos8stream ~]$ sqlplus / as sysdba
SQL*Plus: Release 23.0.0.0.0 - Developer-Release on 月 5月 15 05:47:18 2023
Version 23.2.0.0.0
Copyright (c) 1982, 2023, Oracle.  All rights reserved.

Oracle Database 23c Free, Release 23.0.0.0.0 - Developer-Release
Version 23.2.0.0.0
に接続されました。
SQL> 
SQL> noaudit all;
noaudit all privileges;
noaudit exempt access policy;

ALTER PROFILE DEFAULT LIMIT
FAILED_LOGIN_ATTEMPTS 10
PASSWORD_LIFE_TIME UNLIMITED
PASSWORD_GRACE_TIME UNLIMITED
PASSWORD_LOCK_TIME UNLIMITED
PASSWORD_REUSE_TIME UNLIMITED
PASSWORD_REUSE_MAX UNLIMITED;

監査取消しが成功しました。

SQL>
SQL> sho pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 FREEPDB1                       READ WRITE NO
SQL> 
SQL> alter session set container=FREEPDB1;

セッションが変更されました。

SQL> 
SQL> show con_name

CON_NAME
------------------------------
FREEPDB1
SQL> 

SQL> alter pluggable database FREEPDB1 save state;

プラガブル・データベースが変更されました。

SQL> 
SQL> noaudit all;
noaudit all privileges;
noaudit exempt access policy;

ALTER PROFILE DEFAULT LIMIT
FAILED_LOGIN_ATTEMPTS 10
PASSWORD_LIFE_TIME UNLIMITED
PASSWORD_GRACE_TIME UNLIMITED
PASSWORD_LOCK_TIME UNLIMITED
PASSWORD_REUSE_TIME UNLIMITED
PASSWORD_REUSE_MAX UNLIMITED;

監査取消しが成功しました。
```
#### リスナーのステータス確認
```bash
[oracle@centos8stream ~]$ lsnrctl status

LSNRCTL for Linux: Version 23.0.0.0.0 - Developer-Release on 15-5月 -2023 06:57:30

Copyright (c) 1991, 2023, Oracle.  All rights reserved.

(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=centos8stream)(PORT=1521)))に接続中
リスナーのステータス
------------------------
別名                      LISTENER
バージョン                TNSLSNR for Linux: Version 23.0.0.0.0 - Developer-Release
開始日                    15-5月 -2023 05:19:22
稼働時間                  0 日 1 時間 38 分 8 秒
トレース・レベル          off
セキュリティ              ON: Local OS Authentication
SNMP                      OFF
デフォルト・サービス           FREE
パラメータ・ファイル      /opt/oracle/product/23c/dbhomeFree/network/admin/listener.ora
ログ・ファイル            /opt/oracle/diag/tnslsnr/centos8stream/listener/alert/log.xml
リスニング・エンドポイントのサマリー...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=centos8stream)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
サービスのサマリー...
サービス"FREE"には、1件のインスタンスがあります。
  インスタンス"FREE"、状態READYには、このサービスに対する1件のハンドラがあります...
サービス"FREEXDB"には、1件のインスタンスがあります。
  インスタンス"FREE"、状態READYには、このサービスに対する1件のハンドラがあります...
サービス"fbb91781d7412d32e053750aa8c0ea4a"には、1件のインスタンスがあります。
  インスタンス"FREE"、状態READYには、このサービスに対する1件のハンドラがあります...
サービス"freepdb1"には、1件のインスタンスがあります。
  インスタンス"FREE"、状態READYには、このサービスに対する1件のハンドラがあります...
コマンドは正常に終了しました。
```

#### SQL*Plusの設定
SQL*Plusで利用するエディターなどを設定します。※以下、設定例
```bash
[oracle@centos8stream ~]$ cat $ORACLE_HOME/sqlplus/admin/glogin.sql
--
-- Copyright (c) 1988, 2005, Oracle.  All Rights Reserved.
--
-- NAME
--   glogin.sql
--
-- DESCRIPTION
--   SQL*Plus global login "site profile" file
--
--   Add any SQL*Plus commands here that are to be executed when a
--   user starts SQL*Plus, or uses the SQL*Plus CONNECT command.
--
-- USAGE
--   This script is automatically run
--
show con_name
set pages 100
set lines 200

define _EDITOR = vim
```
#### tnsnames.oraの設定
PDB用の設定を追記します。※以下、設定例
```bash
# tnsnames.ora Network Configuration File: /opt/oracle/product/23c/dbhomeFree/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

FREE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = centos8stream)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = FREE)
    )
  )

LISTENER_FREE =
  (ADDRESS = (PROTOCOL = TCP)(HOST = centos8stream)(PORT = 1521))


FREEPDB1 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = centos8stream)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = FREEPDB1)
    )
  )
```
tnsnames.oraの設定後、以下のようにPDBに接続できればOKです。
```sql
[oracle@centos8stream ~]$ sqlplus sys@freepdb1 as sysdba

SQL*Plus: Release 23.0.0.0.0 - Developer-Release on 火 5月 16 07:18:30 2023
Version 23.2.0.0.0

Copyright (c) 1982, 2023, Oracle.  All rights reserved.

パスワードを入力してください: 


Oracle Database 23c Free, Release 23.0.0.0.0 - Developer-Release
Version 23.2.0.0.0
に接続されました。

CON_NAME
------------------------------
FREEPDB1
SQL>
```


#### 自動起動・停止設定
rootユーザーで`/etc/oratab`ファイルを編集し、末尾が「N」になっている箇所を「Y」に変更します。
```bash
[root@centos8stream etc]# vim /etc/oratab
#
# This file is used by ORACLE utilities.  It is created by root.sh
# and updated by either Database Configuration Assistant while creating
# a database or ASM Configuration Assistant while creating ASM instance.

# A colon, ':', is used as the field terminator.  A new line terminates
# the entry.  Lines beginning with a pound sign, '#', are comments.
#
# Entries are of the form:
#   $ORACLE_SID:$ORACLE_HOME:<N|Y>:
#
# The first and second fields are the system identifier and home
# directory of the database respectively.  The third field indicates
# to the dbstart utility that the database should , "Y", or should not,
# "N", be brought up at system boot time.
#
# Multiple entries with the same $ORACLE_SID are not allowed.
#
#
FREE:/opt/oracle/product/23c/dbhomeFree:Y ←ここをNからYに変更
```
続いて以下のようなUnitファイルを作成し、`/etc/systemd/system`に配置します。
```bash
[root@centos8stream system]# cat oracle.service 
[Unit]
Description=Oracle Database Server
After=syslog.target network.target

[Service]
Type=forking
ExecStart=/opt/oracle/product/23c/dbhomeFree/bin/dbstart /opt/oracle/product/23c/dbhomeFree
ExecStop=/opt/oracle/product/23c/dbhomeFree/bin/dbshut /opt/oracle/product/23c/dbhomeFree
User=oracle
Group=oinstall

[Install]
WantedBy=multi-user.target
```
その後、oracle.serviceを有効化します。
```bash
[root@centos8stream system]# systemctl enable oracle
Created symlink /etc/systemd/system/multi-user.target.wants/oracle.service → /etc/systemd/system/oracle.service.
[root@centos8stream system]#
[root@centos8stream system]# systemctl is-enabled oracle
enabled
```
#### アラートログ、リスナーログ
デフォルトでは以下に出力されています。
````
アラートログ：/opt/oracle/diag/rdbms/free/FREE/trace/alert_FREE.log
リスナーログ：/opt/oracle/diag/tnslsnr/(host名)/listener/trace/listener.log
````

#### データファイルの作成場所
デフォルトでは以下に作成されています。
###### CDBのデータベースファイル
```bash
[oracle@centos8stream FREE]$ pwd
/opt/oracle/oradata/FREE
[oracle@centos8stream FREE]$ ll
合計 2486340
drwxr-x--- 2 oracle oinstall        104  5月 15 18:30 FREEPDB1
-rw-r----- 1 oracle oinstall   18759680  5月 17 16:21 control01.ctl
-rw-r----- 1 oracle oinstall   18759680  5月 17 16:21 control02.ctl
drwxr-x--- 2 oracle oinstall         85  5月 15 18:22 pdbseed
-rw-r----- 1 oracle oinstall  209715712  5月 17 10:59 redo01.log
-rw-r----- 1 oracle oinstall  209715712  5月 17 16:20 redo02.log
-rw-r----- 1 oracle oinstall  209715712  5月 17 10:59 redo03.log
-rw-r----- 1 oracle oinstall  618668032  5月 17 16:19 sysaux01.dbf
-rw-r----- 1 oracle oinstall 1216356352  5月 17 16:19 system01.dbf
-rw-r----- 1 oracle oinstall   20979712  5月 17 11:02 temp01.dbf
-rw-r----- 1 oracle oinstall   36708352  5月 17 16:19 undotbs01.dbf
-rw-r----- 1 oracle oinstall    5251072  5月 17 10:59 users01.dbf
[oracle@centos8stream FREE]$
```
###### PDBのデータベースファイル
```bash
[oracle@centos8stream FREEPDB1]$ pwd
/opt/oracle/oradata/FREE/FREEPDB1
[oracle@centos8stream FREEPDB1]$ ll
合計 744728
-rw-r----- 1 oracle oinstall 346038272  5月 17 16:19 sysaux01.dbf
-rw-r----- 1 oracle oinstall 304095232  5月 17 16:19 system01.dbf
-rw-r----- 1 oracle oinstall  20979712  5月 17 11:00 temp01.dbf
-rw-r----- 1 oracle oinstall 104865792  5月 17 16:19 undotbs01.dbf
-rw-r----- 1 oracle oinstall   5251072  5月 17 10:59 users01.dbf
[oracle@centos8stream FREEPDB1]$
```

#### その他
23cの新機能で、dualを指定するSQL文でfrom句を書かずにselect文を実行できるようになっているようです。
```SQL
SQL> select dbtimezone;

DBTIME
------
+00:00

SQL> select to_char(sysdate,'YYYY/MM/DD HH24:MI:SS');

TO_CHAR(SYSDATE,'YY
-------------------
2023/05/17 16:28:15

SQL>
```

23cでの機能の変更点、初期化パラメータの変更点などについては、正式版が出た後などで別途確認してみたいと思います。

## おわりに
CentOS Stream 8にOracle Database 23c Freeをインストールし、OS設定などの差異をざっと確認してみました。