Instruction

Oracle Database 19c Software Installation on Oracle Linux 8 (Silent Method)

Assumptions

This instruction assumes:

  • Oracle Linux 8.x (x86_64) is installed with UEK6 (5.4.17-2011.0.7 or later) or RHCK (4.18.0-80 or later)
  • Grid Infrastructure 19c is already installed and running (Oracle Restart or RAC); the ASM instance is operational
  • The oracle user exists and belongs to the required OS groups: oinstall, dba, oper, backupdba, dgdba, kmdba, asmdba, racdba -- created during Grid Infrastructure installation
  • Kernel parameters (shmmax, shmall, file-max, sem, aio-max-nr, etc.) are already configured by the Grid Infrastructure preinstall RPM or manual GI prerequisites
  • Resource limits for the oracle user (nofile, nproc, stack, memlock) are already configured
  • SELinux is set to permissive
  • Root access or sudo privileges are available
  • The LINUX.X64_193000_db_home.zip file (~3 GB) has been downloaded from oracle.com and transferred to the server
  • No internet access is required during installation -- all software is installed from local media
  • At least 10 GB of free disk space is available for the database Oracle home
  • This instruction installs the database software only -- no database is created (DBCA is out of scope)

Prerequisites

Automatic setup

The oracle-database-preinstall-19c RPM configures the OS for Oracle Database 19c installation. In this scenario, the RPM was already installed during Grid Infrastructure setup. If it was not installed, run the following as root:

dnf install -y oracle-database-preinstall-19c

This package creates:

  • The oracle user and groups: oinstall (54321), dba (54322), oper (54323), backupdba (54324), dgdba (54325), kmdba (54326), racdba (54330)
  • Kernel parameters in /etc/sysctl.d/ including fs.file-max=6815744, kernel.sem=250 32000 100 128, kernel.shmmax=4398046511104, kernel.shmall=1073741824, kernel.shmmni=4096, fs.aio-max-nr=1048576, net.ipv4.ip_local_port_range=9000 65500, net.core.rmem_default=262144, net.core.rmem_max=4194304, net.core.wmem_default=262144, net.core.wmem_max=1048576
  • Resource limits in /etc/security/limits.d/: nofile (1024/65536), nproc (16384/16384), stack (10240/32768), memlock (134217728/134217728)
  • Required OS packages: bc, binutils, elfutils-libelf, fontconfig, gcc, gcc-c++, glibc, glibc-devel, ksh, libaio, libaio-devel, libgcc, libnsl, libstdc++, libstdc++-devel, libxcb, libX11, libXau, libXi, libXrender, libXtst, make, net-tools, policycoreutils, smartmontools, sysstat, compat-openssl10

The preinstall RPM creates all seven standard Oracle groups. When Grid Infrastructure is installed first, additional ASM-related groups (asmdba at 54327, asmoper at 54328, asmadmin at 54329) are also created during GI installation.

Manual setup

For environments where the preinstall RPM was not installed and Grid Infrastructure prerequisites were configured manually, verify the following items exist. These were set up during Grid Infrastructure installation -- no reconfiguration is needed if GI is running.

  1. Verify OS groups
grep -E "oinstall|dba|oper|backupdba|dgdba|kmdba|asmdba|racdba" /etc/group

Expected output:

oinstall:x:54321:oracle
dba:x:54322:oracle
oper:x:54323:oracle
backupdba:x:54324:oracle
dgdba:x:54325:oracle
kmdba:x:54326:oracle
racdba:x:54330:oracle
  1. Verify the oracle user and group membership
id oracle

Expected output:

uid=54321(oracle) gid=54321(oinstall) groups=54321(oinstall),54322(dba),54323(oper),54324(backupdba),54325(dgdba),54326(kmdba),54327(asmdba),54330(racdba)
  1. Verify kernel parameters
sysctl fs.file-max kernel.sem kernel.shmmax kernel.shmall fs.aio-max-nr net.ipv4.ip_local_port_range

Expected output:

fs.file-max = 6815744
kernel.sem = 250	32000	100	128
kernel.shmmax = 4398046511104
kernel.shmall = 1073741824
fs.aio-max-nr = 1048576
net.ipv4.ip_local_port_range = 9000	65500
  1. Verify resource limits
su - oracle -c "ulimit -Sn; ulimit -Hn; ulimit -Su; ulimit -Hu; ulimit -Ss; ulimit -Hs"

Expected output:

1024
65536
16384
16384
10240
32768
  1. Verify SELinux
getenforce

Expected output:

Permissive
  1. Verify Oracle Inventory
cat /etc/oraInst.loc

Expected output:

inventory_loc=/u01/app/oraInventory
inst_group=oinstall
  1. Verify ASM instance is running
ps -ef | grep asm_pmon | grep -v grep

Expected output:

oracle   12345     1  0 Apr25 ?  00:00:01 asm_pmon_+ASM

Additional setup

These steps are required regardless of whether the automatic or manual setup was used above. Perform steps 1-2 as root and steps 3-5 as the oracle user.

  1. Create the database Oracle home directory

As root:

mkdir -p /u01/app/oracle/product/19.0.0/dbhome_1
chown oracle:oinstall /u01/app/oracle/product/19.0.0/dbhome_1
chmod 775 /u01/app/oracle/product/19.0.0/dbhome_1

This directory is separate from the Grid Infrastructure home. The database Oracle home must not be inside or overlap with the Grid home.

  1. Verify required packages

As root, confirm key packages are installed:

rpm -q binutils gcc gcc-c++ glibc glibc-devel ksh libaio libaio-devel \
  libnsl libstdc++ libstdc++-devel libxcb libX11 make sysstat compat-openssl10 unzip

Expected output:

Each package name followed by a version number. If any package reports package <name> is not installed, install it:

dnf install -y {PACKAGE_NAME}

{PACKAGE_NAME} -- the name of the missing package from the list above.

  1. Create the environment script

As the oracle user:

su - oracle
mkdir -p /home/oracle/scripts
cat > /home/oracle/scripts/setEnv.sh <<'EOF'
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19.0.0/dbhome_1
export ORA_INVENTORY=/u01/app/oraInventory
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
EOF

This script sets environment variables for the database home. Do not set ORACLE_SID here -- no database exists yet.

  1. Source the environment script from .bash_profile

As the oracle user:

Warning: If the oracle user's .bash_profile already sets ORACLE_HOME (e.g., to the Grid Infrastructure home), appending this line will override it. After this change, the oracle user's default environment points to the database home, not the Grid home. To switch between homes, use oraenv or source a different environment script.

echo '. /home/oracle/scripts/setEnv.sh' >> /home/oracle/.bash_profile
source /home/oracle/.bash_profile

Verify:

echo $ORACLE_HOME

Expected output:

/u01/app/oracle/product/19.0.0/dbhome_1
  1. Extract the software into Oracle home

As the oracle user. If you opened a new session since step 4, source the environment first:

source /home/oracle/scripts/setEnv.sh

Extract the ZIP file directly into ORACLE_HOME. Starting with Oracle 18c, the software is extracted into the Oracle home directory itself -- not a staging area.

cd $ORACLE_HOME
unzip -oq {ZIP_FILE_PATH}

{ZIP_FILE_PATH} -- the full path to the downloaded LINUX.X64_193000_db_home.zip file (e.g., /tmp/LINUX.X64_193000_db_home.zip).

Verify:

ls $ORACLE_HOME/runInstaller

Expected output:

/u01/app/oracle/product/19.0.0/dbhome_1/runInstaller

Installation

Step 1: Set the CV_ASSUME_DISTID environment variable

As the oracle user. Steps 1 and 2 must be performed in the same terminal session -- CV_ASSUME_DISTID is a session variable and is lost if the session ends.

export CV_ASSUME_DISTID=OEL7.6

Oracle Database 19c base release (19.3.0) predates Oracle Linux 8 certification. The installer does not recognize OL8 as a supported platform. This environment variable instructs the installer to treat the OS as Oracle Enterprise Linux 7.6 for prerequisite checking. Without this, the installer fails with [INS-08101] Unexpected error while executing the action at state: 'supportedOSCheck'.

Verify:

echo $CV_ASSUME_DISTID

Expected output:

OEL7.6

Step 2: Run the silent installer

As the oracle user, run the software-only installation:

$ORACLE_HOME/runInstaller -ignorePrereq -waitforcompletion -silent \
  -responseFile ${ORACLE_HOME}/install/response/db_install.rsp \
  oracle.install.option=INSTALL_DB_SWONLY \
  ORACLE_HOSTNAME=${HOSTNAME} \
  UNIX_GROUP_NAME=oinstall \
  INVENTORY_LOCATION=${ORA_INVENTORY} \
  SELECTED_LANGUAGES=en,en_GB \
  ORACLE_HOME=${ORACLE_HOME} \
  ORACLE_BASE=${ORACLE_BASE} \
  oracle.install.db.InstallEdition=EE \
  oracle.install.db.OSDBA_GROUP=dba \
  oracle.install.db.OSOPER_GROUP=oper \
  oracle.install.db.OSBACKUPDBA_GROUP=backupdba \
  oracle.install.db.OSDGDBA_GROUP=dgdba \
  oracle.install.db.OSKMDBA_GROUP=kmdba \
  oracle.install.db.OSRACDBA_GROUP=racdba \
  SECURITY_UPDATES_VIA_MYORACLESUPPORT=false \
  DECLINE_SECURITY_UPDATES=true

Parameter summary:

Parameter Value Purpose
oracle.install.option INSTALL_DB_SWONLY Software-only installation (no database creation)
oracle.install.db.InstallEdition EE Enterprise Edition
UNIX_GROUP_NAME oinstall Oracle Inventory group
oracle.install.db.OSDBA_GROUP dba SYSDBA privilege group
oracle.install.db.OSOPER_GROUP oper SYSOPER privilege group
oracle.install.db.OSBACKUPDBA_GROUP backupdba SYSBACKUP privilege group
oracle.install.db.OSDGDBA_GROUP dgdba SYSDG privilege group
oracle.install.db.OSKMDBA_GROUP kmdba SYSKM privilege group
oracle.install.db.OSRACDBA_GROUP racdba SYSRAC privilege group
DECLINE_SECURITY_UPDATES true Suppress Oracle Configuration Manager registration

The installer runs prerequisite checks and installs the software. This takes 5-15 minutes depending on hardware.

Expected output:

Launching Oracle Database Setup Wizard...

The response file for this session can be found at:
 /u01/app/oracle/product/19.0.0/dbhome_1/install/response/db_2019-04-25_10-00-00AM.rsp

You can find the log of this install session at:
 /u01/app/oraInventory/logs/installActions2019-04-25_10-00-00AM.log

Successfully Setup Software.
Moved the install session logs to:
 /u01/app/oraInventory/logs/InstallActions2019-04-25_10-00-00AM

As a root user, execute the following script(s):
	1. /u01/app/oracle/product/19.0.0/dbhome_1/root.sh

If the installer also lists /u01/app/oraInventory/orainstRoot.sh, that script was already executed during Grid Infrastructure installation. See Step 3 for handling this.

Step 3: Execute root scripts

As root:

If the installer output lists orainstRoot.sh, run it first. This script sets permissions on the oraInventory directory. When Grid Infrastructure was installed first, orainstRoot.sh was already executed and running it again is harmless -- it updates permissions without error.

/u01/app/oraInventory/orainstRoot.sh

Expected output:

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.

Run the database home root.sh. This script requires interactive input (it prompts for the local bin directory) and cannot be run in non-interactive/silent mode:

/u01/app/oracle/product/19.0.0/dbhome_1/root.sh

Expected output:

Performing root user operation.

The following environment variables are set as:
    ORACLE_OWNER= oracle
    ORACLE_HOME=  /u01/app/oracle/product/19.0.0/dbhome_1

Enter the full pathname of the local bin directory: [/usr/local/bin]:

Press Enter to accept the default /usr/local/bin.

   Copying dbhome to /usr/local/bin ...
   Copying oraenv to /usr/local/bin ...
   Copying coraenv to /usr/local/bin ...

Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root script.
Now product-specific root actions will be performed.

If Grid Infrastructure is managing the CRS stack, root.sh detects this and completes without additional configuration prompts.

Validation

Quick check

As the oracle user:

$ORACLE_HOME/OPatch/opatch lsinventory | grep "Oracle Database"

Expected output:

Oracle Database 19c                                                  19.0.0.0.0

Full validation

  1. Verify Oracle home registration in inventory
$ORACLE_HOME/OPatch/opatch lsinventory

Expected output (partial):

Oracle Home       : /u01/app/oracle/product/19.0.0/dbhome_1
Central Inventory : /u01/app/oraInventory
   from           : /u01/app/oracle/product/19.0.0/dbhome_1/oraInst.loc
OPatch version    : 12.2.0.1.17
OUI version       : 12.2.0.7.0
Log file location : /u01/app/oracle/product/19.0.0/dbhome_1/cfgtoollogs/opatch/opatch2019-04-25_10-30-00AM_1.log

OPatch detects the Homes registered in the oracle inventory.

Interim patches (0) :

There are no interim patches installed in this Oracle Home.
...
Oracle Database 19c                                                  19.0.0.0.0
There are 1 products installed in this Oracle Home.
...
  1. Verify Oracle binary permissions
ls -la $ORACLE_HOME/bin/oracle

Expected output:

-rwsr-s--x 1 oracle oinstall 448044432 Apr 25 10:15 /u01/app/oracle/product/19.0.0/dbhome_1/bin/oracle

The s in the permission bits indicates setuid and setgid are set (permission mode 6751).

  1. Verify sqlplus version
$ORACLE_HOME/bin/sqlplus -V

Expected output:

SQL*Plus: Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
  1. Verify environment variables
echo "ORACLE_HOME=$ORACLE_HOME"
echo "ORACLE_BASE=$ORACLE_BASE"

Expected output:

ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
ORACLE_BASE=/u01/app/oracle

Confirm the database home is distinct from the Grid home:

cat /etc/oraInst.loc

Expected output:

inventory_loc=/u01/app/oraInventory
inst_group=oinstall
  1. Verify all registered Oracle homes
$ORACLE_HOME/OPatch/opatch lsinventory -all

Expected output (partial):

...
Home name= OraDB19Home1, Location= /u01/app/oracle/product/19.0.0/dbhome_1
Home name= OraGI19Home1, Location= /u01/app/19.0.0/grid
...

Both the database home and the Grid Infrastructure home appear in the inventory.

Troubleshooting

Problem Cause Solution
[INS-08101] Unexpected error while executing the action at state: 'supportedOSCheck' CV_ASSUME_DISTID is not set; installer does not recognize OL8 with base 19.3.0 media Run export CV_ASSUME_DISTID=OEL7.6 and re-run the installer
[INS-30131] Initial setup required for the execution of installer validations ORACLE_HOME directory is not owned by the oracle user Run chown oracle:oinstall /u01/app/oracle/product/19.0.0/dbhome_1 as root
[FATAL] [INS-13013] Target environment does not meet some mandatory requirements Missing prerequisite packages Install missing packages with dnf install -y {PACKAGE}, or add -ignorePrereq to the runInstaller command
libnsl.so.1: cannot open shared object file The libnsl package is not installed (required on OL8 where libnsl was removed from glibc) Run dnf install -y libnsl as root
compat-openssl10 not installed Required for Oracle 19c on OL8 but not installed by default Run dnf install -y compat-openssl10 as root
Installer hangs or waits for input A DISPLAY environment variable is set, causing the installer to attempt GUI mode Unset it: unset DISPLAY and re-run the installer
Permission denied running runInstaller The oracle user does not have execute permission on the Oracle home Run chmod 775 /u01/app/oracle/product/19.0.0/dbhome_1 as root
root.sh reports files already exist in /usr/local/bin Grid Infrastructure root.sh previously copied dbhome, oraenv, coraenv to /usr/local/bin The database root.sh overwrites them. This is expected and harmless.
orainstRoot.sh: Permission denied The script is not executable or you are not running as root Run as root: chmod 755 /u01/app/oraInventory/orainstRoot.sh && /u01/app/oraInventory/orainstRoot.sh
Installer warns about insufficient swap space System has less than 150 MB swap free Add swap space or free existing swap before re-running

References