Oracle RAC 26ai Installation on Oracle Linux 9 — Step by Step Guide

Oracle RAC 26ai Installation on Oracle Linux 9 — Step by Step

Oracle 26ai brings a new major release of the Oracle AI Database and Grid Infrastructure stack, and getting a 2-node Real Application Clusters (RAC) environment up and running is still the best way to really learn how the pieces fit together. This walkthrough documents a complete build of a 2-node Oracle RAC 26ai cluster (racnode1 / racnode2) on Oracle Linux 9, from OS preparation through Grid Infrastructure, the Database software, and finally creating the RAC database with DBCA.

The lab was built on Oracle VM VirtualBox with shared disks for ASM, but everything from the OS prerequisites through the DBCA screens applies equally to any virtualization platform or bare metal.

Contents

  1. 1. Operating System Preparation
  2. 2. Kernel Parameters and Security Limits
  3. 3. Required Packages, OS Groups and Users
  4. 4. Create Grid and Oracle Homes
  5. 5. Shared Disks and Oracle ASMLib
  6. 6. Cluster Verification Utility (Pre-check)
  7. 7. Install Oracle Grid Infrastructure 26ai
  8. 8. Install the Oracle Database 26ai Software
  9. 9. Create the RAC Database with DBCA
  10. 10. Wrap-up

1. Operating System Preparation

Start from a clean Oracle Linux 9 install on both nodes and work through the following before touching any Oracle software.

Disable the firewall

systemctl stop firewalld
systemctl disable firewalld

Disable SELinux

Edit /etc/selinux/config and set SELINUX=disabled on both nodes, then reboot.

vi /etc/selinux/config
SELinux set to disabled in /etc/selinux/config.
SELinux set to disabled in /etc/selinux/config.

Set the hostname

vi /etc/hostname

Configure IP addresses, VIPs and the SCAN

Each node needs a public IP, a private (interconnect) IP and a virtual IP (VIP), plus three SCAN IPs shared across the cluster. Add all of them to /etc/hosts on both nodes so name resolution is consistent:

cat /etc/hosts

127.0.0.1       localhost localhost.localdomain localhost4 localhost4.localdomain4
::1             localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.46.120  racnode1.localdomain      racnode1
192.168.46.121  racnode1-vip.localdomain   racnode1-vip
172.16.15.2     racnode1-priv.localdomain  racnode1-priv

192.168.46.122  racnode2.localdomain      racnode2
192.168.46.123  racnode2-vip.localdomain   racnode2-vip
172.16.15.3     racnode2-priv.localdomain  racnode2-priv

192.168.46.124  rac-scan.localdomain      rac-scan
192.168.46.125  rac-scan.localdomain      rac-scan
192.168.46.126  rac-scan.localdomain      rac-scan

💡 A production build would resolve the SCAN name via DNS round-robin rather than /etc/hosts, but pointing all three SCAN IPs at one name works fine for a lab cluster.

Mount the OS media and create a local Yum/DNF repo

Attaching the Oracle Linux 9.5 ISO to the VM's optical drive.
Attaching the Oracle Linux 9.5 ISO to the VM's optical drive.
mount /dev/sr0 /mnt
# mount: /mnt: WARNING: source write-protected, mounted read-only.

Create local repo files pointing at the mounted media:

[oracle_local_repo1]
name=Oracle Linux 9 DVD
mediaid=unique_id
metadata_expire=-1
gpgcheck=1
enabled=1
baseurl=file:///mnt/BaseOS
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle

[oracle_local_repo2]
name=Oracle Linux 9 DVD
mediaid=unique_id
metadata_expire=-1
gpgcheck=1
enabled=1
baseurl=file:///mnt/AppStream
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle

2. Kernel Parameters and Security Limits

Kernel parameters

Add the standard Oracle kernel parameters to /etc/sysctl.conf and apply them:

vi /etc/sysctl.conf
/sbin/sysctl -p

fs.file-max = 6815744
kernel.sem = 250 32000 100 128
kernel.shmmni = 4096
kernel.shmall = 1073741824
kernel.shmmax = 4398046511104
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

Security (resource) limits for oracle and grid

vi /etc/security/limits.d/25-pw-rlimits.conf

oracle soft nofile 1024
oracle hard nofile 65536
oracle soft nproc  16384
oracle hard nproc  16384
oracle soft stack  10240
oracle hard stack  32768
oracle hard memlock 134217728
oracle soft memlock 134217728
oracle soft data unlimited
oracle hard data unlimited

grid soft nofile 1024
grid hard nofile 65536
grid soft nproc  16384
grid hard nproc  16384
grid soft stack  10240
grid hard stack  32768
grid hard memlock 134217728
grid soft memlock 134217728
grid soft data unlimited
grid hard data unlimited

3. Required Packages, OS Groups and Users

Install the required RPMs

dnf install -y bc binutils compat-openssl10 elfutils-libelf glibc glibc-devel ksh \
  libaio libXrender libX11 libXau libXi libXtst libgcc libnsl libstdc++ libxcb \
  libibverbs libasan liblsan make policycoreutils policycoreutils-python-utils \
  smartmontools sysstat ipmiutil libnsl2 libnsl2-devel libvirt-libs net-tools \
  nfs-utils unixODBC compat-openssl11

dnf install libaio libaio-devel
dnf install libgcc libgcc.i686
dnf groupinstall "Development Tools"
dnf install libaio-devel libstdc++-devel glibc-devel

ln -s /usr/lib64/libgcc_s.so.1 /usr/lib64/libgcc_s.so
ln -s /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so

Create the OS groups and users

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 54321 -g oinstall -G dba,oper,backupdba,dgdba,kmdba,racdba,asmdba oracle
useradd -u 54322 -g oinstall --groups dba,asmadmin,asmdba,asmoper grid

Configure avahi-daemon

Zero-configuration networking (avahi/mDNS) can interfere with cluster interconnect traffic, so it's installed only to be immediately disabled:

yum install -y avahi*
systemctl stop avahi-daemon.socket
systemctl stop avahi-daemon.service
pgrep -f avahi-daemon | awk '{print "kill -9 "$2}'
systemctl disable avahi-daemon.socket
systemctl disable avahi-daemon.service

4. Create Grid and Oracle Homes

mkdir -p /u01/app/oraInventory
mkdir -p /u01/app/grid/
mkdir -p /u01/app/26.0.0/grid
mkdir -p /u01/app/oracle/product/26.0.0/dbhome_1

chown -R grid:oinstall /u01
chmod -R 775 /u01

5. Shared Disks and Oracle ASMLib

Create and attach the shared disks

Create the shared virtual disks that will back ASM (OCR/voting and DATA disk groups) and mark them Shareable in the Virtual Media Manager so both nodes can see them concurrently.

Both cluster nodes (racnode1, racnode2) powered on in Oracle VM VirtualBox Manager.
Both cluster nodes (racnode1, racnode2) powered on in Oracle VM VirtualBox Manager.
Creating a shared virtual disk (ocr.vdi) of type 'Shareable' for the OCR/voting disk group.
Creating a shared virtual disk (ocr.vdi) of type 'Shareable' for the OCR/voting disk group.

Attach the newly created shared disks to both virtual machines before continuing.

Install Oracle ASMLib

Download oracleasm-support and oracleasmlib for Oracle Linux 9 from the Oracle ASMLib downloads page, then install them:

ls
# oracleasmlib-3.1.1-1.el9.x86_64.rpm
# oracleasm-support-3.1.1-5.el9.x86_64.rpm

yum install oracleasm-support-3.1.1-5.el9.x86_64.rpm
yum install oracleasmlib-3.1.1-1.el9.x86_64.rpm

Initialize and start ASMLib

oracleasm configure -i
# Default user to own the ASM disk devices [ ]: grid
# Default group to own the ASM disk devices [ ]: oinstall
# Start Oracle ASM system service on boot (y/n) [y]: y

systemctl restart oracleasm

Partition the shared disks

fdisk /dev/sdb
# n -> p -> 1 -> (accept defaults) -> w      (creates a 20 GiB partition for DATA)

fdisk /dev/sdc
# n -> p -> 1 -> (accept defaults) -> w      (creates a 5 GiB partition for OCR)

Create the ASM disks

oracleasm createdisk ocr /dev/sdc1
oracleasm createdisk data /dev/sdb1

Make the disks visible on the other node

When a disk is added on one node, the other node won't see it until it rescans the SCSI bus. Run partprobe on the second node rather than rebooting it:

partprobe /dev/sdd
partprobe

6. Cluster Verification Utility (Pre-check)

Before launching the Grid Infrastructure installer, run runcluvfy.sh from the Grid home staging area to confirm both nodes meet the prerequisites, and let it fix what it can automatically:

./runcluvfy.sh stage -pre crsinst -n racnode1,racnode2 -r 23 -orainv oinstall -fixup -verbose

7. Install Oracle Grid Infrastructure 26ai

Log in as the grid OS user and launch the Grid Infrastructure installer from the unzipped software:

Launching the Oracle Grid Infrastructure Setup Wizard as the grid user.
Launching the Oracle Grid Infrastructure Setup Wizard as the grid user.
Step 1 – Select Configuration Option: choose 'Configure Oracle Grid Infrastructure for a New Cluster'.
Step 1 – Select Configuration Option: choose 'Configure Oracle Grid Infrastructure for a New Cluster'.
Step 2 – Select Cluster Configuration: choose 'Configure cluster to manage Oracle RAC databases'.
Step 2 – Select Cluster Configuration: choose 'Configure cluster to manage Oracle RAC databases'.
Step 3 – Grid Plug and Play Information: cluster name, SCAN name (rac-scan) and SCAN port (1530).
Step 3 – Grid Plug and Play Information: cluster name, SCAN name (rac-scan) and SCAN port (1530).
Step 4 – Cluster Node Information: add racnode1/racnode2 public and VIP hostnames, then test SSH connectivity.
Step 4 – Cluster Node Information: add racnode1/racnode2 public and VIP hostnames, then test SSH connectivity.
Step 5 – Specify Network Interface Usage: mark the public NIC as 'Public' and the private interconnect as 'ASM & Private'.
Step 5 – Specify Network Interface Usage: mark the public NIC as 'Public' and the private interconnect as 'ASM & Private'.
Step 6 – Storage Option: choose 'Use Oracle Flex ASM for storage' for OCR and voting files.
Step 6 – Storage Option: choose 'Use Oracle Flex ASM for storage' for OCR and voting files.
Step 7 – Create ASM Disk Group: name the disk group OCR, set External redundancy and select the OCR candidate disk.
Step 7 – Create ASM Disk Group: name the disk group OCR, set External redundancy and select the OCR candidate disk.
Changing the ASM disk discovery path so the installer can see the ORCL:* ASMLib disks.
Changing the ASM disk discovery path so the installer can see the ORCL:* ASMLib disks.
Step 8 – Specify ASM Password for the SYS and ASMSNMP accounts.
Step 8 – Specify ASM Password for the SYS and ASMSNMP accounts.
Step 9 – Automatic Self Correction: left disabled in this walkthrough.
Step 9 – Automatic Self Correction: left disabled in this walkthrough.
Step 10 – Failure Isolation Support: 'Do not use Intelligent Platform Management Interface (IPMI)' since this is a lab VM.
Step 10 – Failure Isolation Support: 'Do not use Intelligent Platform Management Interface (IPMI)' since this is a lab VM.
Step 11 – Specify Management Options: Enterprise Manager registration skipped.
Step 11 – Specify Management Options: Enterprise Manager registration skipped.
Step 12 – Privileged Operating System Groups: map OSASM/OSDBA/OSOPER groups (asmadmin, asmdba, asmoper).
Step 12 – Privileged Operating System Groups: map OSASM/OSDBA/OSOPER groups (asmadmin, asmdba, asmoper).
Step 13 – Specify Installation Location: Oracle base /u01/app/grid, software home /u01/app/26.0.0/grid.
Step 13 – Specify Installation Location: Oracle base /u01/app/grid, software home /u01/app/26.0.0/grid.
Step 14 – Create Inventory: /u01/app/oraInventory with oinstall as the inventory group.
Step 14 – Create Inventory: /u01/app/oraInventory with oinstall as the inventory group.
Step 15 – Root script configuration: run root scripts manually after the install (recommended for RAC).
Step 15 – Root script configuration: run root scripts manually after the install (recommended for RAC).
Step 16 – Perform Prerequisite Checks. Fix any failed checks (NTP/chrony, DNS, swap, etc.) before continuing.
Step 16 – Perform Prerequisite Checks. Fix any failed checks (NTP/chrony, DNS, swap, etc.) before continuing.
Step 17 – Summary: review the Grid Infrastructure configuration before installing.
Step 17 – Summary: review the Grid Infrastructure configuration before installing.
Installation in progress — files are copied to both nodes and Oracle base is configured.
Installation in progress — files are copied to both nodes and Oracle base is configured.
Progress continues through 'Configure Oracle Grid Infrastructure for a Cluster'.
Progress continues through 'Configure Oracle Grid Infrastructure for a Cluster'.
Root scripts complete and the Automatic Storage Management Configuration Assistant finishes.
Root scripts complete and the Automatic Storage Management Configuration Assistant finishes.
Installation reaches 100% — Oracle Net Configuration Assistant and Cluster Verification Utility run last.
Installation reaches 100% — Oracle Net Configuration Assistant and Cluster Verification Utility run last.

Run the configuration scripts as root

Once file copy finishes, the installer prompts for orainstRoot.sh and root.sh to be run as root on each node, one at a time:

/u01/app/oraInventory/orainstRoot.sh
# Changing permissions of /u01/app/oraInventory.
# Changing groupname of /u01/app/oraInventory to oinstall.
# The execution of the script is complete.

/u01/app/26.0.0/grid/root.sh
# ORACLE_OWNER= grid
# ORACLE_HOME= /u01/app/26.0.0/grid
# ...
# CLSRSC-594: Executing installation step 1 of 18: 'ValidateEnv'.
# CLSRSC-594: Executing installation step 7 of 18: 'CreateRootCert'.
# CLSRSC-594: Executing installation step 15 of 18: 'InitConfig'.
# CRS-4256: Updating the profile
# Successful addition of voting disk ... to disk group +OCR.
# CLSRSC-594: Executing installation step 16 of 18: 'StartCluster'.
# CLSRSC-343: Successfully started Oracle Clusterware stack
# CLSRSC-594: Executing installation step 18 of 18: 'PostConfig'.
# CLSRSC-325: Configure Oracle Grid Infrastructure for a Cluster ... succeeded

💡 Run root.sh on racnode1 first, wait for it to complete, then run it on racnode2. Running both in parallel is not supported.

8. Install the Oracle Database 26ai Software

With Grid Infrastructure up on both nodes, log in as oracle and install the database software (software-only — the database itself is created afterwards with DBCA):

chown -R oracle:oinstall /u01/app/oracle
cd /u01/app/oracle/product/26.0.0/dbhome_1
./runInstaller
# Launching Oracle AI Database Setup Wizard...
Step 1 – Select Configuration Option: choose 'Set Up RAC Software Only' (a starter database is created later with DBCA).
Step 1 – Select Configuration Option: choose 'Set Up RAC Software Only' (a starter database is created later with DBCA).
Step 2 – Select Database Installation Option: 'Oracle Real Application Clusters database installation'.
Step 2 – Select Database Installation Option: 'Oracle Real Application Clusters database installation'.
Step 3 – Select List of Nodes: both racnode1 and racnode2 are selected.
Step 3 – Select List of Nodes: both racnode1 and racnode2 are selected.
Provide the oracle OS user credentials and click Setup to configure passwordless SSH between the nodes.
Provide the oracle OS user credentials and click Setup to configure passwordless SSH between the nodes.
Establishing SSH connectivity between the selected nodes — this can take a few minutes.
Establishing SSH connectivity between the selected nodes — this can take a few minutes.
Passwordless SSH connectivity between the nodes was configured successfully.
Passwordless SSH connectivity between the nodes was configured successfully.
The installer verifies setup and installer validations before continuing.
The installer verifies setup and installer validations before continuing.
Step 4 – Specify Installation Location: Oracle base /u01/app/oracle, home /u01/app/oracle/product/26.0.0/dbhome_1.
Step 4 – Specify Installation Location: Oracle base /u01/app/oracle, home /u01/app/oracle/product/26.0.0/dbhome_1.
The installer checks the specified location on the remote node as well.
The installer checks the specified location on the remote node as well.
Step 5 – Privileged Operating System Groups: map OSDBA, OSOPER, OSBACKUPDBA, OSDGDBA, OSKMDBA and OSRACDBA groups.
Step 5 – Privileged Operating System Groups: map OSDBA, OSOPER, OSBACKUPDBA, OSDGDBA, OSKMDBA and OSRACDBA groups.
Step 6 – Root script configuration: run root.sh manually after installation completes.
Step 6 – Root script configuration: run root.sh manually after installation completes.
Step 7 – Perform Prerequisite Checks begins verifying the target environment.
Step 7 – Perform Prerequisite Checks begins verifying the target environment.
Checking OS kernel parameters such as shmall as part of the prerequisite checks.
Checking OS kernel parameters such as shmall as part of the prerequisite checks.
Some checks (resolv.conf integrity, NTP, SCAN DNS resolution) fail in this lab environment and need review.
Some checks (resolv.conf integrity, NTP, SCAN DNS resolution) fail in this lab environment and need review.
Non-critical checks are marked Ignored so the installation can continue.
Non-critical checks are marked Ignored so the installation can continue.
Step 8 – Summary: Enterprise Edition, software-only install, Oracle base and cluster nodes are confirmed.
Step 8 – Summary: Enterprise Edition, software-only install, Oracle base and cluster nodes are confirmed.
Step 9 – Install Product begins: local node configuration, then copying files to the remote node.
Step 9 – Install Product begins: local node configuration, then copying files to the remote node.
The installer prompts to run root.sh as root on both racnode1 and racnode2 once file copy finishes.
The installer prompts to run root.sh as root on both racnode1 and racnode2 once file copy finishes.
Step 10 – Finish: registration of the Oracle Database software completed successfully on both nodes.
Step 10 – Finish: registration of the Oracle Database software completed successfully on both nodes.

Run root.sh for the database home

/u01/app/oracle/product/26.0.0/dbhome_1/root.sh
# ORACLE_OWNER= oracle
# ORACLE_HOME= /u01/app/oracle/product/26.0.0/dbhome_1
# The contents of "dbhome" have not changed. No need to overwrite.
# Finished running generic part of root script.
# Now product-specific root actions will be performed.

Run this on both racnode1 and racnode2. Once complete, the installer's Finish screen confirms the database software registration succeeded.

9. Create the RAC Database with DBCA

With the Grid Infrastructure and Database software installed on both nodes, the last step is to create the actual RAC database using the Database Configuration Assistant:

dbca
DBCA Step 1 – Select Database Operation: 'Create a database'.
DBCA Step 1 – Select Database Operation: 'Create a database'.
Step 2 – Select Database Creation Mode: choose 'Advanced configuration' for full control over the RAC database.
Step 2 – Select Database Creation Mode: choose 'Advanced configuration' for full control over the RAC database.
Step 3 – Select Database Deployment Type: Database type 'Oracle Real Application Cluster (RAC)', template 'Custom Database'.
Step 3 – Select Database Deployment Type: Database type 'Oracle Real Application Cluster (RAC)', template 'Custom Database'.
Step 4 – Select List of Nodes: both racnode1 and racnode2 are selected for the cluster database.
Step 4 – Select List of Nodes: both racnode1 and racnode2 are selected for the cluster database.
Step 5 – Specify Database Identification Details: global database name orcl.localdomain, SID orcl, created as a Container Database.
Step 5 – Specify Database Identification Details: global database name orcl.localdomain, SID orcl, created as a Container Database.
Step 6 – Select Database Storage Option: ASM storage type, database files under +DATA, Oracle-Managed Files enabled.
Step 6 – Select Database Storage Option: ASM storage type, database files under +DATA, Oracle-Managed Files enabled.
Step 7 – Select Fast Recovery Option: FRA left unconfigured in this walkthrough (archiving not enabled).
Step 7 – Select Fast Recovery Option: FRA left unconfigured in this walkthrough (archiving not enabled).
Step 8 – Select Database Options: optional components such as JVM, Text, OLAP, Spatial are left unchecked to keep the database lean.
Step 8 – Select Database Options: optional components such as JVM, Text, OLAP, Spatial are left unchecked to keep the database lean.
Step 9 – Configuration Options / Memory: Automatic Shared Memory Management with SGA/PGA sizes.
Step 9 – Configuration Options / Memory: Automatic Shared Memory Management with SGA/PGA sizes.
Configuration Options / Sizing: 8K block size and a maximum of 300 processes.
Configuration Options / Sizing: 8K block size and a maximum of 300 processes.
Configuration Options / Character Sets: AL32UTF8 database character set, AL16UTF16 national character set.
Configuration Options / Character Sets: AL32UTF8 database character set, AL16UTF16 national character set.
Configuration Options / Connection Mode: Dedicated Server Mode selected.
Configuration Options / Connection Mode: Dedicated Server Mode selected.
Step 10 – Specify Management Options: periodic Cluster Verification Utility (CVU) checks enabled.
Step 10 – Specify Management Options: periodic Cluster Verification Utility (CVU) checks enabled.
Step 11 – Specify Database User Credentials: same administrative password used for SYS, SYSTEM and DBSNMP.
Step 11 – Specify Database User Credentials: same administrative password used for SYS, SYSTEM and DBSNMP.
Passwords are entered for the administrative accounts before proceeding.
Passwords are entered for the administrative accounts before proceeding.
DBCA warns when a password doesn't meet Oracle's recommended complexity standards.
DBCA warns when a password doesn't meet Oracle's recommended complexity standards.
Confirm to continue with the chosen password despite the complexity warning (use a stronger password for production).
Confirm to continue with the chosen password despite the complexity warning (use a stronger password for production).
Step 12 – Select Database Creation Option: 'Create database' is selected (templates/scripts-only options are also available here).
Step 12 – Select Database Creation Option: 'Create database' is selected (templates/scripts-only options are also available here).
Step 13 – Perform Prerequisite Checks: HugePages and SCAN/DNS checks are flagged for review.
Step 13 – Perform Prerequisite Checks: HugePages and SCAN/DNS checks are flagged for review.
Checks are reviewed and ignored where acceptable for this lab environment.
Checks are reviewed and ignored where acceptable for this lab environment.
DBCA confirms before proceeding since some prerequisites were ignored.
DBCA confirms before proceeding since some prerequisites were ignored.
Step 14 – Summary: RAC Admin-Managed database, ASM storage, Automatic Shared Memory Management and initialization parameters.
Step 14 – Summary: RAC Admin-Managed database, ASM storage, Automatic Shared Memory Management and initialization parameters.
Step 15 – Progress Page: DBCA creates the instance, database files, data dictionary and completes post-configuration actions.
Step 15 – Progress Page: DBCA creates the instance, database files, data dictionary and completes post-configuration actions.

10. Wrap-up

At this point DBCA finishes creating the container database orcl, starts the ASM-backed instances on both racnode1 and racnode2, and the 2-node Oracle RAC 26ai cluster on Oracle Linux 9 is ready to use. From here it's worth running crsctl status resource -t and srvctl status database -d orcl to confirm both instances are up, and reviewing the prerequisite checks that were ignored during setup (NTP/chrony, SCAN DNS resolution, HugePages) so they're properly addressed before this build is treated as anything beyond a lab environment.

Environment used in this walkthrough: Oracle Linux 9.5, Oracle Grid Infrastructure & Database 26ai, 2-node cluster on Oracle VM VirtualBox with ASMLib-managed shared disks.

Comments

Popular posts from this blog

Strengthening Database Security with SQL Firewall in Oracle 26ai

MySQL Installation on Oracle Cloud’s “Always Free” Compute Instance

MySQL Replication on Oracle Cloud’s “Always Free” Compute Instance