[23ai] Installing Oracle23ai on OraLinux9
![[23ai] Installing Oracle23ai on OraLinux9](/_next/image?url=https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1755859016985%2F9cf8e5ef-ac9b-4ff4-9416-4084974f7c96.jpeg&w=3840&q=75)
Ingeniero informático, Oracle ACE, DBA y Arquitecto OCI, con más de 15 años de experiencia en plataformas Oracle. Certificado en OCI Certified Architect Professional y OCI Migration and Integration Certified Professional.
If you prefer to read in Spanish Spanish version.
The goal of this post is as follows: To create a new database using the Oracle Database Configuration Assistant (DBCA) on 23ai.
In this case, we defined an IaaS with Oracle Linux 9 on OCI. So, first thing first, we need to set up an Oracle 23ai because it is a new environment.
[root@~]# grep PRETTY_NAME /etc/os-release
PRETTY_NAME="Oracle Linux Server 9.6"
In order to successfully set up Oracle 23ai, we need the following files:
[root@test1 tmp]# ls -lac *rpm
-rw-r--r--. 1 root root 1412957372 Sep 2 09:47 oracle-database-free-23ai-23.9-1.el9.x86_64.rpm
-rw-r--r--. 1 root root 30688 Sep 2 09:30 oracle-database-preinstall-23c-1.0-0.5.el8.x86_64.rpm
A quick note on where we can find these files:
oracle-database-preinstall-23c-1.0-0.5.el8.x86_64.rpm here.
oracle-database-free-23ai-23.9-1.el9.x86_64.rpm. here.
So, let's get down to business!
Installing and Configuring
- Install the Linux RPM oracle-database-preinstall-23c-1.0-0.5.el8.x86_64.rpm:
[root@tmp]# dnf install oracle-database-preinstall-23c-1.0-0.5.el8.x86_64.rpm -y
Last metadata expiration check: 1:54:40 ago on Tue 02 Sep 2025 07:46:07 AM GMT.
Dependencies resolved.
....
....
Complete!
- Install the Linux RPM oracle-database-free-23ai-23.9-1.el9.x86_64.rpm:
[root@test1 tmp]# wget https://objectstorage.....
[root@test1 tmp]# dnf install oracle-database-free-23ai-23.9-1.el9.x86_64.rpm -y
Last metadata expiration check: 2:06:18 ago on Tue 02 Sep 2025 07:46:07 AM GMT.
Dependencies resolved.
....
....
3/3
Installed:
oracle-database-free-23ai-23.9-1.x86_64 oracle-database-preinstall-23ai-1.0-3.el9.x86_64
Complete!
So, after running both rpm, we can find the following script, oracle-free-23ai, in /etc/init.d in order to create the database 23ai. Before running it the script, we need to set the DB_PASSWORD environment variable.
[root@test1 tmp]# export DB_PASSWORD=oracle
[root@test1 tmp]# (echo "${DB_PASSWORD}"; echo "${DB_PASSWORD}";) | /etc/init.d/oracle-free-23ai 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/FREE.log" for further details.
Connect to Oracle Database using one of the connect strings:
Pluggable database: test1/FREEPDB1
Multitenant container database: test1
Done! In this setup, we can already with 23ai in our environment. Lastly,as a wee bit trick, we can to configure .bashrc and .bash_profile files in order to work with the binaries easily, such as sqlplus, dbca, or even tkproff.
Below we can see the .bashrc after updating it:
# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# User specific environment
if ! [[ "$PATH" =~ "$HOME/.local/bin:$HOME/bin:" ]]
then
PATH="$HOME/.local/bin:$HOME/bin:$PATH"
fi
export PATH
# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=
# User specific aliases and functions
if [ -d ~/.bashrc.d ]; then
for rc in ~/.bashrc.d/*; do
if [ -f "$rc" ]; then
. "$rc"
fi
done
fi
ORACLE_HOME=/opt/oracle/product/23ai/dbhomeFree; export ORACLE_HOME
PATH=/bin:/usr/bin:/usr/local/sbin:/usr/sbin:$ORACLE_HOME/bin:$ORACLE_HOME/lib:$ORACLE_HOME/OPatch/:$ORACLE_HOME/lib; export PATH
LD_LIBRARY_PATH=${ORACLE_HOME}/lib; export LD_LIBRARY_PATH
ORACLE_SID=FREE; export ORACLE_SID
PDB_NAME=FREEPDB1; export PDB_NAME
Don’t forget that the goal is to use dbca in order to do the following:
Generate a template using the current database.
Drop the current database.
Create a new database using the response and template files.
We run dbca with the option -silent. The -silent option indicates to run dbca in silent mode.
Generate a template
[oracle@test1 ~]$ dbca -silent \
-createTemplateFromDB \
-sourceDB FREE \
-templateName FREE.template \
-sysDBAUserName SYS \
-sysDBAPassword oracle
Prepare for db operation
33% complete
Creating a template from the database
37% complete
40% complete
43% complete
47% complete
50% complete
53% complete
57% complete
60% complete
63% complete
67% complete
Creating template
100% complete
The template "/opt/oracle/product/23ai/dbhomeFree/assistants/dbca/templates/FREE.template.dbt" creation completed.
Look at the log file "/opt/oracle/cfgtoollogs/dbca/silent.log_2025-09-02_12-09-54PM_170638" for further details.
Drop the current database
Before dropping the database, we need to switch off the database.
[oracle@test1 ~]$ dbca -silent \
-deleteDatabase \
-sourceDB FREE \
-sysDBAUserName sys \
-sysDBAPassword oracle
[WARNING] [DBT-11503] The instance (FREE) is not running on the local node. This may result in partial delete of Oracle database.
CAUSE: A locally running instance is required for complete deletion of Oracle database instance and database files.
ACTION: Specify a locally running database, or execute DBCA on a node where the database instance is running.
[WARNING] [DBT-19202] The Database Configuration Assistant will delete the Oracle instances and datafiles for your database. All information in the database will be destroyed.
Prepare for db operation
32% complete
Connecting to database
35% complete
39% complete
42% complete
45% complete
48% complete
52% complete
65% complete
Updating network configuration files
68% complete
Deleting instance and datafiles
84% complete
100% complete
Database deletion completed.
Look at the log file "/opt/oracle/cfgtoollogs/dbca/FREE/FREE0.log" for further details.
Create a new database
To create the database, we are going to work with the following files:
[oracle@test1 ~]$ ls -lac config/
total 52
drwxr-xr-x. 2 oracle oinstall 49 Sep 3 06:35 .
drwx------. 3 oracle oinstall 127 Sep 2 15:47 ..
-rw-r-----. 1 oracle oinstall 20942 Sep 2 15:47 FREE.template.dbt
-rw-r-----. 1 oracle oinstall 25378 Sep 3 06:35 shadow.rsp
- FREE.template.dbt, it is the template that we created in the previous step. Therefore, we are going to edit the template in order to remove the references to FREEPDB1. The goal is to create the cdb without pdbs

shadow.rsp. It is the response file that we use to run dbca. It is a copy of response file template ($ORACLE_HOME/assistants/dbca/dbca.rsp) tailored to our needs.
Below, you can see the response file after it has been upgraded:
[oracle@test1 ~]$ more config/shadow.rsp | grep -v ^$ | grep -v ^# responseFileVersion=/oracle/assistants/rspfmt_dbca_response_schema_v23.0.0 gdbName=FREE sid=FREE createAsContainerDatabase=true numberOfPDBs=0 templateName=/home/oracle/config/FREE.template.dbt sysPassword=********* systemPassword=********
After we have upgraded both files, we run dbca in silent mode using our response file :
[oracle@test1 ~]$ dbca -createDatabase -silent -responseFile /home/oracle/config/shadow.rsp
Prepare for db operation
4% complete
Creating and starting Oracle instance
5% complete
6% complete
8% complete
Creating database files
12% complete
Creating data dictionary views
13% complete
16% complete
17% complete
18% complete
24% complete
Oracle JVM
30% complete
36% complete
42% complete
44% complete
Oracle Text
46% complete
48% complete
Oracle OLAP
52% complete
Oracle Spatial
53% complete
60% complete
Oracle Label Security
68% complete
Oracle Database Vault
76% complete
Creating cluster database views
77% complete
84% complete
Completing Database Creation
86% complete
88% complete
Executing Post Configuration Actions
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/FREE10.log" for further details
Connect to the database as the SYS user:
[oracle@test1 ~]$ sqlplus /nolog
SQL*Plus: Release 23.0.0.0.0 - Production on Wed Sep 3 09:57:09 2025
Version 23.9.0.25.07
Copyright (c) 1982, 2025, Oracle. All rights reserved.
SQL>
SQL> conn / as sysdba
Connected.
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
Up to now, The database is up without pdbs, only the seed, thus we have configurated in our template.
We are going to make another test with the parameter numberOfPDBs. The functionality of the parameter is as follows: Number of PDBs to create. The default is zero. So If we look inside the response file that we have used, we can see that we had defined the variable with value zero.
[oracle@test1 ~]$ grep numberOfPDBs config/shadow.rsp
# Name : numberOfPDBs
numberOfPDBs=0
Hold on!,If we use the original template with the response file, Will it create a PDB or not? If we remenber, the original template had one PDB
Let’s check it!
Drop the current database:
[oracle@test1 ~]$ dbca -silent \ -deleteDatabase \ -sourceDB FREE \ -sysDBAUserName sys \ -sysDBAPassword ****** [WARNING] [DBT-11503] The instance (FREE) is not running on the local node. This may result in partial delete of Oracle database. CAUSE: A locally running instance is required for complete deletion of Oracle database instance and database files. ACTION: Specify a locally running database, or execute DBCA on a node where the database instance is running. [WARNING] [DBT-19202] The Database Configuration Assistant will delete the Oracle instances and datafiles for your database. All information in the database will be destroyed. Prepare for db operation 32% complete Connecting to database 35% complete 39% complete 42% complete 45% complete 48% complete 52% complete 65% complete Updating network configuration files 68% complete Deleting instance and datafiles 84% complete 100% complete Database deletion completed. Look at the log file "/opt/oracle/cfgtoollogs/dbca/FREE/FREE11.log" for further details.Create the database:
[oracle@test1 ~]$ dbca -createDatabase -silent -responseFile /home/oracle/config/shadow.rsp Enter PDBADMIN User Password: Prepare for db operation 4% complete Creating and starting Oracle instance 5% complete 6% complete 8% complete Creating database files 12% complete Creating data dictionary views 13% complete 16% complete 17% complete 18% complete 24% complete Oracle JVM 30% complete 36% complete 42% complete 44% complete Oracle Text 46% complete 48% complete Oracle OLAP 52% complete Oracle Spatial 53% complete 60% complete Oracle Label Security 68% complete Oracle Database Vault 76% complete Creating cluster database views 77% complete 84% complete Completing Database Creation 86% complete 88% complete Executing Post Configuration Actions 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/FREE13.log" for further details.
Connect to the database as the SYS user:
[oracle@test1 ~]$ sqlplus /nolog
SQL*Plus: Release 23.0.0.0.0 - Production on Wed Sep 3 12:02:06 2025
Version 23.9.0.25.07
Copyright (c) 1982, 2025, Oracle. All rights reserved.
SQL> conn / as sysdba
Connected.
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
SQL>! grep pdb_dbid /home/oracle/config/FREE.template.dbt
<PluggableDatabase pdb_name="PDB$SEED" con_id="2" pdb_dbid="3172087764"/>
<PluggableDatabase pdb_name="FREEPDB1" con_id="3" pdb_dbid="302716810"/>
We can see that we don’t have any PDBs, only the seed.
Although our template has the definition of PDB "FREEPDB1", the response file indicates to dbca that number of PDBs is zero (numberOfPDBs=0).
If you want, you can download the files that I used from here.
I hope you enjoyed reading this post :)
![[26ai] Cleanup of Obsolete PL/SQL Objects](/_next/image?url=https%3A%2F%2Fcdn.hashnode.com%2Fuploads%2Fcovers%2F65605419d28f19cc44df7ef1%2F64ada612-0048-411c-b9df-61b8825af6e7.png&w=3840&q=75)
![[26ai] Hybrid Read-Only Mode PDB](/_next/image?url=https%3A%2F%2Fcdn.hashnode.com%2Fuploads%2Fcovers%2F65605419d28f19cc44df7ef1%2F23e8f92e-f89b-4746-930e-98156e3a1ec4.png&w=3840&q=75)
![[26ai] ALERT_LOG_MAX_SIZE](/_next/image?url=https%3A%2F%2Fcdn.hashnode.com%2Fuploads%2Fcovers%2F65605419d28f19cc44df7ef1%2Fdad5c53e-425c-4e82-9bbb-e0ccec6e9a4e.jpg&w=3840&q=75)
![[26ai] ConnStr Tool](/_next/image?url=https%3A%2F%2Fcdn.hashnode.com%2Fuploads%2Fcovers%2F65605419d28f19cc44df7ef1%2F8316641c-ac22-45c3-a59d-4a8a7dfd9de5.png&w=3840&q=75)
![[26ai] Install Oracle AI Database 26ai on Linux 9](/_next/image?url=https%3A%2F%2Fcdn.hashnode.com%2Fuploads%2Fcovers%2F65605419d28f19cc44df7ef1%2F243000b4-ccef-4cab-97db-f9b47328159f.png&w=3840&q=75)