Oracle Database 23c Free-Developer Release から Oracle Database 23c Free へ移行

# Oracle Database 23c Free とは
　Oracle Database 23c は 2023年4月に Oracle Database 23c Free - Developer Release が公開されました。このリリースは開発者向けの最初のバージョンでした。2023年9月 Oracle Database 23c Free が公開されました。Oracle Database 23c Free は Oracle Database Express Edition (XE) の後継リリースになります。実質的に両者にほとんど違いは無いと思われますが、Oracle Database 23c Free にアップデートすることが推奨されています。
　Oracle Database 23c Free は[こちら](https://www.oracle.com/database/free/get-started/) からダウンロードできます。インストールメディアには Docket イメージ、VirtualBox イメージ、Linux 用 RPM パッケージ等が利用できます。本記事では Red Hat Enterprise Linux 8 に RPM パッケージでインストールされた Oracle Database 23c Free - Developer Release の削除と、Oracle Database 23c Free のインストールについて説明しています。


# Oracle Database 23c Free-Developer Release の削除
Oracle Database 23c Free - Developer Release の rpm パッケージを削除しようとすると、リスナーやデータベースが存在するとエラーになります。

```shell:
# rpm -e oracle-database-free-23c-1.0-1.x86_64
[SEVERE] Database or a listener exists. To delete the database and the listener run '/etc/init.d/oracle-free-23c delete' before proceeding.
error: %preun(oracle-database-free-23c-1.0-1.x86_64) scriptlet failed, exit status 1
error: oracle-database-free-23c-1.0-1.x86_64: erase failed
```

このためあらかじめデータベースとリスナーを削除するか、/etc/init.d/oracle-free-23c delete コマンドを実行します。下記の例では既にデータベースとリスナーを削除しているため、スクリプトがエラーになっています。

```shell:
# /etc/init.d/oracle-free-23c delete
Deleting Oracle Listener.
Deleting Oracle Database FREE.
[FATAL] [DBT-10201] Delete database operation cannot be performed.
   CAUSE: There are no databases present on the system.
```

コマンド実行後に Oracle Database 23c Fre-Developer Release 用の RPM パッケージを削除し、あわせて Pre-Install RPM も削除します。

```shell:
# rpm -e oracle-database-preinstall-23c-1.0-0.5.el8.x86_64
```

# Oracle Database 23c Free のインストール
　Oracle Database 23c Free-Developer Release と Oracle Database 23c Free のインストール条件は同じです。まず Pre-Install RPM をインストールし、Oracle Database 23c Free の RPM パッケージをインストールします。

```shell:
# rpm -ivh oracle-database-preinstall-23c-1.0-0.5.el8.x86_64.rpm
warning: oracle-database-preinstall-23c-1.0-0.5.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID ad986da3: NOKEY
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]
Updating / installing...
   1:oracle-database-preinstall-23c-1.################################# [100%]
#
# rpm -ivh oracle-database-free-23c-1.0-1.el8.x86_64.rpm
warning: oracle-database-free-23c-1.0-1.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID ad986da3: NOKEY
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]
Updating / installing...
   1:oracle-database-free-23c-1.0-1   ################################# [100%]
[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 23c Free のセットアップ
２つの RPM パッケージがインストールできたら「/etc/init.d/oracle-free-23c configure」コマンドを実行します。SYS ユーザーのパスワード、SYSTEM ユーザーのパスワード、PDB の管理者である PDBADMIN ユーザーのパスワード入力を求められます。

```shell:
# /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.
Enter SYS user password: <<パスワード入力>>
************
Enter SYSTEM user password: <<パスワード入力>>
***********
Enter PDBADMIN User Password: <<パスワード入力>>
*************
Prepare for db operation
7% complete
Copying database files
29% complete
Creating and starting Oracle instance
30% complete
33% complete
36% complete
39% complete
43% complete
Completing Database Creation
47% complete
49% complete
50% complete
Creating Pluggable Databases
54% complete
71% complete
Executing Post Configuration Actions
93% complete
Running Custom Scripts
100% complete
Database creation complete. For details check the logfiles at:
 /opt/oracle/cfgtoollogs/dbca/FREE.
Database Information:
Global Database Name:FREE
System Identifier(SID):FREE
Look at the log file "/opt/oracle/cfgtoollogs/dbca/FREE/FREE0.log" for further details.

Connect to Oracle Database using one of the connect strings:
     Pluggable database: {ホスト名}/FREEPDB1
     Multitenant container database: rel87-2
#
```

実行が完了すると、SID=FREE のデータベースと、LISTENER リスナーが起動します。主な設定項目は以下の通りです。

## データベース
作成される FREE データベースは、NOARCHIVELOG モード、Local Undo モードのマルチテナント・データベースです。PDBとして FREEPDB1 が作成されます。表領域のサイズは以下の通りです。

|表領域名|CDBサイズ(MB）|PDBサイズ(MB）|備考|
|:---|---:|---:|:---|
|SYSTEM|1,060|290| |
|SYSAUX|580|360||
|UNDOTBS1|50|100||
|USERS|5|5||
|TEMP|20|20||

以下の設定が追加された初期化パラメーター・ファイルが作成されます。

|初期化パラメーター|設定値|備考|
|:---|:---|:---|
|compatible|23.0.0| |
|control_files|/opt/oracle/oradata/FREE/control01.ctl /opt/oracle/oradata/FREE/control02.ctl | |
|db_block_size|8192| |
|db_name |FREE | |
|diagnostic_dest|/opt/oracle | |
|dispatchers|(PROTOCOL=TCP) (SERVICE=FREEXDB) | |
|enable_pluggable_database |true| |
|local_listener|LISTENER_FREE| |
|nls_language |AMERICAN | |
|nls_territory| AMERICA| |
|open_cursors|300 | |
|pga_aggregate_target|512m||
|processes|320||
|remote_login_passwordfile|EXCLUSIVE||
|sga_target|1536m||
|undo_tablespace|UNDOTBS1|

SQL*Plus の起動時や、V$VERSION ビューを見ると、バージョン番号として、23.3.0.23.09 となっています。新しいバージョンの考え方かもしれません。

```SQL:
SQL> SELECT BANNER_FULL FROM V$VERSION;
BANNER_FULL
--------------------------------------------------------------------------------
Oracle Database 23c Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free
Version 23.3.0.23.09
```

インスタンスを構成するバックグラウンド・プロセスの名前が ora_ ではなく、db_ で始まっています。

```shell:
$ ps -ef | grep pmon | grep -v grep
oracle     34232       1  0 16:59 ?        00:00:00 db_pmon_FREE
```

## ネットワーク関連
ネットワーク関連では特に特殊な設定はされないようです。デフォルトの LISTENER リスナーが作成されます。


```listener.ora
DEFAULT_SERVICE_LISTENER = FREE

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = {ホスト名})(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )
```

```tnsnames.ora
FREE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = {ホスト名})(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = FREE)
    )
  )

LISTENER_FREE =
  (ADDRESS = (PROTOCOL = TCP)(HOST = {ホスト名})(PORT = 1521))
```

```sqlnet.ora
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
```


Author: Noriyoshi Shinoda / Date: October 7, 2023