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
oracleuser 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
oracleuser (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.zipfile (~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
oracleuser and groups:oinstall(54321),dba(54322),oper(54323),backupdba(54324),dgdba(54325),kmdba(54326),racdba(54330) - Kernel parameters in
/etc/sysctl.d/includingfs.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.
- 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
- 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)
- 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
- 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
- Verify SELinux
getenforce
Expected output:
Permissive
- Verify Oracle Inventory
cat /etc/oraInst.loc
Expected output:
inventory_loc=/u01/app/oraInventory
inst_group=oinstall
- 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.
- 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.
- 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.
- 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.
- Source the environment script from .bash_profile
As the oracle user:
Warning: If the oracle user's
.bash_profilealready setsORACLE_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, useoraenvor 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
- 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
- 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.
...
- 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).
- 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
- 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
- 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
- Oracle Database 19c Installation Guide for Linux
- Supported Oracle Linux 8 Distributions for x86-64
- About the Oracle Database Preinstallation RPM
- Running Oracle Universal Installer Using a Response File
- Oracle Database 19c Installation on Oracle Linux 8 (ORACLE-BASE)
- OUI Silent Installations (ORACLE-BASE)