Skip to main content

Upgrade Oracle APEX 23.2 to 24.2 and ORDS to 25.2

Oracle APEX and ORDS upgrade process overview

Introduction

APEX and ORDS versions are tied together closely enough that upgrading one without the other usually isn't an option. In this guide, we'll upgrade Oracle APEX from 23.2 to 24.2, and ORDS from 22.3 to 25.2, on the same environment. Since ORDS 25.2 requires a newer JDK than what most 22.3 installs run on, we'll also upgrade Java to version 17 along the way.

Prerequisites

  • Keep the SYS user password handy, you'll need it during both the APEX and ORDS installers.
  • Minimum Java 17 is required for ORDS 25.2.
  • Take a full database backup before starting, in case you need to roll back.

Environment Used in This Guide

Server apex.oraeasy.com / 192.168.101.7
APEX (current) 23.2
ORDS (current) 22.3
Database Name APEXDB

Download the Software

Part 1: Upgrade APEX

Step 1: Check Current APEX and ORDS Versions

Before touching anything, confirm the current versions of both APEX and ORDS, and note the existing IMAGE_PREFIX value, since you'll compare against it later if you hit the image directory issue covered further down.


SQL> col VERSION_NO for a20
SQL> col API_COMPATIBILITY for a20
SQL> col PATCH_APPLIED for a20
SQL> select * from apex_release;

VERSION_NO           API_COMPATIBILITY    PATCH_APPLIED
-------------------- -------------------- --------------------
23.2.0               2023.10.31           APPLIED

SQL> col NAME for a30
SQL> col VALUE for a60
SQL> select * from apex_instance_parameters where name='IMAGE_PREFIX';
NAME              VALUE        CREATED_O LAST_UPDA
----------------  ------------ --------- ---------
IMAGE_PREFIX      /i/          28-NOV-23 28-NOV-23

SQL> exit

[oracle@apex ~]$ cd /u01/app/ords/bin/
[oracle@apex bin]$ ./ords --version
2025-07-25T17:12:17.806Z INFO        Your configuration folder /u01/app/ords/bin is located in ORDS product folder.  Oracle recommends to use a different configuration folder.

ORDS: Release 22.3 Production on Fri Jul 25 17:12:17 2025

Copyright (c) 2010, 2025, Oracle.

Configuration:
  /u01/app/ords/bin/
Oracle REST Data Services 22.3.3.r3111929

Step 2: Check Invalid Object Count and User Status

Taking a baseline invalid object count now gives you something to compare against after the upgrade, since recompiling APEX and ORDS packages temporarily invalidates a large number of objects. Also check the status of the APEX and ORDS related accounts so you know their current lock state before the upgrade changes them.

  
SQL> select count(*) from dba_objects where status='INVALID';

COUNT(*)   
--------
508

SQL> select USERNAME,ACCOUNT_STATUS,EXPIRY_DATE,PROFILE from dba_users where USERNAME like '%ORDS%' or USERNAME like '%APEX%';

USERNAME                       ACCOUNT_STATUS                   EXPIRY_DA PROFILE
------------------------------ -------------------------------- --------- -------------------------
APEX_LISTENER                  LOCKED                           21-NOV-23 DEFAULT
APEX_230100                    OPEN                                       DEFAULT
APEX_PUBLIC_USER               OPEN                             21-NOV-23 DEFAULT
APEX_REST_PUBLIC_USER          LOCKED                           21-NOV-23 DEFAULT
ORDS_METADATA                  OPEN                                       DEFAULT
APEX_230200                    OPEN                                       DEFAULT
APEX_220100                    LOCKED                           21-NOV-23 DEFAULT
ORDSYS                         LOCKED                           21-NOV-23 DEFAULT
ORDS_PUBLIC_USER               OPEN                                       ORDS_PUBLIC_USER_PROFILE
                                                                          
9 rows selected.

Step 3: Confirm the Existing URL Is Working

Before stopping any services, confirm the current ORDS URL is reachable. This gives you a known-good state to fall back to if something goes wrong mid-upgrade.

http://192.168.101.7:8080/ords/

ORDS landing page confirming the service is reachable before upgrade
ORDS service confirmation page showing active status before upgrade

Step 4: Stop the Existing ORDS Service

Both the running ORDS processes need to be stopped before we can upgrade APEX and swap in the new ORDS software. Identify the process IDs and kill them.


[oracle@apex bin]$ ps -ef|grep ords
oracle   17514     1  0 Jul21 ?        00:04:41 /u01/java/jdk-11.0.18/bin/java -Doracle.dbtools.cmdline.home=/u01/app/ords -Duser.language=en -Duser.region=IN -Dfile.encoding=UTF-8 -Djava.awt.headless=true -Dnashorn.args=--no-deprecation-warning -Doracle.dbtools.cmdline.ShellCommand=ords -Duser.timezone=UTC -jar /u01/app/ords/ords.war --config /etc/ords/config serve
oracle   18295     1  0 Jul21 ?        00:12:19 java -jar ords.war serve
oracle   19017  7299  0 22:56 pts/0    00:00:00 grep --color=auto ords

[oracle@apex bin]$ kill -9 17514
[oracle@apex bin]$ kill -9 18295

Step 5: Create a Directory and Place the APEX 24.2 Software


[oracle@apex app]$ mkdir apex242
[oracle@apex app]$ pwd
/u01/app/apex242
[oracle@apex software_dir]$ pwd
/u02/software_dir
[oracle@apex software_dir]$ unzip apex_24.2_en.zip -d /u01/app/apex242/

Step 6: Create a Tablespace

APEX 24.2 gets its own dedicated tablespace rather than reusing the 23.2 one, keeping the old and new versions cleanly separated on disk during the upgrade.


SQL> create tablespace apex242 datafile '/u01/app/oracle/oradata/APEXDB/datafile/apex242_01.dbf' size 2g autoextend on;

Tablespace created.

Step 7: Run the Installation Script

This is the core APEX upgrade step. Running apexins.sql with the new tablespace, temp tablespace, and image prefix installs APEX 24.2 into a fresh schema (APEX_240200) alongside the existing installation.


[oracle@apex ~]$ cd /u01/app/apex242/apex
[oracle@apex apex]$ ls -lrth apexins.sql*
-rw-r--r--.  1 oracle oinstall 1.6K Apr 22 22:15 apexins.sql

[oracle@apex apex]$ sqlplus / as sysdba

SQL> def
DEFINE _DATE           = "26-JUL-25" (CHAR)
DEFINE _CONNECT_IDENTIFIER = "APEXDB" (CHAR)
DEFINE _USER           = "SYS" (CHAR)
DEFINE _PRIVILEGE      = "AS SYSDBA" (CHAR)
DEFINE _SQLPLUS_RELEASE = "1919000000" (CHAR)
DEFINE _EDITOR         = "vi" (CHAR)
DEFINE _O_VERSION      = "Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production
Version 19.19.0.0.0" (CHAR)
DEFINE _O_RELEASE      = "1919000000" (CHAR)

SQL> @apexins.sql apex242 apex242 TEMP /i/

...set_appun.sql

PL/SQL procedure successfully completed.

...set_ufrom_and_upgrade.sql

PL/SQL procedure successfully completed.

Session altered.

FOO3
------------------------------
install2025-07-26_00-16-34.log

. ORACLE
.
. Oracle APEX Installation.
..........................................
.
...set_appun.sql
... Checking prerequisites (MANUAL)
.
. SYSDBA Privilege
.   pass - Connection with SYSDBA privilege.
. Database rolling upgrade
.   pass - No rolling upgrade.
. DB components
.   pass - APEX: version=23.2.0
.   pass - CATPROC: version=19.0.0.0.0
.   pass - XDB: version=19.0.0.0.0
. XDB
.   pass - is valid
. DB parameters
.   pass - workarea_size_policy is AUTO
. PL/SQL Web Toolkit
.   pass - version 11.2.0.0.1
. Tablespaces
.   pass - found apex242
.   pass - found apex242
.   pass - found TEMP
. PHASES (1,2,3)...

PL/SQL procedure successfully completed.

....................................
....................................

Thank you for installing Oracle APEX 24.2.0

Oracle APEX is installed in the APEX_240200 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 environment is as follows:
http://host:port/ords/apex


timing for: Phase 3 (Switch)
Elapsed:    0.57


timing for: Complete Installation
Elapsed:    7.98

SYS> 

Step 8: Check the APEX Version

A quick check against apex_release confirms the installation completed and the database is now running APEX 24.2.0.


SQL> col VERSION_NO for a20
SQL> col API_COMPATIBILITY for a20
SQL> col PATCH_APPLIED for a20
SQL> select * from apex_release;

VERSION_NO           API_COMPATIBILITY    PATCH_APPLIED
-------------------- -------------------- --------------------
24.2.0               2024.11.30           APPLIED

Step 9: Run the Password Change and REST Config Scripts

These two scripts set the ADMIN password for the upgraded instance and configure the REST-related accounts. Keep whatever password you enter here safe, you'll need it to log in afterward.


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" exists.
Enter ADMIN's email [oraeasyy@gmail.com] oraeasyy@gmail.com
Enter ADMIN's password []
Changed password of instance administrator ADMIN.

SQL>

SQL> @apex_rest_config.sql
Enter a password for the APEX_LISTENER user              []
Enter a password for the APEX_REST_PUBLIC_USER user              []
...set_appun.sql
...setting session environment
...create APEX_LISTENER and APEX_REST_PUBLIC_USER users
...grants for APEX_LISTENER and ORDS_METADATA user
SQL>

Step 10: Unlock the APEX User

The new APEX_240200 schema comes out of the installer locked. Unlock it so ORDS and any direct connections can use it.


SQL> select username,account_status from dba_users where username like '%APEX%';
USERNAME                                           ACCOUNT_STATUS
-------------------------------------------------- --------------------------------
APEX_LISTENER                                      LOCKED
APEX_230100                                        OPEN
APEX_PUBLIC_USER                                   OPEN
APEX_REST_PUBLIC_USER                              LOCKED
APEX_PUBLIC_ROUTER                                 OPEN
APEX_230200                                        OPEN
APEX_220100                                        LOCKED
APEX_240200                                        LOCKED
SQL>
SQL> alter user APEX_240200 identified by Your@pass account unlock;

User altered.

SQL> select username,account_status from dba_users where username like '%APEX%';

USERNAME                                           ACCOUNT_STATUS
-------------------------------------------------- --------------------------------
APEX_LISTENER                                      LOCKED
APEX_230100                                        OPEN
APEX_PUBLIC_USER                                   OPEN
APEX_REST_PUBLIC_USER                              LOCKED
APEX_PUBLIC_ROUTER                                 OPEN
APEX_230200                                        OPEN
APEX_220100                                        LOCKED
APEX_240200                                        OPEN

  

That completes the APEX upgrade. Now let's move on to upgrading ORDS.

Part 2: Upgrade ORDS

Step 1: Back Up the ORDS Directory

Before touching the existing ORDS installation, keep a copy of it. If anything goes wrong during the uninstall or reinstall, you'll want this to fall back on.


[oracle@apex apex]$ cd /u01/app/ords
[oracle@apex app]$ cp -r ords ords_bkp_2507
[oracle@apex app]$ du -sh *
696M    apex
747M    apex23
818M    apex232
651M    apex242
260M    audit
51G     oracle
13M     oraInventory
1.5G    ords
1.5G    ords_bkp_2507

Step 2: Uninstall the Existing ORDS

ORDS needs to be cleanly uninstalled from the database before the new version is installed, this removes the ORDS_METADATA and ORDS_PUBLIC_USER schemas and their objects so the new install starts from a clean state.


[oracle@apex ords]$ java -jar ords.war uninstall
Warning: Support for executing: java -jar ords.war has been deprecated.
Please add ords to your PATH and use the ords command instead.
Run the following command to add ords to your PATH:

echo -e 'export PATH="$PATH:/u01/app/ords/bin"' >> ~/.bash_profile

Start a new shell to pick up this change.
2025-07-25T19:03:59.630Z INFO        Your configuration folder /u01/app/ords is located in ORDS product folder.  Oracle recommends to use a different configuration folder.

ORDS: Release 22.3 Production on Sat Aug 200:33:59 2025

Copyright (c) 2010, 2025, Oracle.

Configuration:
  /u01/app/ords/

Oracle REST Data Services - Interactive Uninstall

  Enter a number to select the database pool to use or specify the database connection
    [1] default      jdbc:oracle:thin:@//192.168.101.7:1521/APEXDB
    [2] Specify the database connection
  Choose [1]: 1
  Provide database user name with administrator privileges.
      Enter the administrator username: sys
  Enter the database password for SYS AS SYSDBA: Connecting to database user: sys url: jdbc:oracle:thin:@//192.168.101.7:1521/APEXDB

Retrieving information.
Uninstalling Oracle REST Data Services in NON_CDB
------------------------------------------------------------
Date       : 26 Jul 2025 00:34:23
Release    : Oracle REST Data Services 22.3.3.r3111929
Type       : ORDS Uninstall
Database   : Oracle Database 19c Standard Edition 2
DB Version : 19.19.0.0.0
------------------------------------------------------------
Container Name: NON_CDB
------------------------------------------------------------
[*** script: ords_alter_session_script.sql]
PL/SQL procedure successfully completed.
[*** script: ords_uninstall.sql]
Update schema status to UNINSTALLING
PL/SQL procedure successfully completed.
******************************************************
* INFO: REMOVING Oracle REST Data Services
******************************************************
PL/SQL procedure successfully completed.
PL/SQL procedure successfully completed.
PL/SQL procedure successfully completed.
drop user ORDS_METADATA
drop user ORDS_PUBLIC_USER
PL/SQL procedure successfully completed.
PL/SQL procedure successfully completed.
Commit complete.
******************************************************
* INFO: Removed Oracle REST Data Services database objects
******************************************************
[*** script: ords_drop_app_contexts.sql]
PL/SQL procedure successfully completed.
[*** script: ords_drop_pub_synonyms.sql]
PL/SQL procedure successfully completed.
******************************************************
* INFO: Removed ORDS Public Synonyms
******************************************************
[*** script: ords_drop_database_roles.sql]

PL/SQL procedure successfully completed.

[*** script: ords_alter_session_script.sql]

PL/SQL procedure successfully completed.

Completed uninstall for Oracle REST Data Services. Elapsed time: 00:00:11.350

[*** Info: Completed uninstall for Oracle REST Data Services. Elapsed time: 00:00:11.350
 ]
[oracle@apex ords]$

Step 3: Remove the Old ORDS Directory and Unzip the New Software


[oracle@apex app]$ pwd
/u01/app/
[oracle@apex app]$ rm -rf ords
[oracle@apex app]$ mkdir ords


[oracle@apex software_dir]$ pwd
/u02/software_dir
[oracle@apex software_dir]$ unzip ords-latest.zip -d /u01/app/ords
  

Step 4: Place the Images Directory from APEX into the ORDS Directory

ORDS serves APEX's static images from this images folder, so it needs to exist under the new ORDS installation, otherwise you'll hit the image directory error covered later in this guide.


[oracle@apex dbs]$ cd /u01/app/apex242/
[oracle@apex apex]$ cp -r images /u01/app/ords/
  

Step 5: Upgrade Java

ORDS 25.2 requires Java 17. Extract the JDK and update your environment so the new version takes precedence on the PATH.


[oracle@apex app]$ mkdir java
[oracle@apex app]$ cd java/
[oracle@apex java]$ pwd
/u01/app/java
[oracle@apex java]$ ls -lrth
total 175M
-rw-r--r--. 1 oracle oinstall 175M Aug  2 00:56 jdk-17.0.12_linux-x64_bin.tar.gz
[oracle@apex java]$
[oracle@apex java]$ tar -xvf jdk-17.0.12_linux-x64_bin.tar.gz

[oracle@apex ~]$ vi .bash_profile
[oracle@apex ~]$ cat .bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/.local/bin:$HOME/bin
export PATH
JAVA_HOME=/u01/app/java/jdk-17.0.12 
export PATH=/u01/app/java/jdk-17.0.12/bin:$PATH.
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19.3/dbhome
export ORACLE_SID=APEXDB
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib

[oracle@apex ~]$ . .bash_profile
[oracle@apex ~]$ java -version
java version "17.0.12" 2024-07-16 LTS
Java(TM) SE Runtime Environment (build 17.0.12+8-LTS-286)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.12+8-LTS-286, mixed mode, sharing)
  

Step 6: Create the Config Directory


[oracle@apex apex]$ cd /u01/app/ords
[oracle@apex ords]$ mkdir config
  

Step 7: Install ORDS

This is the interactive ORDS installer. Point it at the correct tablespace when prompted (option 4 below), rather than accepting the SYSAUX default, and cancel out once the standalone server starts automatically at the end, since we'll start it manually in a later step.


[oracle@apex ords]$ java -jar ords.war --config /u01/app/ords/config install
Warning: Support for executing: java -jar ords.war has been deprecated.
Please add ords to your PATH and use the ords command instead.
Run the following command to add ords to your PATH:

echo -e 'export PATH="$PATH:/u01/app/ords/bin"' >> ~/.bash_profile

Start a new shell to pick up this change.
2025-07-25T19:43:13.653Z WARNING     Your configuration folder /u01/app/ords/config is located in ORDS product folder.  Oracle recommends to use a different configuration folder.
Refer to Oracle REST Data Services Documentation on how to setup your configuration folder.

ORDS: Release 25.2 Production on Sat Aug 201:13:13 2025

Copyright (c) 2010, 2025, Oracle.

Configuration:
  /u01/app/ords/config

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

Oracle REST Data Services - Interactive Install

Created folder /u01/app/ords/config
  Enter a number to select the TNS net service name to use from /u01/app/oracle/product/19.3/dbhome/network/admin/tnsnames.ora or specify the database connection
    [1] APEXDB       SERVICE_NAME=APEXDB
    [S] Specify the database connection
  Choose [1]: 1
  Provide database user name with administrator privileges.
    Enter the administrator username: sys
  Enter the database password for SYS AS SYSDBA:

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: TNS
    [2] TNS Connection: TNS_NAME=APEXDB TNS_FOLDER=/u01/app/oracle/product/19.3/dbhome/network/admin
           Administrator User: SYS AS SYSDBA
    [3] Database password for ORDS runtime user (ORDS_PUBLIC_USER): 
    [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]: 4    
  -- Provide tablespace as per need:
  Enter the default tablespace for ORDS_METADATA and ORDS_PUBLIC_USER [SYSAUX]: apex242
  Enter the temporary tablespace for ORDS_METADATA and ORDS_PUBLIC_USER [TEMP]: TEMP
  Enter a number to update the value or select option A to Accept and Continue
    [1] Connection Type: TNS
    [2] TNS Connection: TNS_NAME=APEXDB TNS_FOLDER=/u01/app/oracle/product/19.3/dbhome/network/admin
           Administrator User: SYS AS SYSDBA
    [3] Database password for ORDS runtime user (ORDS_PUBLIC_USER): 
    [4] ORDS runtime user and schema tablespaces:  Default: apex242 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]: A
The setting named: db.connectionType was set to: tns in configuration: default
The setting named: db.tnsAliasName was set to: APEXDB in configuration: default
The setting named: db.tnsDirectory was set to: /u01/app/oracle/product/19.3/dbhome/network/admin in configuration: default
The setting named: plsql.gateway.mode was set to: proxied in configuration: default
The setting named: db.username was set to: ORDS_PUBLIC_USER in configuration: default
The setting named: db.password was set to: ****** in configuration: default
The setting named: feature.sdw was set to: true in configuration: default
The global setting named: database.api.enabled was set to: true
The setting named: restEnabledSql.active was set to: true in configuration: default
The global setting named: standalone.http.port was set to: 8080
The global setting named: standalone.doc.root was set to: /u01/app/ords/config/global/doc_root
The setting named: security.requestValidationFunction was set to: ords_util.authorize_plsql_gateway in configuration: default
2025-07-25T19:43:52.989Z INFO        Created folder /u01/app/ords/logs
2025-07-25T19:43:52.989Z INFO        The log file is defaulted to the current working directory located at /u01/app/ords/logs
2025-07-25T19:43:53.052Z INFO        Installing Oracle REST Data Services version 25.2.1.r1942034 in NON_CDB
2025-07-25T19:43:54.427Z INFO        ... Verified database prerequisites
2025-07-25T19:43:54.986Z INFO        ... Created Oracle REST Data Services proxy user
2025-07-25T19:43:55.454Z INFO        ... Created Oracle REST Data Services schema
2025-07-25T19:43:55.955Z INFO        ... Granted privileges to Oracle REST Data Services
2025-07-25T19:44:03.279Z INFO        ... Created Oracle REST Data Services database objects
2025-07-25T19:44:18.302Z INFO        Completed installation for Oracle REST Data Services version 25.2.1.r1942034. Elapsed time: 00:00:25.226

2025-07-25T19:44:18.337Z INFO        Completed configuring PL/SQL gateway user for Oracle REST Data Services version 25.2.1.r1942034. Elapsed time: 00:00:00.34

2025-07-25T19:44:18.339Z INFO        Log file written to /u01/app/ords/logs/ords_install_2025-07-26_011352_99004.log
2025-07-25T19:44:18.903Z INFO        HTTP and HTTP/2 cleartext listening on host: 0.0.0.0 port: 8080
2025-07-25T19:44:18.935Z INFO        Disabling document root because the specified folder does not exist: /u01/app/ords/config/global/doc_root
2025-07-25T19:44:18.935Z INFO        Default forwarding from / to contextRoot configured.
2025-07-25T19:44:22.525Z INFO        Configuration properties for: |default|lo|
db.connectionType=tns
db.tnsAliasName=APEXDB
db.tnsDirectory=/u01/app/oracle/product/19.3/dbhome/network/admin
db.username=ORDS_PUBLIC_USER
feature.sdw=true
plsql.gateway.mode=proxied
restEnabledSql.active=true
security.requestValidationFunction=ords_util.authorize_plsql_gateway
database.api.enabled=true
standalone.doc.root=/u01/app/ords/config/global/doc_root
standalone.http.port=8080
config.required=true
resource.templates.enabled=false
db.password=******
conf.use.wallet=true

2025-07-25T19:44:22.528Z WARNING     *** jdbc.MaxLimit in configuration |default|lo| is using a value of 10, this setting may not be sized adequately for a production environment ***
2025-07-25T19:44:23.026Z INFO        Created Pool: |default|lo|-2025-07-25T19-44-22.438716300Z at: 2025-07-25T19:44:22.438716300Z
2025-07-25T19:44:23.032Z INFO

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


2025-07-25T19:44:23.186Z INFO        Oracle REST Data Services initialized
Oracle REST Data Services version : 25.2.1.r1942034
Oracle REST Data Services server info: jetty/12.0.18
Oracle REST Data Services java info: Java HotSpot(TM) 64-Bit Server VM  (build 17.0.12+8-LTS-286 mixed mode, sharing)

-- Cancel this:

  

Step 8: Add ORDS Home to the Environment and Check Its Version


[oracle@apex ~]$ export PATH=/u01/app/java/jdk-17.0.12/bin:/u01/app/ords/bin:$PATH.
 
[oracle@apex ~]$ ords --version

ORDS: Release 25.2 Production on Fri Jul 25 20:03:19 2025

Copyright (c) 2010, 2025, Oracle.

Configuration:
  /home/oracle

Oracle REST Data Services 25.2.1.r1942034
[oracle@apex ~]$

  

Step 9: Start the ORDS Service


[oracle@apex ~]$ nohup ords --config /u01/app/ords/config serve &
[1] 19755
[oracle@apex ~]$ nohup: ignoring input and appending output to ‘nohup.out’

 [oracle@apex ~]$ ps -ef|grep ords
oracle   19755  7299  0 01:21 pts/0    00:00:00 /bin/bash /u01/app/ords/bin/ords --config /u01/app/ords/config serve
oracle   19789 19755 99 01:21 pts/0    00:00:08 /u01/app/java/jdk-17.0.12/bin/java -Doracle.dbtools.cmdline.home=/u01/app/ords -Duser.language=en -Duser.region=IN -Dfile.encoding=UTF-8 -Djava.awt.headless=t              rue -Doracle.dbtools.cmdline.ShellCommand=ords -Duser.timezone=UTC -XX:+IgnoreUnrecognizedVMOptions -jar /u01/app/ords/ords.war --config /u01/app/ords/config serve
oracle   19865  7299  0 01:21 pts/0    00:00:00 grep --color=auto ords
[oracle@apex ~]$
  

Step 10: Log In and Verify

Log in to the following URL using the ADMIN user and the password you set in Step 9 of the APEX upgrade.

http://192.168.101.7:8080/ords/apex_admin

Oracle APEX administration services login page after the upgrade

Step 11: Run UTLRP and Verify the Invalid Object Count

With APEX and ORDS both upgraded, recompile invalid objects and compare the count against your Step 2 baseline. Some invalid objects are expected right after an upgrade like this, and utlrp.sql clears most of them.


SQL> select count(*) from dba_objects where status='INVALID';

  COUNT(*)
----------
       592

SQL> @?/rdbms/admin/utlrp

SQL> select count(*) from dba_objects where status='INVALID';

  COUNT(*)
----------
       467
  

Troubleshooting: Image Directory Issue

When trying to log in to APEX after the upgrade, you might see the following error:

There is a problem with your environment because the Oracle APEX files have not been loaded. Please verify that you have copied the images directory to your application server as instructed in the Installation Guide. In addition, please verify that your image prefix path is correct. Your current path is /i/ (it should contain both starting and ending forward slashes, such as the default /i/). Use the SQL script reset_image_prefix.sql if you need to change it.

This happens when the IMAGE_PREFIX parameter still points at the old local path instead of the CDN location for the new version. Update it as follows:


SQL> set lines 333 pages 333
SQL> col NAME for a30
SQL> col VALUE for a60
SQL> select * from apex_instance_parameters where name='IMAGE_PREFIX';

NAME                           VALUE         CREATED_O LAST_UPDA
------------------------------ ------------  --------- ---------
IMAGE_PREFIX                   /i/          26-JUL-25  26-JUL-25

SQL> begin
  apex_instance_admin.set_parameter(p_parameter=>'IMAGE_PREFIX', p_value=>'https://static.oracle.com/cdn/apex/24.2.0/');
  commit;
end;
/
PL/SQL procedure successfully completed.

SQL> select * from apex_instance_parameters where name='IMAGE_PREFIX';

NAME                           VALUE                                                        CREATED_O LAST_UPDA
------------------------------ ------------------------------------------------------------ --------- ---------
IMAGE_PREFIX                   https://static.oracle.com/cdn/apex/24.2.0/                   26-JUL-25  26-JUL-25

Note that the value https://static.oracle.com/cdn/apex/24.2.0/ is specific to version 24.2. If you're upgrading to a different APEX version, use the CDN path for that version instead.

Thank you for reading!

I hope this content has been helpful to you. Your feedback and suggestions are always welcome, feel free to leave a comment or reach out with any queries.

Abhishek Shrivastava

Oracle DBA with hands-on experience managing production Data Guard, RAC, GoldenGate, and APEX environments. I write practical, tested installation and troubleshooting guides based on real deployment work.

📧 Email: oraeasyy@gmail.com
🌐 Website: www.oraeasy.com

Follow Us

Comments