Skip to main content

Oracle Database 23ai Free Installation Guide

Oracle Database 23ai Free installation overview

Introduction

Oracle Database 23ai, released in May 2024, is Oracle's latest long-term support release, introducing over 300 new features designed to integrate artificial intelligence (AI) capabilities directly into enterprise data management. Oracle offers a free version, Oracle Database 23ai Free, which lets you explore and develop with the latest features without incurring any licensing costs. This guide walks through the Oracle Database 23ai Free installation process step by step, using the RPM-based install on Oracle Linux.

Prerequisites

Below are the minimum requirements for a Linux environment:

  • CPU: 2 cores
  • RAM: 2GB
  • Disk space: 12GB
  • Swap: 1.5 times the amount of RAM
  • OS: Oracle Linux 8/9 or Red Hat Enterprise Linux 8/9

Software Download

Environment Used in This Guide

  • Hostname: oracle23ai
  • OS: OL9

Note: keep enough free space on the / mount point, since ORACLE_HOME gets created under /opt by default. You can also create a separate mount point named /opt if you'd rather keep it isolated from the root filesystem.

Step 1: Install the Preinstall Package

The oracle-database-preinstall-23ai package handles all the OS-level prerequisites automatically, kernel parameters, required packages, user and group creation, so you don't have to configure each of them by hand.


[root@oracle23ai ~]# yum install -y oracle-database-preinstall-23ai
Oracle Linux 9 BaseOS Latest (x86_64) 2.2 MB/s | 50 MB 00:22
Oracle Linux 9 Application Stream Packages (x86_64) 2.1 MB/s | 50 MB 00:23
Oracle Linux 9 UEK Release 7 (x86_64) 3.2 MB/s | 58 MB 00:17
Last metadata expiration check: 0:00:10 ago on Sat 15 Feb 2025 06:50:29 PM IST.
Dependencies resolved.
========================================================================
 Package                       Architecture  Version            Repository         Size
========================================================================
Installing:
 oracle-database-preinstall-23ai  x86_64    1.0-2.el9          ol9_appstream      35 k
Installing dependencies:
 initscripts                      x86_64    10.11.7-1.0.1.el9  ol9_baseos_latest  285 k
 ksh                              x86_64    3:1.0.6-4.el9_5    ol9_appstream      889 k
 libnsl                           x86_64    2.34-100.0.1.el9   ol9_baseos_latest   69 k
Transaction Summary
========================================================================
Install  4 Packages
Total download size: 1.2 M
Installed size: 4.2 M
Downloading Packages:
(1/4): libnsl-2.34-100.0.1.el9.x86_64.rpm         38 kB/s |  69 kB 00:01
(2/4): initscripts-10.11.7-1.0.1.el9.x86_64.rpm  149 kB/s | 285 kB 00:01
(3/4): ksh-1.0.6-4.el9_5.x86_64.rpm              339 kB/s | 889 kB 00:02
(4/4): oracle-database-preinstall-23ai-1.0-2.el9.x86_64.rpm 31 kB/s |  35 kB 00:01
-------------------------------------------------------------------------------------------------------
Total                                            434 kB/s | 1.2 MB 00:02
Oracle Linux 9 BaseOS Latest (x86_64)             6.1 MB/s | 6.2 kB 00:00
Importing GPG key 0x8D8B756F:
Userid     : "Oracle Linux (release key 1) "
Fingerprint: 3E6D 826D 3FBA B389 C2F3 8E34 BC4D 06A0 8D8B 756F
From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
Key imported successfully
Importing GPG key 0x8B4EFBE6:
Userid     : "Oracle Linux (backup key 1) "
Fingerprint: 9822 3175 9C74 6706 5D0C E9B2 A7DD 0708 8B4E FBE6
From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
Key imported successfully
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        : 1/1
  Installing       : ksh-3:1.0.6-4.el9_5.x86_64                   1/4
  Running scriptlet: ksh-3:1.0.6-4.el9_5.x86_64                   1/4
  Installing       : libnsl-2.34-100.0.1.el9.x86_64               2/4
  Installing       : initscripts-10.11.7-1.0.1.el9.x86_64         3/4
  Running scriptlet: initscripts-10.11.7-1.0.1.el9.x86_64         3/4
Created symlink /etc/systemd/system/sysinit.target.wants/import-state.service → /usr/lib/systemd/system/import-state.service.
Created symlink /etc/systemd/system/sysinit.target.wants/loadmodules.service → /usr/lib/systemd/system/loadmodules.service.
  Installing       : oracle-database-preinstall-23ai-1.0-2.el9.x86_64 4/4
  Running scriptlet: oracle-database-preinstall-23ai-1.0-2.el9.x86_64 4/4
  Verifying        : initscripts-10.11.7-1.0.1.el9.x86_64         1/4
  Verifying        : libnsl-2.34-100.0.1.el9.x86_64               2/4
  Verifying        : ksh-3:1.0.6-4.el9_5.x86_64                   3/4
  Verifying        : oracle-database-preinstall-23ai-1.0-2.el9.x86_64 4/4

Installed:
  initscripts-10.11.7-1.0.1.el9.x86_64
  ksh-3:1.0.6-4.el9_5.x86_64
  libnsl-2.34-100.0.1.el9.x86_64
  oracle-database-preinstall-23ai-1.0-2.el9.x86_64

Complete!
[root@oracle23ai ~]#

If you'd rather install the preinstall RPM manually after downloading it, use:


rpm -ivh oracle-database-preinstall-23ai-1.0-2.el9.x86_64.rpm

Step 2: Install the Oracle 23ai RPM

Download the Oracle 23ai Free RPM and place it in /u01, then install it with yum. This step installs the actual database software into ORACLE_HOME.


[root@oracle23ai ~]# yum -y localinstall /u01/oracle-database-free-23ai-1.0-1.el9.x86_64.rpm
Last metadata expiration check: 0:08:51 ago on Sat 15 Feb 2025 06:50:43 PM IST.
Dependencies resolved.
========================================================================
Package                  Architecture  Version       Repository    Size
========================================================================
Installing:
oracle-database-free-23ai x86_64      1.0-1         @commandline  1.3 G
Transaction Summary
========================================================================
Install  1 Package
Total size: 1.3 G
Installed size: 3.5 G
Downloading Packages:
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        : 1/1
  Running scriptlet: oracle-database-free-23ai-1.0-1.x86_64  1/1
  Installing       : oracle-database-free-23ai-1.0-1.x86_64  1/1
  Running scriptlet: oracle-database-free-23ai-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-23ai.conf' and then run '/etc/init.d/oracle-free-23ai configure' as root.
  Verifying        : oracle-database-free-23ai-1.0-1.x86_64  1/1

Installed:
  oracle-database-free-23ai-1.0-1.x86_64

Complete!

Step 3: Set the Oracle User Password

The preinstall package creates the oracle OS user automatically, but it doesn't set a password. Set one now so you can log in as that user for the remaining steps.


[root@oracle23ai ~]# passwd oracle
Changing password for user oracle.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.

Step 4: Locate the ORACLE_HOME Directory

The RPM installs the software to a fixed default path. Confirming this now saves you from guessing the path later when setting environment variables.


[root@oracle23ai ~]# cd /opt/oracle/product/23ai/dbhomeFree
[root@oracle23ai dbhomeFree]# pwd
/opt/oracle/product/23ai/dbhomeFree
[root@oracle23ai dbhomeFree]# ll
total 80
drwxr-xr-x.  2 oracle oinstall   102 Feb 15 19:05 addnode
drwxr-xr-x.  9 oracle oinstall    93 Feb 15 19:02 assistants
drwxr-xr-x.  2 oracle oinstall  8192 Feb 15 19:05 bin
drwxrwx---.  3 oracle oinstall    17 Feb 15 19:06 cfgtoollogs
drwxr-xr-x.  4 oracle oinstall    87 Feb 15 19:05 clone
drwxr-xr-x.  6 oracle oinstall    55 Feb 15 19:02 crs
drwxr-xr-x.  4 oracle oinstall    31 Feb 15 19:02 crypto
drwxr-xr-x.  3 oracle oinstall    18 Feb 15 19:02 css
drwxr-xr-x. 11 oracle oinstall   119 Feb 15 19:03 ctx
drwxr-xr-x.  7 oracle oinstall    71 Feb 15 19:03 cv
drwxr-xr-x.  3 oracle oinstall    20 Feb 15 19:03 data
drwxr-xr-x.  2 oracle oinstall    22 Feb 15 19:05 dbs
drwxr-xr-x.  5 oracle oinstall   173 Feb 15 19:05 deinstall
drwxr-xr-x.  3 oracle oinstall    20 Feb 15 19:03 demo
drwxr-xr-x.  3 oracle oinstall    20 Feb 15 19:03 diagnostics
drwxr-xr-x.  3 oracle oinstall    19 Feb 15 19:03 dv
-rw-r--r--.  1 oracle oinstall   852 Aug 18  2015 env.ora
drwxr-xr-x.  3 oracle oinstall    18 Feb 15 19:03 has
drwxr-xr-x.  5 oracle oinstall    41 Feb 15 19:03 hs
drwxrwx---. 11 oracle oinstall  4096 Feb 15 19:06 install
drwxr-xr-x.  2 oracle oinstall    29 Feb 15 19:05 instantclient
drwxr-x---. 12 oracle oinstall  4096 Feb 15 19:05 inventory
drwxr-xr-x.  9 oracle oinstall    94 Feb 15 19:03 javavm
drwxr-xr-x.  3 oracle oinstall    17 Feb 15 19:03 jdbc
drwxr-xr-x.  6 oracle oinstall    68 Feb 15 19:05 jdk
drwxr-xr-x.  2 oracle oinstall  4096 Feb 15 19:05 jlib
drwxr-xr-x. 10 oracle oinstall   112 Feb 15 19:04 ldap
drwxr-xr-x.  3 oracle oinstall 12288 Feb 15 19:05 lib
-rwxrwxr-x.  1 oracle oinstall  5780 Jan 31 07:30 LICENSE
drwxrwxr-x.  2 oracle oinstall     6 Jan 31 07:29 log
drwxr-xr-x.  5 oracle oinstall    42 Feb 15 19:04 md
drwxr-xr-x.  4 oracle oinstall    31 Feb 15 19:04 mgw
drwxr-xr-x. 11 oracle oinstall   118 Feb 15 19:04 network
drwxr-xr-x.  5 oracle oinstall    46 Feb 15 19:04 nls
drwxr-xr-x.  8 oracle oinstall   133 Feb 15 19:05 odbc
drwxr-xr-x.  5 oracle oinstall    42 Feb 15 19:04 olap
drwxr-xr-x.  4 oracle oinstall    31 Feb 15 19:04 oml4py
drwxr-xr-x. 13 oracle oinstall  4096 Feb 15 19:05 OPatch
drwxr-xr-x.  7 oracle oinstall    65 Feb 15 19:04 opmn
drwxr-xr-x.  5 oracle oinstall    45 Feb 15 19:05 oracore
-rw-r-----.  1 oracle oinstall   130 Feb 15 19:06 oraInst.loc
drwxr-xr-x.  4 oracle oinstall    29 Feb 15 19:05 ord
drwxr-xr-x.  3 oracle oinstall    19 Feb 15 19:05 oss
drwxr-xr-x.  8 oracle oinstall  4096 Feb 15 19:05 oui
drwxr-xr-x.  4 oracle oinstall    28 Feb 15 19:05 perl
drwxr-xr-x.  6 oracle oinstall   106 Feb 15 19:05 plsql
drwxr-xr-x.  7 oracle oinstall    88 Feb 15 19:05 precomp
drwxr-xr-x.  5 oracle oinstall    39 Feb 15 19:05 python
drwxr-xr-x.  2 oracle oinstall    26 Feb 15 19:05 QOpatch
drwxr-xr-x.  5 oracle oinstall    52 Feb 15 19:01 R
drwxr-xr-x.  4 oracle oinstall    29 Feb 15 19:05 racg
drwxr-xr-x. 13 oracle oinstall   140 Feb 15 19:05 rdbms
drwxr-xr-x.  3 oracle oinstall    21 Feb 15 19:05 relnotes
-rwx------.  1 oracle oinstall   525 Jan 31 07:29 root.sh
-rwxr-x---.  1 oracle oinstall  2957 Jun  7  2024 runInstaller
-rw-r--r--.  1 oracle oinstall  2927 Jul 20  2020 schagent.conf
drwxr-xr-x.  5 oracle oinstall   119 Feb 15 19:05 sdk
drwxr-xr-x.  3 oracle oinstall    18 Feb 15 19:05 slax
drwxr-xr-x.  4 oracle oinstall    28 Feb 15 19:05 sqlcl
drwxr-xr-x.  3 oracle oinstall    17 Feb 15 19:05 sqlj
drwxr-xr-x.  3 oracle oinstall  4096 Feb 15 19:05 sqlpatch
drwxr-xr-x.  6 oracle oinstall    53 Feb 15 19:05 sqlplus
drwxr-xr-x.  6 oracle oinstall    54 Feb 15 19:05 srvm
drwxr-xr-x.  3 oracle oinstall    17 Feb 15 19:05 ucp
drwxr-xr-x.  4 oracle oinstall    31 Feb 15 19:05 usm
drwxr-xr-x.  2 oracle oinstall    33 Feb 15 19:05 utl
drwxr-x---.  7 oracle oinstall    69 Feb 15 19:05 xdk

Step 5: Set Up the Bash Profile

Log in as the oracle user and configure ORACLE_HOME and related environment variables. Without this, the dbca and sqlplus commands won't be found or won't point to the right installation.


[oracle@oracle23ai ~]$ cat .bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

# User specific environment and startup programs
ORACLE_HOME=/opt/oracle/product/23ai/dbhomeFree
export ORACLE_HOME

LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib:.
export LD_LIBRARY_PATH

LIBPATH=$ORACLE_HOME/lib32:$ORACLE_HOME/lib:/usr/lib:/lib
export LIBPATH

TNS_ADMIN=${ORACLE_HOME}/network/admin
export TNS_ADMIN

PATH=$ORACLE_HOME/bin:$PATH:.
export PATH

Step 6: Run DBCA to Create the Database

With the environment set, launch the Database Configuration Assistant to create the actual database instance.


[oracle@oracle23ai ~]$ dbca

From here, the wizard works the same way as it does for other Oracle Database versions. The screens below walk through the key choices.

DBCA wizard step 1: choosing database operation
DBCA wizard step 2: selecting database creation mode
DBCA wizard step 3: general database purpose selection

Note: the Oracle SID will always be FREE, since this is Oracle 23ai Free. The global database name and PDB name can be customized as needed.

DBCA wizard step 4: setting global database name and PDB name

Customize the datafile locations as needed for your own storage setup.

DBCA wizard step 5: customizing datafile storage location

Specify the Fast Recovery Area (FRA) location, this is where backups and archived logs will be stored.

DBCA wizard step 6: specifying fast recovery area location
DBCA wizard step 7: additional database configuration options
DBCA wizard step 8: management options
DBCA wizard step 9: database vault and label security options
DBCA wizard step 10: user credentials configuration
DBCA wizard step 11: creation options summary
DBCA wizard step 12: pre-creation summary
DBCA wizard step 13: database creation progress
DBCA wizard step 14: database creation completing
DBCA wizard step 15: database creation finished
DBCA wizard step 16: database creation summary and completion

Step 7: Set the Environment and Log In

Once DBCA finishes, set the ORACLE_SID and confirm you can connect. We also check the PDB status and listener to confirm everything came up correctly.


[oracle@oracle23ai ~]$ . oraenv
ORACLE_SID = [oracle] ? FREE
The Oracle base has been set to /opt/oracle
[oracle@oracle23ai ~]$
[oracle@oracle23ai ~]$ sqlplus / as sysdba
SQL*Plus: Release 23.0.0.0.0 - Production on Sat Feb 15 20:25:04 2025
Version 23.7.0.25.01
Copyright (c) 1982, 2025, Oracle.  All rights reserved.
Connected to:
Oracle Database 23ai Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free
Version 23.7.0.25.01
SQL>
SQL> set lines 200 pages 1000
SQL> col open_mode for a15
SQL> col HOST_NAME for a15
SQL> select NAME,DATABASE_ROLE,OPEN_MODE,INSTANCE_NUMBER,INSTANCE_NAME,HOST_NAME,VERSION,STARTUP_TIME,STATUS from gv$database,gv$instance;

NAME      DATABASE_ROLE    OPEN_MODE       INSTANCE_NUMBER INSTANCE_NAME    HOST_NAME       VERSION           STARTUP_T STATUS
--------- ---------------- --------------- --------------- ---------------- --------------- ----------------- --------- ------------
APEXDB    PRIMARY          READ WRITE                    1 FREE             oracle23ai      23.0.0.0.0        15-FEB-25 OPEN

SQL> show pdbs
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 APEXPDB1                       READ WRITE NO
         
SQL> !lsnrctl status
LSNRCTL for Linux: Version 23.0.0.0.0 - Production on 15-FEB-2025 20:28:17
Copyright (c) 1991, 2025, Oracle.  All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=laptop-fhsjip9c)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 23.0.0.0.0 - Production
Start Date                15-FEB-2025 19:45:57
Uptime                    0 days 0 hr. 42 min. 22 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /opt/oracle/product/23ai/dbhomeFree/network/admin/listener.ora
Listener Log File         /opt/oracle/diag/tnslsnr/oracle23ai/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracle23ai)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Services Summary...
Service "2cf5fcb8b4ef1dc4e0631fc45e647325" has 1 instance(s).
  Instance "FREE", status READY, has 1 handler(s) for this service...
Service "2e302888a2dbd35ee0630a65a8c0ae25" has 1 instance(s).
  Instance "FREE", status READY, has 1 handler(s) for this service...
Service "FREEXDB" has 1 instance(s).
  Instance "FREE", status READY, has 1 handler(s) for this service...
Service "apexdb" has 1 instance(s).
  Instance "FREE", status READY, has 1 handler(s) for this service...
Service "apexpdb1" has 1 instance(s).
  Instance "FREE", status READY, has 1 handler(s) for this service...
The command completed successfully

The listener output confirms both the container database and the PDB are registered and ready, which means the installation completed successfully and the database is reachable.

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