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
oracle-database-preinstall-23ai: for Linux 8 or for Linux 9- Oracle Database 23ai: Download RPM
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.
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.
Customize the datafile locations as needed for your own storage setup.
Specify the Fast Recovery Area (FRA) location, this is where backups and archived logs will be stored.
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.

















Comments
Post a Comment