Installing Oracle Database 12.2.0.1 RAC on RHEL 7.6

Operating System: RHEL 7.6
Database Software: LINUX.X64_122010_grid_home.zip, LINUX.X64_122010_db_home.zip

Oracle Standalone Cluster Requirements

Redundancy Level DATA Disk Group MGMT Disk Group Total Storage
External 2 GB 42 GB 45 GB
Normal 3 GB 82 GB 60 GB
High 4 GB 124 GB 90 GB

a. The DATA disk group stores OCR and voting files, and the MGMT disk group stores GIMR and Oracle Clusterware backup files.
b. Starting with Oracle Grid Infrastructure 19c, configuring GIMR is optional for Oracle Standalone Cluster deployments.

Configuring Operating Systems for Oracle Grid Infrastructure on Linux

・ Configuring Yum Repositories

Packages Requirements.

rpm -q --qf '%{NAME}-%{VERSION}-%{RELEASE}  (%{ARCH})\n' \
bc binutils compat-libstdc++-33 compat-libstdc++-33.i686 gcc gcc-c++ \
glibc glibc.i686 glibc-devel glibc-devel.i686 ksh libgcc libgcc.i686 \
libstdc++ libstdc++.i686 libstdc++-devel libstdc++-devel.i686 libaio \
libaio.i686 libaio-devel libaio-devel.i686 libXext libXext.i686 libXtst \
libXtst.i686 libX11 libX11.i686 libXau libXau.i686 libxcb libxcb.i686 libXi \
libXi.i686 make sysstat unixODBC unixODBC-devel zlib-devel zlib-devel.i686 \
compat-libcap1 nfs-utils net-tools libXrender smartmontools unzip \
xorg-x11-xauth xorg-x11-utils wget psmisc \
| grep 'not installed'

Installing Operating System Packages.

yum -y install \
bc binutils compat-libstdc++-33 compat-libstdc++-33.i686 gcc gcc-c++ \
glibc glibc.i686 glibc-devel glibc-devel.i686 ksh libgcc libgcc.i686 \
libstdc++ libstdc++.i686 libstdc++-devel libstdc++-devel.i686 libaio \
libaio.i686 libaio-devel libaio-devel.i686 libXext libXext.i686 libXtst \
libXtst.i686 libX11 libX11.i686 libXau libXau.i686 libxcb libxcb.i686 libXi \
libXi.i686 make sysstat unixODBC unixODBC-devel zlib-devel zlib-devel.i686 \
compat-libcap1 nfs-utils net-tools libXrender smartmontools unzip \
xorg-x11-xauth xorg-x11-utils wget psmisc

wget -P /soft https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm
wget -P /soft https://yum.oracle.com/repo/OracleLinux/OL7/latest/archive/x86_64/getPackage/compat-libstdc++-33-3.2.3-72.el7.i686.rpm
yum -y localinstall /soft/compat-libstdc++-33*.rpm

Disabling Firewall and SElinux.

systemctl disable firewalld --now
sed -i '/SELINUX=/{s/enforcing/disabled/}' /etc/selinux/config

Disabling Zero Configuration Network.

cp -p /etc/sysconfig/network{,.bak.`date +%Y%m%d`}
echo "NOZEROCONF=yes" >>/etc/sysconfig/network

Disabling Transparent Huagepages.

・ How to disable transparent hugepages (THP) on Red Hat Enterprise Linux 7, 8 and 9

Configuring Public, Private, Virtual and SCAN IP names and Addresses.

cat >>/etc/hosts <<EOF
# Oracle 12c
192.168.3.81 oracle12c01
192.168.3.82 oracle12c02
192.168.3.83 oracle12c01-vip
192.168.3.84 oracle12c02-vip
192.168.3.85 oracle12c-scan
100.100.100.81 oracle12c01-priv
100.100.100.82 oracle12c02-priv
EOF

Configuring Users, Groups and Environments for Oracle Grid Infrastructure and Oracle Database

Create Oracle software owner user accounts on each cluster node.

groupadd -g 54321 oinstall
groupadd -g 54322 dba
groupadd -g 54323 oper
groupadd -g 54324 backupdba
groupadd -g 54325 dgdba
groupadd -g 54326 kmdba
groupadd -g 54327 asmdba
groupadd -g 54328 asmoper
groupadd -g 54329 asmadmin
groupadd -g 54330 racdba
useradd -u 54331 -g oinstall -G dba,asmdba,asmoper,asmadmin,racdba -m -d /home/grid -s /bin/bash -c "Grid Infrastructure Owner" grid
useradd -u 54321 -g oinstall -G dba,oper,backupdba,dgdba,kmdba,asmdba,asmadmin,racdba -m -d /home/oracle -s /bin/bash -c "Oracle Software Owner" oracle
echo "grid" | passwd --stdin grid
echo "oracle" | passwd --stdin oracle

Create Grid home and Oracle home directories on each cluster node.

mkdir -p /u01/app/12.2.0/grid
mkdir -p /u01/app/grid
mkdir -p /u01/app/oracle/product/12.2.0/dbhome_1
chown -R grid:oinstall /u01
chown -R oracle:oinstall /u01/app/oracle
chmod -R 775 /u01

Configure Oracle Software owner user account environment on each cluster node.

cat >>/home/grid/.bash_profile <<"EOF"
# Oracle 12c
umask 022
export ORACLE_SID=+ASM1
export ORACLE_BASE=/u01/app/grid
export ORACLE_HOME=/u01/app/12.2.0/grid
export GRID_HOME=$ORACLE_HOME
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
if command -v rlwrap >/dev/null 2>&1; then
alias sqlplus='rlwrap sqlplus'
fi
EOF

cat >>/home/oracle/.bash_profile <<"EOF"
# Oracle 12c
umask 022
export ORACLE_SID=orcl1
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/12.2.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
if command -v rlwrap >/dev/null 2>&1; then
alias sqlplus='rlwrap sqlplus'
alias rman='rlwrap rman'
fi
EOF

Completing Preinstallation Tasks Manually

Configuring SSH Manually on All Cluster Nodes

ssh-keygen -t rsa -P ''
ssh-copy-id -i ~/.ssh/id_rsa.pub oracle12c02

Configuring Storage Device Path Persistence Using Oracle ASMLIB

・ Configuring Storage Device Path Persistence Using Oracle ASMLIB on RHEL

Configuring Kernel Parameters for Linux

Create or edit the /etc/sysctl.d/97-oracle-database-12c-sysctl.conf file, and add or edit lines similar to:

cat > /etc/sysctl.d/97-oracle-database-12c-sysctl.conf << EOF
fs.file-max = 6815744
kernel.sem = 250 32000 100 128
kernel.shmmni = 4096
kernel.shmall = 1835008
kernel.shmmax = 6442450944
kernel.panic_on_oops = 1
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
net.ipv4.conf.all.rp_filter = 2
net.ipv4.conf.default.rp_filter = 2
fs.aio-max-nr = 1048576
net.ipv4.ip_local_port_range = 9000 65500
vm.nr_hugepages = 3584
EOF

sysctl -p

Configuring Resource Limits for Oracle Software Installation Users

cat > /etc/security/limits.d/97-oracle-database-12c-limits.conf << EOF
grid soft nofile 1024
grid hard nofile 65536
grid soft nproc 2047
grid hard nproc 16384
grid soft stack 10240
grid hard stack 32768
grid hard memlock 10869992
grid soft memlock 10869992
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft stack 10240
oracle hard stack 32768
oracle hard memlock 10869992
oracle soft memlock 10869992
EOF

Installing Oracle Grid Infrastructure for a New Cluster

  1. Download and change the Oracle Grid Infrastructure image files permissions.

    chown -R grid:oinstall /soft/LINUX.X64_122010_grid_home.zip
  2. Log in as the grid user, extract the files into the Grid home.

    unzip -q /soft/LINUX.X64_122010_grid_home.zip -d $GRID_HOME
  3. Log in as the root user, installing the cvuqdisk RPM on each node.

    CVUQDISK_GRP=oinstall; export CVUQDISK_GRP
    rpm -ivh /u01/app/12.2.0/grid/cv/rpm/cvuqdisk-1.0.10-1.rpm
  4. Log in as the grid user, verify that all of the cluster nodes meet the installation requirements:

    $GRID_HOME/runcluvfy.sh stage -pre crsinst -n oracle12c01,oracle12c02
  5. Log in as the grid user, run installer script.

    $GRID_HOME/gridSetup.sh

Installing the Oracle Database Software

  1. Download and change the Oracle Database image files permissions.

    chown -R oracle:oinstall /soft/LINUX.X64_122010_db_home.zip
  2. Log in as the oracle user, extract the files into the Oracle home.

    unzip -q /soft/LINUX.X64_122010_db_home.zip -d /soft
  3. Log in as the oracle user, run installer.

    /soft/database/runInstaller

Patch

...

Add Cluster Nodes

As grid, on exist node:

~]$ cluvfy comp peer -refnode oracle12c01 -n oracle12c02 -verbose
~]$ cluvfy stage -pre nodeadd -n oracle12c02 -verbose

~]$ $ORACLE_HOME/addnode/addnode.sh -silent "CLUSTER_NEW_NODES={oracle12c02}" "CLUSTER_NEW_PRIVATE_NODE_NAMES={oracle12c02-priv}" "CLUSTER_NEW_VIRTUAL_HOSTNAMES={oracle12c02-vip}" "CLUSTER_NEW_NODE_ROLES={hub}"

As root, on new nodes:

~]# /u01/oraInventory/orainstRoot.sh
~]# /u01/app/12.2.0/grid/root.sh

As oracle, on exist node:

~]$ $ORACLE_HOME/addnode/addnode.sh -silent "CLUSTER_NEW_NODES={oracle12c02}"

As root, on new nodes:

~]# /u01/oraInventory/orainstRoot.sh
~]# /u01/app/12.2.0/grid/root.sh

As grid, on exist node:

~]$ cluvfy stage -post nodeadd -n oracle12c02 -verbose

Installation Errors for Oracle 12.2 RAC on RHEL 7.6

PRVE-0421 : No entry exists in /etc/fstab for mounting /dev/shm

Cause

This is due to below bugs:

OL7 - BUG 21441387 - 12.2/MAIN/OL7.1: CVU REPORTS /DEV/SHM NOT MOUNTED WHEN IT IS MOUNTED
RHEL 7 - Bug 25907259 : RHEL7.2: CVU REPORTS /DEV/SHM NOT MOUNTED WHEN IT IS MOUNTED

Solution

This issue is fixed in 12.2.0.2, request for one-off patch if necessary.

As a work-around in OL7:

In OL7, the /dev/shm is not mounted in /etc/fstab on a fresh system, it is done in:

~]# ll /usr/lib/dracut/modules.d/99base/init.sh
-rwxr-xr-x. 1 root root 11379 Mar 26 10:14

vi /usr/lib/dracut/modules.d/99base/init.sh and comment the below lines

62 if ! ismounted /dev/shm; then
63 mkdir -m 0755 /dev/shm
64 mount -t tmpfs -o mode=1777,nosuid,nodev,strictatime tmpfs /dev/shm >/dev/null
65 fi

so, this validation is not really valid for OL7.

Unable to found ASM disk

~]# oracleasm status
Checking if ASM is loaded: yes
Checking if /dev/oracleasm is mounted: yes

~]# ll /dev/oracleasm/disks/
total 0
brw-rw---- 1 grid asmadmin 8, 49 Sep 3 13:49 DATA01
brw-rw---- 1 grid asmadmin 8, 65 Sep 3 13:49 DATA02
brw-rw---- 1 grid asmadmin 8, 17 Sep 3 16:25 GIMR01
brw-rw---- 1 grid asmadmin 8, 33 Sep 3 16:25 GIMR02
brw-rw---- 1 grid asmadmin 8, 81 Sep 3 16:25 GIMR03

~]# oracleasm listdisks
DATA01
DATA02
GIMR01
GIMR02
GIMR03

Cause

The oracleasmlib package is not installed.

~]# rpm -qa | grep oracleasm
kmod-oracleasm-2.0.8-22.0.5.el7.x86_64
oracleasm-support-2.1.11-2.el7.x86_64

Solution

~]# yum -y localinstall /soft/oracleasmlib-2.0.12-1.el7.x86_64.rpm

CLSRSC-400: A system reboot is required to continue installing

2026/09/03 18:19:29 CLSRSC-400: A system reboot is required to continue installing.
The command '/u01/app/12.2.0/grid/perl/bin/perl -I/u01/app/12.2.0/grid/perl/lib -I/u01/app/12.2.0/grid/crs/install /u01/app/12.2.0/grid/crs/install/rootcrs.pl ' execution failed

Cause

ACFS Drivers Install reports CLSRSC-400: A system reboot is required to continue installing (Doc ID 2025056.1), 主要是由于 12c gi 开始,acfs 默认是安装的,由于 acfs 在 redhat 7.3 中不支持导致上述的错误信息.

Bug 26247490 - LINUX: Add ACFS support for OL7 update 4 using RHCK (文档 ID 26247490.8)
ACFS and AFD report "Not Supported" after installing appropriate Oracle Grid Infrastructure Patches on RedHat (文档 ID 2303388.1)

But RHEL 7.6 query is supported.

~]$ acfsdriverstate -orahome $ORACLE_HOME supported
ACFS-9200: Supported

Solution

Patch 32226491.

~]# /u01/app/12.2.0/grid/crs/install/rootcrs.sh -force -deconfig -verbose

~]$ /u01/app/12.2.0/grid/oui/bin/runInstaller -silent -waitforcompletion -detachHome ORACLE_HOME='/u01/app/12.2.0/grid' -local
~]$ cat /u01/app/oraInventory/ContentsXML/inventory.xml

~]# chown -R grid:oinstall /soft/p6880880_122010_Linux-x86-64_12.2.0.1.28.zip
~]# chown -R grid:oinstall /soft/p32226491_122010_Linux-x86-64.zip

~]# chown -R grid:oinstall /u01/app/12.2.0/grid/
~]# chown -R grid:oinstall /u01/app/grid/

~]$ unzip /soft/p6880880_122010_Linux-x86-64_12.2.0.1.28.zip -d /u01/app/12.2.0/grid/ # Select [A]ll

~]$ /u01/app/12.2.0/grid/OPatch/opatch version
OPatch Version: 12.2.0.1.28

~]$ unzip /soft/p32226491_122010_Linux-x86-64.zip -d /soft

~]$ /u01/app/12.2.0/grid/gridSetup.sh -applyPSU /soft/32226491
Preparing the home to patch...
Applying the patch /soft/32226491/...
Successfully applied the patch.
The log can be found at: /u01/app/oraInventory/logs/GridSetupActions2021-04-01_04-18-54PM/installerPatchActions_2021-04-01_04-18-54PM.log
Launching Oracle Grid Infrastructure Setup Wizard...

~]$ /u01/app/12.2.0/grid/OPatch/opatch lspatches
26839277;DBWLM RELEASE UPDATE 12.2.0.1.0(ID:170913) (26839277)
32231681;ACFS JAN 2021 RELEASE UPDATE 12.2.0.1.210119 (32231681)
32253903;TOMCAT RELEASE UPDATE 12.2.0.1.0(ID:RELEASE) (32253903)
31802727;OCW OCT 2020 RELEASE UPDATE 12.2.0.1.201020 (31802727)
32228578;Database Jan 2021 Release Update : 12.2.0.1.210119 (32228578)

OPatch succeeded.

Opatch fails with home is not clean

~]$ /u01/app/12.2.0/grid/gridSetup.sh -applyPSU /soft/32226491
ERROR: The home is not clean. This home cannot be used since there was a failed OPatch execution in this home. Use a different home to proceed.

Cause

Last time, opatch failed to execute properly and exited with an error.

Solution

Remove the $GRID_HOME/install/patch file.

~]$ ls -l /u01/app/12.2.0/grid/install/patch
-rw-r--r-- 1 grid oinstall 0 Sep 3 19:51 /u01/app/12.2.0/grid/install/patch

~]$ mv /u01/app/12.2.0/grid/install/patch /tmp/

OUI-67100:NApply could not load patch from location

~]$ /u01/app/12.2.0/grid/gridSetup.sh -applyPSU /soft/32226491
ERROR: Unable to verify the graphical display setup. This application requires X display. Make sure that xdpyinfo exist under PATH variable.
Preparing the home to patch...
Applying the patch /soft/32226491...
OPatch command failed while applying the patch. For details look at the logs from /u01/app/12.2.0/grid/cfgtoollogs/opatch/.

Cause

OUI-67100, OUI-67073 error:

[Sep 3, 2026 8:03:50 PM] [INFO]     Patch history file: /u01/app/12.2.0/grid/cfgtoollogs/opatch/opatch_history.txt
[Sep 3, 2026 8:03:52 PM] [INFO] [OPSR-TIME] Loading raw inventory
[Sep 3, 2026 8:03:52 PM] [INFO] [OPSR-MEMORY] Loaded all components from inventory. Heap memory in use: 16 (MB)
[Sep 3, 2026 8:03:52 PM] [INFO] [OPSR-MEMORY] Loaded all one offs from inventory. Heap memory in use: 16 (MB)
[Sep 3, 2026 8:03:52 PM] [INFO] [OPSR-TIME] Raw inventory loaded successfully
[Sep 3, 2026 8:03:52 PM] [INFO] NApply::no CAS enabled, OPatch runs with legacy process.
[Sep 3, 2026 8:03:53 PM] [INFO] Verifying environment and performing prerequisite checks...
[Sep 3, 2026 8:03:53 PM] [FINE] Lock the home to access inventory.
[Sep 3, 2026 8:03:53 PM] [INFO] [OPSR-TIME] Running prerequisite checks
[Sep 3, 2026 8:03:53 PM] [SEVERE] OUI-67100:NApply could not load patch from location '/soft/32226491/32228578'
[Sep 3, 2026 8:03:53 PM] [SEVERE] OUI-67073:UtilSession failed: java.lang.RuntimeException: /soft/32226491/32228578/etc/config/actions.xml with Version field of the component "delete" in actions file cannot be <null> or empty. Please check patch metadata.
[Sep 3, 2026 8:03:53 PM] [INFO] Finishing UtilSession at Thu Sep 03 20:03:53 CST 2026
[Sep 3, 2026 8:03:53 PM] [INFO] Log file location: /u01/app/12.2.0/grid/cfgtoollogs/opatch/opatch2026-09-03_20-03-49PM_1.log
[Sep 3, 2026 8:03:53 PM] [INFO] Stack Description: java.lang.RuntimeException: java.lang.RuntimeException: /soft/32226491/32228578/etc/config/actions.xml with Version field of the component "delete" in actions file cannot be <null> or empty. Please check patch metadata.

Solution

The opatch version too low, upgrade the opatch.

CLSRSC-614: failed to get the list of configured diskgroups

Error occurred while executing $GRID_HOME/root.sh.

2026/09/03 21:39:02 CLSRSC-614: failed to get the list of configured diskgroups
Died at /u01/app/12.2.0/grid/crs/install/oraasm.pm line 2069.
The command '/u01/app/12.2.0/grid/perl/bin/perl -I/u01/app/12.2.0/grid/perl/lib -I/u01/app/12.2.0/grid/crs/install /u01/app/12.2.0/grid/crs/install/rootcrs.pl ' execution failed

Solution

~]# export ORACLE_HOME=/u01/app/12.2.0/grid
~]# cd /u01/app/12.2.0/grid/rdbms/lib
~]# /usr/bin/make -f ins_rdbms.mk client_sharedlib libasmclntsh12.ohso libasmperl12.ohso ORACLE_HOME=$ORACLE_HOME

ORA-12012: error on auto execute of job "SYS"."ORA$AT_OS_OPT_SY_"

Error in alert_orcl1.log.

2026-09-05T16:06:02.057495+08:00
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl2/trace/orcl2_j000_21007.trc:
ORA-12012: error on auto execute of job "SYS"."ORA$AT_OS_OPT_SY_145"
ORA-20001: Statistics Advisor: Invalid task name for the current user
ORA-06512: at "SYS.DBMS_STATS", line 47207
ORA-06512: at "SYS.DBMS_STATS_ADVISOR", line 882
ORA-06512: at "SYS.DBMS_STATS_INTERNAL", line 20059
ORA-06512: at "SYS.DBMS_STATS_INTERNAL", line 22201
ORA-06512: at "SYS.DBMS_STATS", line 47197

It is an Oracle known Bug and can appear when database is created with dbca in oracle 12.2

Solution

・ https://www.infoinflux.com/2026/06/introduction-ora-12012-error-is-related.html

orachk.zip fills the root

~]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/rhel-root xfs 77G 77G 20K 100% /
devtmpfs devtmpfs 5.8G 0 5.8G 0% /dev
tmpfs tmpfs 5.8G 640M 5.2G 11% /dev/shm
tmpfs tmpfs 5.8G 235M 5.6G 4% /run
tmpfs tmpfs 5.8G 0 5.8G 0% /sys/fs/cgroup
/dev/sda2 xfs 1014M 208M 807M 21% /boot
/dev/sda1 vfat 200M 9.6M 191M 5% /boot/efi
/dev/mapper/rhel-home xfs 19G 33M 18G 1% /home
tmpfs tmpfs 1.2G 0 1.2G 0% /run/user/54331
tmpfs tmpfs 1.2G 0 1.2G 0% /run/user/0

~]# du -sh /opt/oracle.ahf/orachk/*
8.0M /opt/oracle.ahf/orachk/Apex5_CollectionManager_App.sql
144M /opt/oracle.ahf/orachk/build
72M /opt/oracle.ahf/orachk/collections.dat
4.4M /opt/oracle.ahf/orachk/lib
18M /opt/oracle.ahf/orachk/messages
24K /opt/oracle.ahf/orachk/orachk
196K /opt/oracle.ahf/orachk/orachk.pyc
34G /opt/oracle.ahf/orachk/orachk.zip
9.7M /opt/oracle.ahf/orachk/rules.dat
44K /opt/oracle.ahf/orachk/sample_user_defined_checks.xml
4.0K /opt/oracle.ahf/orachk/user_defined_checks.xsd
4.0K /opt/oracle.ahf/orachk/web

Cause

The version is too outdated and has bugs.

~]# orachk -autostatus
This version of orachk was released on 13-Oct-2020 and it is older than 180 days. No new version of orachk is available in RAT_UPGRADE_LOC. It is highly recommended that you download the latest version of orachk from my oracle support to ensure the highest level of accuracy of the data contained within the report.

orachk daemon is running. Please stop the daemon and start orachk again to download from ARU

Running older version...

------------------------------------------------------------

Master node = oracle12c01

orachk daemon version = 20.2.3

Install location = /opt/oracle.ahf/orachk

Started at = Thu Sep 03 21:20:56 CST 2026

Solution

Stop orachk autostart.

~]# orachk -autostop

Appendix