BaseDBとCoｍpute(Oracle Linux Cloud Developerイメージ)でAPEX環境を構築してみた

# はじめに
Oracle APEXはAutonomous Databaseではインスタンスをデプロイするだけで利用できますが、その他のOracle DatabaseではAPEXのインストール、ORDSの構成が必要になります。そこでBaseDBとComputeでシンプルなAPEX環境を構築する手順を確認してみました。関連するドキュメントは日本語ドキュメントの最新に見出しからリンクしています。

# 構成
BaseDBにORDSを構成することもできると思いますが、ORDSの[ベストプラクティス](https://www.oracle.com/database/technologies/appdev/rest/best-practices/)にDBサーバと分けるべきとあったので、今回は同じVCNのプライベート・サブネットにBaseDB、パブリック・サブネットにORDS用のComputeを作成します。ORDSはスタンドアロン・モードのHTTPで動作させます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/efbdbb70-d41c-0e3a-1b9e-36660ae914fc.png)

::: note info
スタンドアロン・モードのORDSのHTTPポートは8080、HTTPSポートは8443となります。80、443のポートでAPEXにアクセスさせたい場合はLoad BalancerやWebサーバを手前に配置してバックエンドにORDSを設定することなどでできます。
:::
# BaseDBを作成する
BaseDBを作成します。ストレージ構成は論理ボリューム・マネージャ、バージョンは19cで作成しPDB1というPDBを作成しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/f2a291a7-9f24-2bcd-2506-5a56cdf46091.png)

# Computeを作成する
ORDSを構成するComputeを作成します。Oracle ClientもORDSもインストール済みのOracle Linux Cloud Developerイメージを選択しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/85969ef8-52bb-201c-386a-731ea3520187.png)
# Computeの事前準備
APEXの利用に必要な前提の確認、設定を行います。
## BaseDBのPDBへの接続確認
Computeから確認した簡易接続の接続文字列を使ってSYSで接続できることを確認します。接続文字列は、PDBのホームページから、**PDB接続**を選択し、**簡易接続**で確認、コピーができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/53dc8ddd-5a8c-76e9-b15b-7ad66c3c6aad.png)

ついでに対象のPDBにAPEXが既にインストール済みではないかも念のため確認しました。操作はドキュメントに従って、SQLCLを使います。
```
suro su - oracle
-- 接続確認
sql sys/WelCome12345##@db19c.sub02010508101.vcnshared.oraclevcn.com:1521/pdb1.sub02010508101.vcnshared.oraclevcn.com as sysdba

SQLcl: Release 23.1 Production on Fri Nov 17 01:04:18 2023

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

Connected to:
Oracle Database 19c EE High Perf Release 19.0.0.0.0 - Production
Version 19.20.0.0.0

-- APEXが導入済みか確認
SQL> select status from dba_registry where comp_id ='APEX';

no rows selected
```

## ORDSが使用するポートの設定
スタンドアロン・モードのORDSはHTTPポートに8080を使用します。ブラウザからインターネット経由でアクセスできるようにVCNのセキュリティ・リストのイングレス・ルールで設定しておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/d453f8dd-b1f2-12de-defa-e030b4dc790c.png)

Computeのほうも8080ポートを許可するよう設定します。
```
--　確認
$ sudo firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens3
  sources:
  services: dhcpv6-client ssh
  ports:
  protocols:
  forward: no
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
-- 設定と反映
$ sudo firewall-cmd --add-port=8080/tcp  --permanent
success
$ sudo firewall-cmd --reload
success
-- 設定を確認
$ sudo firewall-cmd --list-ports
8080/tcp
```
 
# ComputeにAPEXをダウンロードし、oracleユーザで解凍する
Computeに[APEXのダウンロードサイト](https://www.oracle.com/tools/downloads/apex-downloads/)の以下から最新のAPEXを入手します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/ec22bf74-d920-7955-c510-5117a7419c26.png)

試した時点では最新バージョンは23.2でした。日本語のダウンロードサイトは最新情報の反映にタイムラグがあるようです。
```
$ sudo su - oracle
$ pwd 
/home/oracle
-- ダウンロードと解凍
$ wget https://download.oracle.com/otn_software/apex/apex-latest.zip
$ ls -al *.zip
-rw-r--r--. 1 oracle oinstall 274075091 Nov 14 14:07 apex-latest.zip
$ unzip apex_latest.zip 
-- /home/oracle/apexが作成される
```
# APEXのインストール
APEXをBaseDBのPDBにインストールします。
## APEX用の表領域作成
APEXのインストールで作成されるオブジェクトのための表領域を作成します。環境変数の設定は以降のスクリプトの実行で必要です。
```
-- oracleで実行
$ pwd 
/home/oracle
$ cd apex
-- 環境変数を設定
$ export NLS_LANG=American_America.AL32UTF8
-- sqlclでsysでpdb1に接続
$ sql sys/WelCome12345##@db19c.sub02010508101.vcnshared.oraclevcn.com:1521/pdb1.sub02010508101.vcnshared.oraclevcn.com as sysdba
-- 表領域を作成
SQL> create tablespace APEX23_2 datafile size 100M autoextend on next 1m;　
Tablespace APEX23_2 created.
SQL>
```
## [APEXのインストール](https://docs.oracle.com/cd/F86785_01/htmig/downloading-installing-apex.html#GUID-7E432C6D-CECC-4977-B183-3C654380F7BF)
続けて、APEXのインストールスクリプトである**apexins.sql**を以下のようにパラメータを指定して実行します。

@apexins.sql *\<APEXアプリケーションユーザー用の表領域\>* *\<APEXファイルユーザ用の表領域\>* *\<一時表領域\>* *\<APEXイメージの仮想ディレクトリパス\>*

APEXアプリケーションユーザー用の表領域およびAPEXファイルユーザー用の表領域には作成した表領域APEX23_2を指定します。一時表領域としてTEMP、イメージの仮想ディレクトリパスには複数のAPEXのバージョンを同時にホストできるようにバージョン番号を加えて/i/23.2.0/とします。イメージのパスに/i/は必須です。

```
-- インストールスクリプトを実行
SQL> @apexins APEX23_2 APEX23_2 TEMP /i/23.2.0/
...set_appun.sql

PL/SQL procedure successfully completed.
　～
<省略>
　～
Thank you for installing Oracle APEX 23.2.0

Oracle APEX is installed in the APEX_230200 schema.

The structure of the link to the Oracle APEX administration services is as follows:
http://host:port/ords/apex_admin

The structure of the link to the Oracle APEX development interface is as follows:
http://host:port/ords


timing for: Phase 3 (Switch)
Elapsed:    0.12


timing for: Complete Installation
Elapsed:    4.85

SQL> 
```

## [APEXインスタンス管理アカウントの作成](https://docs.oracle.com/cd/F86785_01/htmig/downloading-installing-apex.html#GUID-4062E1F0-2772-48FC-A4AA-436F326CF751)
次に**apxchpwd.sql**スクリプトでAPEXインスタンス管理アカウントを作成します。APEXインスタンス管理アカウントはAPEX管理ワークスペース（INTERNAL)にログインできるアカウントになります。
スクリプトを実行すると対話形式で管理アカウント名、管理アカウントのメールアドレス、パスワードを求められますので、ユーザ名、メールアドレスはデフォルトのADMINをそのまま利用し(Enterを入力)、パスワードをWelcome12345#としました。
なお、パスワードは、少なくても１文字の数値(0123456789)、１文字の記号(!"#$%&()``*+,-/:;?_)、１文字の大文字をそれぞれ含む必要があります。

```
-- APEXインスタンス管理アカウントの作成
SQL> @apxchpwd.sql
...set_appun.sql
================================================================================
This script can be used to change the password of an Oracle APEX
instance administrator. If the user does not yet exist, a user record will be
created.
================================================================================
Enter the administrator's username [ADMIN]
User "ADMIN" does not yet exist and will be created.

Enter ADMIN's email [ADMIN]
Enter ADMIN's password [] *************
Created instance administrator ADMIN.
SQL>
```
# [APEX_PUBLIC_USERユーザーのアカウントロック解除とパスワードの変更](https://docs.oracle.com/cd/F86785_01/htmig/downloading-installing-apex.html#GUID-0619448A-56FB-43E1-A479-C45EC5002E4B)
Oracle APEXの新規インストールで、内部で使用されるAPEX_PUBLIC_USERユーザーがランダムなパスワードで作成されています。アカウントロックがされているので、ロックを解除し、パスワードを変更します。apxchpwd.sql実行の後だと、SQLclのシステム変数feedbackがoffに設定されているため、応答メッセージを返すためにはじめにonにしています。

```
SQL> set feedback on
SQL> ALTER USER APEX_PUBLIC_USER ACCOUNT UNLOCK IDENTIFIED BY "WelCome12345##";

User APEX_PUBLIC_USER altered.
```
::: note info
ドキュメントに記載がないので正式ではありませんが、ここで以下のように認証なしで設定すると、次のRESTfulサービスの設定も不要でAPEXを利用できるようです。
ALTER USER APEX_PUBLIC_USER NO AUTHENTICATION ACCOUNT UNLOCK;
:::

## [RESTfulサービスの構成](https://docs.oracle.com/cd/F86785_01/htmig/downloading-installing-apex.html#GUID-93638EC4-5278-421B-9C19-BB68F9B31C40)
RESTfulサービスの構成スクリプトである**apex_rest_config.sql**を実行します。スクリプトで作成されるデータベース・ユーザAPEX_LISTENERとAPEX_REST_PUBLICのパスワードを対話型でそれぞれ入力する必要があります。今回はWelCome12345##としました。
```
SQL> @apex_rest_config.sql
PL/SQL procedure successfully completed.


:CDB
_______
YES


:CDB_ROOT
____________
NO


:META_LINK
_____________
NONE


PL/SQL procedure successfully completed.


:SCRIPT_NAME
_____________________________
apex_rest_config_nocdb.sql

Enter a password for the APEX_LISTENER user              [] **************
Enter a password for the APEX_REST_PUBLIC_USER user              [] **************
...set_appun.sql
　～
 <略>
 ～
 PL/SQL procedure successfully completed.

 PL/SQL procedure successfully completed.
 SQL> 
 ```
 このスクリプトでAPEXのインストールは完了です。正しくインストールができているかを確認します。
```
SQL> select status from dba_registry where comp_id ='APEX';
STATUS
_________
VALID
SQL> 
```
インストール前は行が返されなかったのが、VALIDとなりました！
## [日本語リソースのインストール](https://docs.oracle.com/cd/F86785_01/htmig/installing-translated-versions-of-apex.html#GUID-D5DA11ED-2230-4B3E-91B1-410C6BCD3AA0)
APEXを英語で使うのであればここまでで完了なのですが、APEXを日本語で使うためには、**load_trans.sql**スクリプトを引数**JAPANESE**を指定して実行する必要があります。続けて実行します。
```
SQL>@load_trans JAPANESE
PL/SQL procedure successfully completed.

Installing Oracle APEX translation - JAPANESE
　～
<省略>
　～
--application/end_environment
... elapsed: 2.97 sec

...done
Adjust instance settings

PL/SQL procedure successfully completed.
SQL> exit
$
```
これでAPEXの準備が整いました。

# ORDSのインストールと構成
ORDSの構成を行っていきます。
## ORDSのインストール
Oracle Linux DeveloperイメージにはORDSがインストール済みで、パスも設定済みです。
```
-- インストールされているORDSの確認
$ sudo yum list installed ords
Installed Packages
ords.noarch                                      23.1.0-9.el8                                        @ol8_oci_inc

$ which ords
/usr/local/bin/ords
```
最新のORDSを利用するため、アップデートを確認し、あればアップデートします。
```
-- アップデートを確認
$ sudo yum check-update ords
ords.noarch                    23.3.0-10.el8                    ol8_oci_included
-- 最新のORDSにUpdate
$ sudo yum update ords
Last metadata expiration check: 0:03:23 ago on Fri 17 Nov 2023 03:25:10 AM GMT.
Dependencies resolved.
================================================================================
 Package     Architecture  Version                Repository               Size
================================================================================
Upgrading:
 ords        noarch        23.3.0-10.el8          ol8_oci_included        107 M

Transaction Summary
================================================================================
Upgrade  1 Package

Total download size: 107 M
Is this ok [y/N]:y
　～
 <省略>
 ～
 Upgraded:
  ords-23.3.0-10.el8.noarch

Complete!
$
```
ORDSはOL7、OL8リポジトリに公開されているため、アクセスできればyumやdnfでインストールが可能です。またAPEXと同じように[ORDSのダウンロードサイト](https://www.oracle.com/database/sqldeveloper/technologies/db-actions/download/)でダウンロードしてインストールすることもできます。yumやダウンロードでの手順は[ドキュメント](https://docs.oracle.com/cd/F87063_01/ordig/installing-and-configuring-oracle-rest-data-services.html#GUID-8580F2DC-8D8F-47A0-A733-E1BF07CA27A6)に記載がありますので、方法にあわせてご確認ください。
 

## Javaのバージョン確認
ORDSをスタンドアロン・モードで使用するためにはJavaが必要です。JavaのバージョンがORDSがサポートしているものかを確認しておきます。
```
-- Javaの確認
$ java -version
java version "17.0.6" 2023-01-17 LTS
Java(TM) SE Runtime Environment GraalVM EE 22.3.1 (build 17.0.6+9-LTS-jvmci-22.3-b11)
Java HotSpot(TM) 64-Bit Server VM GraalVM EE 22.3.1 (build 17.0.6+9-LTS-jvmci-22.3-b11, mixed mode, sharing)
```
[ORDS23.3のドキュメントのシステム要件](https://docs.oracle.com/en/database/oracle/oracle-rest-data-services/23.3/ordig/installing-REST-data-services.html#GUID-F6A4F94A-D62F-4A35-A471-6306332DF522)にあるJavaのバージョンを満たしていることが確認できました。

## [APEXの静的リソースのディレクトリの作成と静的リソースのコピー](https://docs.oracle.com/cd/F86785_01/htmig/configuring-ords.html#GUID-D688F4D6-FCAB-4C4D-BA6D-9A3506B3E05F)
oracleユーザでAPEXの静的リソース用のディレクトリを作成します。このディレクトリが APEXの静的ディレクトリの仮想パスの/i/となります。今回は/home/oracle/imagesとします。
```
$ cd /home/oracle
$ mkdir images
```
複数のAPEXバージョンに対応できるようにバージョン番号23.2.0を仮想パスにつけたため、23.2.0というサブディレクトリとしてAPEXの解凍ディレクトリ下のimagesディレクトリをコピーします。
```
$ cp -r -p apex/images images/23.2.0
```

## パスワードの複雑性ルールの一時無効化
ORDSの構成では、データベースへのスキーマのインストールとWebサーバーの設定が行われます。
将来的には修正される予定ですが、ORDSの構成で作成されるユーザーがパスワードの複雑性ルールに現在適応していないため、一時的に複雑性ルールを無効化します。（MOSドキュメント:2720264.1)
```
$ sql sys/WelCome12345##@db19c.sub02010508101.vcnshared.oraclevcn.com:1521/pdb1.sub02010508101.vcnshared.oraclevcn.com as sysdba

-- 現在のルールを確認
SQL> select limit from dba_profiles where profile='DEFAULT' and resource_name='PASSWORD_VERIFY_FUNCTION';
LIMIT
________________________________
ORA12C_STRONG_VERIFY_FUNCTION
-- 無効化
SQL> alter profile default limit password_verify_function null;
-- 再確認
SQL> select limit from dba_profiles where profile='DEFAULT' and resource_name='PASSWORD_VERIFY_FUNCTION';
LIMIT
________________________________
NULL
SQL>
```
## ORDSの構成
ORDSの構成はoracleユーザで**ords**コマンドを使用して実行します。

 ords --config /etc/ords/config install

ORDS構成ディレクトリのデフォルトの場所は/etc/ords/configです。
コマンドを実行すると、対話型で入力を求められます。各入力の意味についてはドキュメントの[表2-1 対話型インストールのプロンプト](https://docs.oracle.com/cd/F87063_01/ordig/installing-and-configuring-oracle-rest-data-services.html#GUID-8580F2DC-8D8F-47A0-A733-E1BF07CA27A6)で確認できます。今回の構成の場合、ほとんどがデフォルト（Enter入力）で、指定したのは★のところでだけでした。
```
sudo su - oracle
$ ords --config /etc/ords/config install

ORDS: Release 23.3 Production on Wed Nov 17 03:46:38 2023

Copyright (c) 2010, 2023, Oracle.

Configuration:
  /etc/ords/config/

The configuration folder /etc/ords/config does not contain any configuration files.

Oracle REST Data Services - Interactive Install

  Enter a number to select the type of installation
    [1] Install or upgrade ORDS in the database only
    [2] Create or update a database pool and install/upgrade ORDS in the database
    [3] Create or update a database pool only
  Choose [2]: 
  Enter a number to select the database connection type to use
    [1] Basic (host name, port, service name)
    [2] TNS (TNS alias, TNS directory)
    [3] Custom database URL
  Choose [1]:
★Enter the database host name [localhost]: db19c.sub02010508101.vcnshared.oraclevcn.com
  Enter the database listen port [1521]: 
★Enter the database service name [orcl]: pdb1.sub02010508101.vcnshared.oraclevcn.com
  Provide database user name with administrator privileges.
★  Enter the administrator username: sys
★  Enter the database password for SYS AS SYSDBA: WelCome12345##
Connecting to database user: SYS AS SYSDBA url: 
jdbc:oracle:thin:@//db19c.sub02010508101.vcnshared.oraclevcn.com:1521/pdb1.sub02010508101.vcnshared.oraclevcn.com
Retrieving information.
  Enter the default tablespace for ORDS_METADATA and ORDS_PUBLIC_USER [SYSAUX]:
  Enter the temporary tablespace for ORDS_METADATA and ORDS_PUBLIC_USER [TEMP]: 
  Enter a number to select additional feature(s) to enable:
    [1] Database Actions  (Enables all features)
    [2] REST Enabled SQL and Database API
    [3] REST Enabled SQL
    [4] Database API
  Choose [1]:
  Enter a number to configure and start ORDS in standalone mode
    [1] Configure and start ORDS in standalone mode
    [2] Skip
  Choose [1]:
  Enter a number to select the protocol
    [1] HTTP
    [2] HTTPS
  Choose [1]:
  Enter the HTTP port [8080]:
★Enter the APEX static resources location: /home/oracle/images
The setting named: db.connectionType was set to: basic in configuration: default
The setting named: db.hostname was set to: db19c.sub02010508101.vcnshared.oraclevcn.com in configuration: default
The setting named: db.port was set to: 1521 in configuration: default
　～
 <省略>
  ～
  
2023-11-17T03:53:59.084Z WARNING     *** jdbc.MaxLimit in configuration |default|lo| is using a value of 20, this setting may not be sized adequately for a production environment ***
2023-11-17T03:53:59.084Z WARNING     *** jdbc.InitialLimit in configuration |default|lo| is using a value of 3, this setting may not be sized adequately for a production environment ***
2023-11-17T03:54:06.793Z INFO

Mapped local pools from /etc/ords/config/databases:
  /ords/                              => default                        => VALID


2023-11-17T03:54:06.928Z INFO        Oracle REST Data Services initialized
Oracle REST Data Services version : 23.3.0.r2891830
Oracle REST Data Services server info: jetty/10.0.17
Oracle REST Data Services java info: Java HotSpot(TM) 64-Bit Server VM 17.0.6+9-LTS-jvmci-22.3-b11

```
スクリプトの引数でスタンドアロンモードでの起動（[1] Configure and start ORDS in standalone mode）を選択しているので、スクリプトの実行後プロンプトは戻らず、スタンドアロン・モードでORDSが起動した状態になりました。
これでORDSの準備も整いました。

# APEXへアクセス
ブラウザで**http://\<ComputeのPublic IPアドレス\>:8080/ords/apex/** にアクセスすると、APEXの英語のログインページが表示されました。日本語を選択し、管理ワークスペース**internal**を指定しユーザ名に**admin**、パスワードに**APEXインスタンス管理者の作成で指定したパスワード**(Welcome12345#)でログインします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/9ee7dd31-214a-eddc-6c65-d3e7174823be.png)

管理ワークスペースにアクセスできました！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/bd65247d-492e-907d-4718-33c57e6f0928.png)

# ORDSの停止と再起動
起動しているORDSはCTL＋Cで停止することができます。再度起動するときはordsコマンドで**serve**オプションを指定することで可能です。ドキュメントでは[こちら](https://docs.oracle.com/cd/F87063_01/ordig/deploying-and-monitoring-oracle-rest-data-services.html#GUID-872EA939-5348-4B31-B4EC-EFD038F69837)に記載があります。なお、ORDSコマンドの詳細はords --helpで確認できます。

```
$ ords --config /etc/ords/config serve

ORDS: Release 23.3 Production on Fri Nov 17 04:00:21 2023

Copyright (c) 2010, 2023, Oracle.
Configuration:
  /etc/ords/config/
 ～
<略>
 ～
Mapped local pools from /etc/ords/config/databases:
  /ords/                              => default                        => VALID


2023-11-17T04:14:27.562Z INFO        Oracle REST Data Services initialized
Oracle REST Data Services version : 23.3.0.r2891830
Oracle REST Data Services server info: jetty/10.0.17
Oracle REST Data Services java info: Java HotSpot(TM) 64-Bit Server VM 17.0.6+9-LTS-jvmci-22.3-b11
```

また、DeveloperイメージやORDSをyumやdnfでインストールした場合は、ORDSはsystemdのサービスとして構成ファイルが作成されているようです。
```
$ cat /etc/systemd/system/ords.service
[Unit]
Description=Oracle REST Data Services
After=network.target remote-fs.target

[Service]
Type=forking
GuessMainPID=no
PIDFile=/var/run/ords/pid
ExecStart=/usr/bin/bash -c '/etc/init.d/ords start'
ExecReload=/usr/bin/bash -c '/etc/init.d/ords restart'
ExecStop=/usr/bin/bash -c '/etc/init.d/ords stop'
SuccessExitStatus=143
Restart=on-failure
RestartSec=60

[Install]
WantedBy=multi-user.target graphical.target
```
そのため、こちらの[Yuji.Nさんのblog](http://apexugj.blogspot.com/2022/11/building-oracle-apex-environment-06-ords.html)で紹介されているような自動起動の設定も行うことができます。


# パスワードの複雑性ルールの有効化
環境構築が完了した後は、一時的に無効化した複雑性ルールを再度有効化しておきます。
```
$ sql sys/WelCome12345##@db19c.sub02010508101.vcnshared.oraclevcn.com:1521/pdb1.sub02010508101.vcnshared.oraclevcn.com as sysdba
 
SQL> alter profile default limit password_verify_function ORA12C_STRONG_VERIFY_FUNCTION;

Profile DEFAULT altered.

SQL> select limit from dba_profiles where profile='DEFAULT' and resource_name='PASSWORD_VERIFY_FUNCTION';

LIMIT
________________________________
ORA12C_STRONG_VERIFY_FUNCTION
SQL> exit
$
```

# おわりに
BaseDBでAPEXが使えるように環境構築をしてみました。参考になれば幸いです。


# おまけ: [APEXのインストールの自動化スクリプト](https://docs.oracle.com/cd/F86785_01/htmig/automating-the-apex-installation-process.html#GUID-C18CDE2A-F730-41D5-85DC-FA010A2CFCD4)

インストールの自動化のためのスクリプト**apxsilentins.sql**も提供されています。使用すると、日本語リソースのインストール以外のAPEXのインストール関連スクリプトを1度に実行できます。実行手順は以下の通りです。

@apxsilentins.sql *\<tablespace_apex\> \<tablespace_files\> \<tablespace_temp\> \<images\>
      \<password_apex_pub_user\> \<password_apex_listener\> \<password_apex_rest_pub_user\>
      \<password_internal_admin\>*

表領域の作成とパスワードの複雑性ルールの無効化を完了後、本文と同じ設定になるように実行してみました。
```     
SQL> @apxsilentins.sql APEX23_2 APEX23_2 TEMP /i/23.2.0 WelCome12345## WelCome12345## WelCome12345## Welcome12345#

Procedure WWV_FLOW_ASSIGN_PWD compiled


Session altered.
 ～
 <省略>
 ～
 PL/SQL procedure successfully completed.


...Recompiling the Oracle APEX schemas


PL/SQL procedure successfully completed.


timing for: APEX Configuration
Elapsed:    0.02
SYS>
```
インストールがされたか確認してみます。
```
-- 確認
SYS>  select status from dba_registry where comp_id ='APEX';

STATUS
_________
VALID

1 row selected.

SQL> select account_status from dba_users where username='APEX_PUBLIC_USER';

ACCOUNT_STATUS
_________________
OPEN
```
Validになっています。apex_public_userユーザーのアカウントもOPENになっていました。この後に日本語リソースのインストールとORDSの構成を行えば完了です。
ちなみにこのスクリプトはAppendix扱いで、ドキュメントを最後の方まで確認して初めて存在を知ることができます。。。

# おまけ: ORDS24.1の場合
ORDSが24.1になると、構成の入力が少しだけ変わっていました。
```
$ ords --config /etc/ords/config install

ORDS: Release 24.1 Production on Fri May 10 08:14:04 2024

Copyright (c) 2010, 2024, Oracle.

Configuration:
  /etc/ords/config

The configuration folder /etc/ords/config does not contain any configuration files.

Oracle REST Data Services - Interactive Install

  Enter a number to select the database connection type to use
    [1] Basic (host name, port, service name)
    [2] TNS (TNS alias, TNS directory)
    [3] Custom database URL
  Choose [1]:
  ★ Enter the database host name [localhost]: db19c.public1.vcn1.oraclevcn.com　
  Enter the database listen port [1521]:
  ★ Enter the database service name [orcl]: pdb1.public1.vcn1.oraclevcn.com
  Provide database user name with administrator privileges.
    Enter the administrator username: sys
  Enter the database password for SYS AS SYSDBA:<sysのパスワード>

Retrieving information.
ORDS is not installed in the database. ORDS installation is required.

  Enter a number to update the value or select option A to Accept and Continue
    [1] Connection Type: Basic
    [2] Basic Connection: HOST=db19c.public1.vcn1.oraclevcn.com PORT=1521 SERVICE_NAME=pdb1.public1.vcn1.oraclevcn.com
           Administrator User: SYS AS SYSDBA
    [3] Database password for ORDS runtime user (ORDS_PUBLIC_USER): <generate>
    [4] ORDS runtime user and schema tablespaces:  Default: SYSAUX Temporary TEMP
    [5] Additional Feature: Database Actions
    [6] Configure and start ORDS in Standalone Mode: Yes
    [7]    Protocol: HTTP
    [8]       HTTP Port: 8080
    [9]   APEX static resources location:
    [A] Accept and Continue - Create configuration and Install ORDS in the database
    [Q] Quit - Do not proceed. No changes
  ★Choose [A]: 3
  Enter your choice for the runtime user password (ORDS_PUBLIC_USER)
    [S] Specify your own password
    [G] Generate password
    [C] Cancel - No Changes
  ★Choose [G]: S
★  Enter the database password for ORDS_PUBLIC_USER:
Confirm password:<任意のパスワード>
  Enter a number to update the value or select option A to Accept and Continue
    [1] Connection Type: Basic
    [2] Basic Connection: HOST=aradb19c.public1.vcn1.oraclevcn.com PORT=1521 SERVICE_NAME=pdb1.public1.vcn1.oraclevcn.com
           Administrator User: SYS AS SYSDBA
    [3] Database password for ORDS runtime user (ORDS_PUBLIC_USER): <specified password>
    [4] ORDS runtime user and schema tablespaces:  Default: SYSAUX Temporary TEMP
    [5] Additional Feature: Database Actions
    [6] Configure and start ORDS in Standalone Mode: Yes
    [7]    Protocol: HTTP
    [8]       HTTP Port: 8080
    [9]   APEX static resources location:
    [A] Accept and Continue - Create configuration and Install ORDS in the database
    [Q] Quit - Do not proceed. No changes
 ★ Choose [A]: 9
 ★ Enter the APEX static resources location: /home/oracle/images
  Enter a number to update the value or select option A to Accept and Continue
    [1] Connection Type: Basic
    [2] Basic Connection: HOST=aradb19c.public1.vcn1.oraclevcn.com PORT=1521 SERVICE_NAME=pdb1.public1.vcn1.oraclevcn.com
           Administrator User: SYS AS SYSDBA
    [3] Database password for ORDS runtime user (ORDS_PUBLIC_USER): <specified password>
    [4] ORDS runtime user and schema tablespaces:  Default: SYSAUX Temporary TEMP
    [5] Additional Feature: Database Actions
    [6] Configure and start ORDS in Standalone Mode: Yes
    [7]    Protocol: HTTP
    [8]       HTTP Port: 8080
    [9]   APEX static resources location: /home/oracle/images
    [A] Accept and Continue - Create configuration and Install ORDS in the database
    [Q] Quit - Do not proceed. No changes
  Choose [A]: A
  ```

# 参考資料
+ [Oracle APEX 情報サイト](https://apex.oracle.com/pls/apex/japancommunity/r/main/home)