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. Operating System Preparation
- 2. Kernel Parameters and Security Limits
- 3. Required Packages, OS Groups and Users
- 4. Create Grid and Oracle Homes
- 5. Shared Disks and Oracle ASMLib
- 6. Cluster Verification Utility (Pre-check)
- 7. Install Oracle Grid Infrastructure 26ai
- 8. Install the Oracle Database 26ai Software
- 9. Create the RAC Database with DBCA
- 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
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
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.
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:
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...
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
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
Post a Comment