|
Oracle 19c Standard Edition 2 Silent Installation on Red Hat
Enterprise Linux 8.10 A complete, production-ready step-by-step guide |
|
Oracle Version 19c SE2
(19.3.0.0.0) |
OS Platform RHEL 8.10
(x86_64) |
Install Mode Silent
(Unattended) |
Introduction
This guide walks you through a complete, production-ready
silent installation of Oracle Database 19c Standard Edition 2 (SE2) on Red Hat
Enterprise Linux (RHEL) 8.10. The installation covers everything from OS-level
prerequisites and package setup to database creation using DBCA, listener
configuration, and instance startup.
Oracle 19c is a Long Term Release (LTS) with extended support,
making it the preferred choice for many enterprise deployments. This guide uses
a silent (non-GUI) installation approach, ideal for server environments and
automation pipelines.
|
Note: All
commands in this guide are executed on an AWS EC2 instance running RHEL 8.10.
The same steps apply to any bare-metal or virtual machine with a similar
configuration. |
Prerequisites & Environment
|
Component |
Details |
|
Operating
System |
Red Hat Enterprise Linux 8.10 (Ootpa) — x86_64 |
|
Oracle
Version |
Oracle Database 19c SE2, Release 19.3.0.0.0 |
|
Install
Media |
LINUX.X64_193000_db_home.zip (~2.9 GB) |
|
Oracle
Base |
/u01/app/oracle |
|
Oracle
Home |
/u01/app/oracle/product/19.0.0/dbhome_1 |
|
Data Files |
/u01/app/oracle/oradata |
|
Oracle
User |
oracle (uid: 54321, group: oinstall) |
|
Database
SID |
DATABLOGORCL (CDB with 1 PDB) |
|
Character
Set |
AL32UTF8 |
|
SGA Memory |
18 GB (totalMemory flag in DBCA) |
Step 1: Update the Operating System
|
1 |
OS Package Update Bring all
system packages to their latest versions before starting the Oracle
installation. |
Log in as root and run a full system update using dnf:
# Verify OS version
[root@server ~]# cat /etc/os-release
NAME="Red Hat Enterprise Linux"
VERSION="8.10 (Ootpa)"
# Run full system update
[root@server
~]# dnf update -y
The update installs a new kernel (4.18.0-553.111.1.el8_10),
along with critical packages including openssh, glibc, systemd, openssl, and
grub2. Key packages upgraded include:
•
kernel 4.18.0-553.111.1.el8_10
— New kernel with security and bug fixes
•
glibc 2.28-251.el8_10.31 —
GNU C Library
•
openssh 8.0p1-27.el8_10 —
SSH server and clients
•
openssl 1.1.1k-15.el8_6 —
TLS/SSL libraries
• systemd 239-82.el8_10.15 — System and service manager
Step 2: Install Oracle Preinstall RPM
|
2 |
Oracle Preinstall Package Automatically
configures OS kernel parameters, security limits, and installs all required
dependency packages. |
Download the Oracle 19c preinstall RPM from Oracle's public
repository and install it locally. Although this RPM is built for OL9, it works
effectively on RHEL 8 to configure the necessary system parameters:
# Download preinstall RPM from Oracle YUM
[root@server ~]# curl -o
oracle-database-preinstall-19c-1.0-1.el9.x86_64.rpm \
https://yum.oracle.com/repo/OracleLinux/OL9/appstream/x86_64/getPackage/oracle-database-preinstall-19c-1.0-1.el9.x86_64.rpm
# Install it locally
[root@server
~]# dnf -y localinstall oracle-database-preinstall-19c-1.0-1.el9.x86_64.rpm
This RPM automatically installs a large set of dependencies
needed for Oracle including:
•
bc, binutils, gcc, gcc-c++
— Build tools and compilers
•
libaio, libaio-devel, libstdc++-devel — Async I/O and C++ libraries
•
libX11, libXi, libXtst, libXrender — X11 display libraries
•
ksh, make, nfs-utils, rpcbind
— Shell, build tools, and network services
•
sysstat, smartmontools, xorg-x11-utils — System monitoring tools
•
libvirt-libs, libibverbs, librdmacm — Virtualization and RDMA libraries
|
Tip: The
preinstall RPM also sets /etc/sysctl.conf kernel parameters (shmall, shmmax,
semaphores) and /etc/security/limits.conf entries for the oracle user —
saving considerable manual effort. |
Step 3: Create Oracle User and Groups
|
3 |
OS User & Group Setup Create the
required OS groups and oracle user account for database administration. |
Create the required groups and the oracle OS user. The
preinstall RPM may have already created these the commands below handle that
gracefully:
# Create groups (idempotent — safe if already exist)
[root@server ~]# sudo groupadd -g 54321 oinstall
[root@server ~]# sudo groupadd -g 54322 dba
# Create the oracle user
[root@server ~]# sudo useradd -u 54321 -g oinstall -G dba oracle
# Set the oracle user password
[root@server
~]# sudo passwd oracle
If you see messages like 'group already exists' or 'user already exists', that is expected — the preinstall RPM created them. The password setup step is still required.
Step 4: Create Directory Structure
|
4 |
Directory Layout Create the
Oracle Base, Oracle Home, and data directories with correct ownership. |
Oracle requires specific directory paths to be created and
owned by the oracle user before installation begins:
# Create Oracle software directories
[root@server ~]# sudo mkdir -p
/u01/app/oracle/product/19.0.0/dbhome_1
# Create data file directory
[root@server ~]# sudo mkdir -p /u02/oradata
# Set ownership to oracle:oinstall
[root@server ~]# sudo chown -R oracle:oinstall /u01 /u02
# Set group-writable permissions
[root@server
~]# sudo chmod -R 775 /u01 /u02
|
Path |
Purpose |
|
/u01/app/oracle |
ORACLE_BASE — all Oracle software and configuration |
|
/u01/app/oracle/product/19.0.0/dbhome_1 |
ORACLE_HOME — 19c software binaries (unzip target) |
|
/u01/app/oraInventory |
Central Oracle inventory (auto-created during install) |
|
/u01/app/oracle/oradata |
Data files, redo logs, and control files |
|
/u02/oradata |
Secondary data directory (optional, for separation) |
Step 5: Extract Oracle Software
|
5 |
Unzip the Installation
Media Extract the
Oracle 19c zip file directly into the Oracle Home directory. |
Copy the Oracle 19c zip file (LINUX.X64_193000_db_home.zip,
~2.9 GB) into the ORACLE_HOME directory, then extract it there. The zip must be
extracted into dbhome_1, not into a subdirectory:
# Switch to oracle user
[root@server ~]# su - oracle
# Navigate to Oracle Home
[oracle@server ~]$ cd /u01/app/oracle/product/19.0.0/dbhome_1
# Extract the zip (the file should already be placed here)
[oracle@server dbhome_1]$ unzip LINUX.X64_193000_db_home.zip
# Fix permissions after extraction
[oracle@server dbhome_1]$ exit
[root@server ~]# chown -R oracle:oinstall /u01 /u02
[root@server
~]# chmod -R 775 /u01 /u02
After extraction, the dbhome_1 directory should contain folders like bin, rdbms, sqlplus, install, network, jdk, lib, and others. The zip file itself (2.9 GB) can remain or be deleted to free space.
Step 6: Configure the Response File
|
6 |
Response File Setup Edit
db_install.rsp to define all installation parameters for silent mode. |
The response file drives the entire silent installation. Edit
the file located at:
$ORACLE_HOME/install/response/db_install.rsp
Below are the key parameters to configure. All other lines in
the response file can remain at their defaults:
# Installation type — software only (database created separately
with DBCA)
oracle.install.option=INSTALL_DB_SWONLY
# OS group for inventory
UNIX_GROUP_NAME=oinstall
# Inventory location
INVENTORY_LOCATION=/u01/app/oraInventory
# Oracle Home and Base
ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
ORACLE_BASE=/u01/app/oracle
# Edition — Standard Edition 2
oracle.install.db.InstallEdition=SE2
# OS groups (all mapped to oinstall for simplicity)
oracle.install.db.OSDBA_GROUP=oinstall
oracle.install.db.OSOPER_GROUP=oinstall
oracle.install.db.OSBACKUPDBA_GROUP=oinstall
oracle.install.db.OSDGDBA_GROUP=oinstall
oracle.install.db.OSKMDBA_GROUP=oinstall
oracle.install.db.OSRACDBA_GROUP=oinstall
# Do not auto-run root scripts (we will run them manually)
oracle.install.db.rootconfig.executeRootScript=false
|
Important:
oracle.install.option=INSTALL_DB_SWONLY installs only the Oracle software
binaries. The database instance is created separately in a later step using
DBCA, giving you more control. |
Step 7: Run the Silent Installer
|
7 |
Execute runInstaller Launch the
Oracle installer in silent mode as the oracle user. |
Before running the installer, set the CV_ASSUME_DISTID
environment variable to bypass the OS compatibility check (since Oracle 19c
officially targets OEL/RHEL but we are using the el9 preinstall RPM):
# As root — set the env variable for the session
[root@server dbhome_1]# export CV_ASSUME_DISTID=RHEL8
# Switch to oracle user
[root@server dbhome_1]# su oracle
# Run the silent installer
[oracle@server dbhome_1]$ ./runInstaller -silent -responseFile /u01/app/oracle/product/19.0.0/dbhome_1/install/response/db_install.rsp
Expected output upon successful completion:
[WARNING] [INS-32047] The location (/u01/app/oraInventory)
specified for the
central inventory is not empty.
ACTION: It is
recommended to provide an empty location for the inventory.
[WARNING] [INS-13014] Target environment does not meet some
optional requirements.
(Optional prereqs only
— not fatal)
Successfully Setup Software with warning(s).
As a root user, execute the following script(s):
1.
/u01/app/oraInventory/orainstRoot.sh
2.
/u01/app/oracle/product/19.0.0/dbhome_1/root.sh
|
The
[INS-32047] and [INS-13014] warnings are non-critical and can be safely
ignored. The installation completes successfully despite these messages. |
Step 8: Run Root Scripts
|
8 |
Execute Root Configuration
Scripts Run the two
root scripts that finalize the Oracle installation at the OS level. |
After the installer completes, open a new terminal (or exit to
root) and run the two root scripts as instructed:
# Exit oracle user back to root
[oracle@server dbhome_1]$ exit
# Script 1: Configure Oracle Inventory permissions
[root@server dbhome_1]# /u01/app/oraInventory/orainstRoot.sh
Changing permissions of /u01/app/oraInventory.
Adding read,write permissions for group.
Removing read,write,execute permissions for world.
Changing groupname of /u01/app/oraInventory to oinstall.
The execution of the script is complete.
# Script 2: Configure Oracle Home at OS level
[root@server dbhome_1]#
/u01/app/oracle/product/19.0.0/dbhome_1/root.sh
Check
.../root_<hostname>_<timestamp>.log for the output of root script
These scripts configure the Oracle inventory directory permissions, update /etc/oratab, and set up the required OS-level integrations. They must be run as root.
Step 9: Configure Oracle Environment
Variables
|
9 |
Set .bash_profile Configure the
oracle user's shell environment with ORACLE_HOME, ORACLE_BASE, and PATH. |
Switch to the oracle user and edit the .bash_profile to set
the Oracle environment variables. These are required every time you work with
the database:
[root@server ~]# su oracle
[oracle@server
~]$ vi ~/.bash_profile
Add the following lines at the end of the file:
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# Oracle Environment Variables
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
export ORACLE_SID=DATABLOGORCL
export PATH=$PATH:$ORACLE_HOME/bin
#
User specific environment and startup programs
Save the file and source it to apply immediately:
[oracle@server
~]$ source ~/.bash_profile
|
Note: Set
ORACLE_SID to match the database SID you will create. Initially you can set
it to 'orcl' and update it once the database is created. |
Step 10: Create the Database with DBCA
|
10 |
Database Creation Use DBCA in
silent mode to create a Container Database (CDB) with one Pluggable Database
(PDB). |
Run the DBCA command as the oracle user to create the
database. This creates a CDB named DATABLOGORCL with one PDB also named
DATABLOGORCL:
[oracle@server ~]$ dbca -silent \
-createDatabase \
-templateName
General_Purpose.dbc \
-gdbName DATABLOGORCL \
-sid DATABLOGORCL \
-createAsContainerDatabase true \
-numberOfPdbs 1 \
-pdbName DATABLOGORCL \
-pdbAdminPassword
"<YourPDBPassword>" \
-sysPassword
"<YourSYSPassword>" \
-systemPassword
"<YourSYSTEMPassword>" \
-datafileDestination
/u01/app/oracle/oradata \
-storageType FS \
-characterSet AL32UTF8 \
-totalMemory 18000 \
-emConfiguration NONE
The DBCA process goes through several phases:
•
Prepare for db operation — validates parameters and
prerequisites
•
Copying database files (8–31%) — creates data files
from the template
•
Creating and starting Oracle instance (32–46%) —
initializes SGA and starts processes
•
Completing Database Creation (51–54%) — applies catalog
and catproc
•
Creating Pluggable Databases (58–77%) — creates
PDB$SEED and the named PDB
•
Executing Post Configuration Actions (100%) — final
configuration steps
Successful completion message:
Database creation complete. For details check the logfiles at:
/u01/app/oracle/cfgtoollogs/dbca/DATABLOGORCL.
Database Information:
Global Database Name: DATABLOGORCL
System
Identifier(SID): DATABLOGORCL
|
Use strong
passwords that meet Oracle standards: at least 8 characters, with uppercase,
lowercase, and a digit. Passwords that do not conform generate warnings but
the database is still created. |
Step 11: Start the Listener
|
11 |
Oracle Listener Start the TNS
listener to enable remote client connections to the database. |
Start the Oracle listener and verify its status:
# Start the listener
[oracle@server ~]$ lsnrctl start
TNSLSNR for Linux: Version 19.0.0.0.0 - Production
System parameter file is $ORACLE_HOME/network/admin/listener.ora
Listening on:
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.234.43.237)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias
LISTENER
Version
TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Start Date
18-MAR-2026 08:25:05
Security
ON: Local OS Authentication
The
command completed successfully
After a few minutes, verify that the database registers with
the listener:
[oracle@server ~]$ lsnrctl status
Services Summary...
Service "4d4929d61f5d6ac0e063ed2bea0a5a6e" has 1
instance(s).
Instance
"DATABLOGORCL", status READY, has 1 handler(s) for this service...
Service "DATABLOGORCL" has 1 instance(s).
Instance
"DATABLOGORCL", status READY, has 1 handler(s) for this service...
Service "DATABLOGORCLXDB" has 1 instance(s).
Instance
"DATABLOGORCL", status READY, has 1 handler(s) for this service...
The
command completed successfully
When you see 'status READY' for the DATABLOGORCL service, the listener is correctly registered and the database is accepting connections.
Step 12: Verify the Installation
|
12 |
Validation Connect with
SQL*Plus and verify the CDB and PDB status. |
Connect to the database using SQL*Plus and validate the
installation:
# Connect as SYSDBA
[oracle@server ~]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Wed Mar 18 08:29:16
2026
Version 19.3.0.0.0
Connected to:
Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 -
Production
Version 19.3.0.0.0
# Check PDB status
SQL> show pdbs;
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3
DATABLOGORCL READ WRITE NO
SQL>
exit
The output confirms a successful installation: Oracle 19c SE2 is running, the CDB is open, PDB$SEED is in READ ONLY mode (normal), and the DATABLOGORCL PDB is in READ WRITE mode (open and usable).
Step 13: Manual Instance Startup (If
Required)
|
13 |
Instance Startup Start a
previously stopped database instance using SQL*Plus startup command. |
If the instance is not running (e.g., after a reboot or manual
shutdown), start it using:
[oracle@server ~]$ sqlplus / as sysdba
Connected to an idle instance.
SQL> startup;
ORACLE instance started.
Total System Global Area 1.4160E+10 bytes
Fixed Size
9151056 bytes
Variable Size
1912602624 bytes
Database Buffers
1.2214E+10 bytes
Redo Buffers
24399872 bytes
Database mounted.
Database opened.
SQL>
exit
The SGA is approximately 14 GB (1.4160E+10 bytes), consistent with the -totalMemory 18000 flag passed to DBCA. Oracle automatically allocates memory between SGA and PGA.
Troubleshooting Common Issues
INS-32013: Oracle base location is empty
This error occurs when running runInstaller as root or when
ORACLE_BASE is not set in the response file.
•
Ensure you are running runInstaller as the oracle user,
not root
• Verify ORACLE_BASE=/u01/app/oracle is correctly set in db_install.rsp
Listener shows 'no services' after start
The database registers with the listener automatically after
startup, but may take 1-2 minutes. Also verify ORACLE_SID in .bash_profile
matches the database SID.
# Check if the instance is running
SQL> select instance_name, status from v$instance;
# Manually register with listener
SQL> alter system register;
CV_ASSUME_DISTID required
If you get OS compatibility errors during the prerequisite
check, export this variable before running the installer:
export CV_ASSUME_DISTID=RHEL8
Database does not auto-start after reboot
Set the restart flag in /etc/oratab and configure the dbstart
service:
# Edit /etc/oratab
DATABLOGORCL:/u01/app/oracle/product/19.0.0/dbhome_1:Y # Change N to Y
Summary
This guide walked through a complete silent installation of
Oracle 19c SE2 on RHEL 8.10. Here is a quick recap of the steps performed:
1.
Updated the OS with dnf update -y
2.
Installed the oracle-database-preinstall-19c RPM to
configure system parameters and dependencies
3.
Created OS groups (oinstall, dba) and the oracle user
4.
Created the directory structure (/u01, /u02) with
correct ownership
5.
Extracted LINUX.X64_193000_db_home.zip into ORACLE_HOME
6.
Configured db_install.rsp with INSTALL_DB_SWONLY, SE2
edition, and all paths
7.
Ran runInstaller -silent as the oracle user
8.
Executed orainstRoot.sh and root.sh as root
9.
Set environment variables in oracle user's
.bash_profile
10. Created
the CDB + PDB using dbca -silent
11. Started
the listener with lsnrctl start
12. Verified
the installation via SQL*Plus and show pdbs
|
The
database is now ready for use. For production environments, consider
configuring automatic startup on boot, setting up ARCHIVELOG mode,
implementing RMAN backups, and enabling Oracle Enterprise Manager for
monitoring. |
datablog.com |
Oracle DBA Series
Oracle 19c SE2 on RHEL 8.10 — Silent Installation Guide
0 Comments