- Introduction: This article provides a step by step guide for installing Oracle Database 26ai RAC in a two node cluster environment. It covers essential prerequisites, Grid Infrastructure installation, ASM configuration, RAC database creation, and post-installation verification steps to help you successfully deploy and validate a functional Oracle RAC setup.
- Prerequisites: Below are the minimum requirements for Linux environment.
- For each node:
- OS - Linux 8/9
- CPU - 2core
- RAM - 8GB
- SWAP - 8GB
- Disk space - 50GB (/u01)
- Must have root user or sudo access.
- Disable the firewall.
- 2 Network cards (NIC).
- For whole setup:
- Raw Disk storage - 80GB (For ASM disks)
- Grid and Database binary. Download here.
- Scenario: This setup is for learning and testing purposes only. So a lightweight Oracle RAC 26ai lab environment will be built using limited hardware resources. Each node will be configured with 5 GB RAM instead of the recommended 8 GB+, name resolution will be managed through /etc/hosts instead of a DNS server, and ASM shared storage will be created using raw virtual disks rather than a dedicated storage server.
- Environment:
- Network details for each node:
Server Node 1 Node 2 Public Hostname rac1.oraeasy.com rac2.oraeasy.com Private Hostname rac1-priv.oraeasy.com rac2-priv.oraeasy.com Virtual Hostname rac1-vip.oraeasy.com rac2-vip.oraeasy.com Scan Hostname rac-scan.oraeasy.com rac-scan.oraeasy.com
- Global details for each node:
VM Tool Oracle VitualBox 7.2 OS OL 9 CPU 2 core RAM 5GB SWAP 5 GB Grid/Database Version 26ai (23.26.1) Grid Home /u01/app/grid/26ai/grid_1 Database Home /u01/app/oracle/26ai/db_1 Grid/Database OS user oracle Database Name raccdb
- Summary of activities:
At top level, we will be doing RAC installation in below phases.- Node Preparation.
- ASM Disks Configurations.
- Oracle Cluster Verification Utility (CVU) Validation.
- Oracle Grid Infrastructure Installation.
- Oracle Database Software Installation.
- RAC Database Creation.
- Post-Installation Verification.
- Now let's proceed to install the Oracle RAC setup step by step:
Node Preparation:
1. First create a machine with required configuration and attach a single network card for internet connectivity. We will add/modify the Network card later for setup . Here we have created our first machine with name "rac1".
2. Now we need to install required prerequisites for Oracle 26ai RAC installation.[root@rac1 ~]# hostname rac1.oraeasy.com [root@rac1 ~]# [root@rac1 ~]# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 4.0M 0 4.0M 0% /dev tmpfs 2.2G 0 2.2G 0% /dev/shm tmpfs 893M 9.3M 884M 2% /run /dev/sda2 15G 5.9G 9.2G 40% / /dev/sda6 54G 418M 54G 1% /u01 /dev/sda1 1014M 355M 660M 35% /boot /dev/sda5 5.0G 69M 5.0G 2% /tmp tmpfs 447M 96K 447M 1% /run/user/1000 [root@rac1 ~]# [root@rac1 ~]# free -h total used free shared buff/cache available Mem: 4.4Gi 1.1Gi 2.9Gi 21Mi 616Mi 3.3Gi Swap: 5.0Gi 0B 5.0Gi [root@rac1 ~]# ping google.com PING google.com (172.217.26.110) 56(84) bytes of data. 64 bytes from tzdelb-bj-in-f14.1e100.net (172.217.26.110): icmp_seq=1 ttl=118 time=7.22 ms 64 bytes from tzdelb-bj-in-f14.1e100.net (172.217.26.110): icmp_seq=2 ttl=118 time=5.95 ms 64 bytes from tzdelb-bj-in-f14.1e100.net (172.217.26.110): icmp_seq=3 ttl=118 time=8.93 ms 64 bytes from tzdelb-bj-in-f14.1e100.net (172.217.26.110): icmp_seq=4 ttl=118 time=5.94 ms ^C --- google.com ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3005ms rtt min/avg/max/mdev = 5.941/7.008/8.928/1.223 ms [root@rac1 ~]#
3. Now configure the additional OS groups for "Oracle" user and change its password. We will be using "oracle" user for both Grid and Database Home.[root@rac1 ~]# dnf -y install oracle-ai-database-preinstall-26ai Oracle Linux 9 BaseOS Latest (x86_64) 59 kB/s | 120 MB 34:28 Oracle Linux 9 Application Stream Packages (x86_64) 51 kB/s | 89 MB 29:24 Oracle Linux 9 UEK Release 7 (x86_64) 110 kB/s | 101 MB 15:38 Last metadata expiration check: 0:00:20 ago on Sat 02 May 2026 11:38:24 AM IST. Dependencies resolved. ============================================================================================================================================== Package Architecture Version Repository Size ============================================================================================================================================== Installing: oracle-ai-database-preinstall-26ai x86_64 1.0-1.el9 ol9_appstream 34 k Installing dependencies: compat-openssl11 x86_64 1:1.1.1k-5.el9_7.1 ol9_appstream 1.5 M initscripts x86_64 10.11.8-4.0.1.el9 ol9_baseos_latest 285 k ksh x86_64 3:1.0.6-7.0.1.el9_6.2 ol9_appstream 889 k Transaction Summary ============================================================================================================== Install 4 Packages Total download size: 2.6 M Installed size: 7.8 M Downloading Packages: (1/4): initscripts-10.11.8-4.0.1.el9.x86_64.rpm 122 kB/s | 285 kB 00:02 (2/4): oracle-ai-database-preinstall-26ai-1.0-1.el9.x86_64.rpm 187 kB/s | 34 kB 00:00 (3/4): ksh-1.0.6-7.0.1.el9_6.2.x86_64.rpm 76 kB/s | 889 kB 00:11 (4/4): compat-openssl11-1.1.1k-5.el9_7.1.x86_64.rpm 106 kB/s | 1.5 MB 00:14 -------------------------------------------------------------------------------------------------------------- Total 191 kB/s | 2.6 MB 00:14 Oracle Linux 9 BaseOS Latest (x86_64) 6.1 MB/s | 6.2 kB 00:00 Importing GPG key 0x8D8B756F: Userid : "Oracle Linux (release key 1)" Fingerprint: 3E6D 826D 3FBA B389 C2F3 8E34 BC4D 06A0 8D8B 756F From : /etc/pki/rpm-gpg/RPM-GPG-KEY-oracle Key imported successfully Importing GPG key 0x8B4EFBE6: Userid : "Oracle Linux (backup key 1) " Fingerprint: 9822 3175 9C74 6706 5D0C E9B2 A7DD 0708 8B4E FBE6 From : /etc/pki/rpm-gpg/RPM-GPG-KEY-oracle Key imported successfully Running transaction check Transaction check succeeded. Running transaction test Transaction test succeeded. Running transaction Preparing : 1/1 Installing : ksh-3:1.0.6-7.0.1.el9_6.2.x86_64 1/4 Running scriptlet: ksh-3:1.0.6-7.0.1.el9_6.2.x86_64 1/4 Installing : compat-openssl11-1:1.1.1k-5.el9_7.1.x86_64 2/4 Installing : initscripts-10.11.8-4.0.1.el9.x86_64 3/4 Running scriptlet: initscripts-10.11.8-4.0.1.el9.x86_64 3/4 Created symlink /etc/systemd/system/sysinit.target.wants/import-state.service → /usr/lib/systemd/system/import-state.service. Created symlink /etc/systemd/system/sysinit.target.wants/loadmodules.service → /usr/lib/systemd/system/loadmodules.service. Installing : oracle-ai-database-preinstall-26ai-1.0-1.el9.x86_64 4/4 Running scriptlet: oracle-ai-database-preinstall-26ai-1.0-1.el9.x86_64 4/4 Verifying : initscripts-10.11.8-4.0.1.el9.x86_64 1/4 Verifying : compat-openssl11-1:1.1.1k-5.el9_7.1.x86_64 2/4 Verifying : ksh-3:1.0.6-7.0.1.el9_6.2.x86_64 3/4 Verifying : oracle-ai-database-preinstall-26ai-1.0-1.el9.x86_64 4/4 Installed: compat-openssl11-1:1.1.1k-5.el9_7.1.x86_64 initscripts-10.11.8-4.0.1.el9.x86_64 ksh-3:1.0.6-7.0.1.el9_6.2.x86_64 oracle-ai-database-preinstall-26ai-1.0-1.el9.x86_64 Complete! [root@rac1 ~]#
4. Now create directories for Grid & Database Home.[root@rac1 ~]# id oracle uid=54321(oracle) gid=54321(oinstall) groups=54321(oinstall),54322(dba),54323(oper),54324(backupdba),54325(dgdba),54326(kmdba),54330(racdba) [root@rac1 ~]# [root@rac1 ~]# [root@rac1 ~]# groupadd -g 54331 asmadmin [root@rac1 ~]# groupadd -g 54332 asmdba [root@rac1 ~]# groupadd -g 54333 asmoper [root@rac1 ~]# usermod -a -G asmadmin,asmdba,asmoper oracle [root@rac1 ~]# id oracle uid=54321(oracle) gid=54321(oinstall) groups=54321(oinstall),54322(dba),54323(oper),54324(backupdba),54325(dgdba),54326(kmdba),54330(racdba),54331(asmadmin),54332(asmdba),54333(asmoper) [root@rac1 ~]# [root@rac1 ~]# passwd oracle Changing password for user oracle. New password: BAD PASSWORD: The password is shorter than 8 characters Retype new password: passwd: all authentication tokens updated successfully. [root@rac1 ~]#
5. Now configure SELINUX & Disable Firewall.[root@rac1 ~]# mkdir -p /u01/app/grid/26ai/grid_1 [root@rac1 ~]# mkdir -p /u01/grid [root@rac1 ~]# mkdir -p /u01/app/oracle/26ai/grid_1 [root@rac1 ~]# chown -R oracle:oinstall /u01 [root@rac1 ~]# [root@rac1 ~]# chmod -R 775 /u01
6. Now configure the /etc/hosts files and add the IPs details. These IPs set can be vary according to your setup.[root@rac1 ~]# cat /etc/selinux/config | grep SELINUX # SELINUX= can take one of these three values: # NOTE: In earlier Fedora kernel builds, SELINUX=disabled would also SELINUX=enforcing # SELINUXTYPE= can take one of these three values: SELINUXTYPE=targeted [root@rac1 ~]# [root@rac1 ~]# vi /etc/selinux/config [root@rac1 ~]# [root@rac1 ~]# cat /etc/selinux/config | grep SELINUX # SELINUX= can take one of these three values: # NOTE: In earlier Fedora kernel builds, SELINUX=disabled would also SELINUX=permissive # SELINUXTYPE= can take one of these three values: SELINUXTYPE=targeted [root@rac1 ~]# [root@rac1 ~]# systemctl status firewalld ● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2026-05-02 09:37:03 IST; 3h 17min ago Docs: man:firewalld(1) Main PID: 731 (firewalld) Tasks: 2 (limit: 28166) Memory: 42.0M CPU: 1.828s CGroup: /system.slice/firewalld.service └─731 /usr/bin/python3 -s /usr/sbin/firewalld --nofork --nopid May 02 09:36:52 rac1.oraeasy.com systemd[1]: Starting firewalld - dynamic firewall daemon... May 02 09:37:03 rac1.oraeasy.com systemd[1]: Started firewalld - dynamic firewall daemon. [root@rac1 ~]# [root@rac1 ~]# systemctl stop firewalld [root@rac1 ~]# systemctl disable firewalld Removed "/etc/systemd/system/multi-user.target.wants/firewalld.service". Removed "/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service". [root@rac1 ~]# [root@rac1 ~]# systemctl status firewalld ○ firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled) Active: inactive (dead) Docs: man:firewalld(1) May 02 09:36:52 rac1.oraeasy.com systemd[1]: Starting firewalld - dynamic firewall daemon... May 02 09:37:03 rac1.oraeasy.com systemd[1]: Started firewalld - dynamic firewall daemon. May 02 12:54:25 rac1.oraeasy.com systemd[1]: Stopping firewalld - dynamic firewall daemon... May 02 12:54:25 rac1.oraeasy.com systemd[1]: firewalld.service: Deactivated successfully. May 02 12:54:25 rac1.oraeasy.com systemd[1]: Stopped firewalld - dynamic firewall daemon. May 02 12:54:25 rac1.oraeasy.com systemd[1]: firewalld.service: Consumed 1.977s CPU time. [root@rac1 ~]#
7. Now switch to "oracle" user and create environment files for Grid & Database Home.[root@rac1 ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 [root@rac1 ~]# [root@rac1 ~]# vi /etc/hosts [root@rac1 ~]# [root@rac1 ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 # Public 192.168.80.11 rac1.oraeasy.com rac1 192.168.80.12 rac2.oraeasy.com rac2 # Virtual 192.168.80.21 rac1-vip.oraeasy.com rac1-vip 192.168.80.22 rac2-vip.oraeasy.com rac2-vip # SCAN 192.168.80.31 rac-scan.oraeasy.com rac-scan 192.168.80.32 rac-scan.oraeasy.com rac-scan 192.168.80.33 rac-scan.oraeasy.com rac-scan # Private 192.168.10.11 rac1-priv.oraeasy.com rac1-priv 192.168.10.12 rac2-priv.oraeasy.com rac2-priv [root@rac1 ~]#
8. Now we need to add the Network cards to the machine. So shutdown the machine & follow below steps.For Grid Home: [oracle@rac1 ~]$ vi .grid.env [oracle@rac1 ~]$ cat .grid.env # Environment variables for ASM - Grid Home ORACLE_SID=+ASM1; export ORACLE_SID ORACLE_BASE=/u01/grid; export ORACLE_BASE ORACLE_HOME=/u01/app/grid/26ai/grid_1; export ORACLE_HOME JAVA_HOME=/usr/bin/java; export JAVA_HOME PATH=$ORACLE_HOME/bin:$JAVA_HOME/bin:$PATH:. export PATH [oracle@rac1 ~]$ chmod 775 .grid.env [oracle@rac1 ~]$ . .grid.env [oracle@rac1 ~]$ env|grep ORA ORACLE_BASE=/u01/grid ORACLE_HOME=/u01/app/grid/26ai/grid_1 ORACLE_SID=+ASM1 [oracle@rac1 ~]$ For Database Home: [oracle@rac1 ~]$ vi .db_env [oracle@rac1 ~]$ cat .db_env # Environment variables for Database - DB Home ORACLE_SID=raccdb1; export ORACLE_SID ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE ORACLE_HOME=/u01/app/oracle/26ai/db_1; export ORACLE_HOME JAVA_HOME=/usr/bin/java; export JAVA_HOME PATH=$ORACLE_HOME/bin:$JAVA_HOME/bin:$PATH:. export PATH [oracle@rac1 ~]$ chmod 775 .db_env [oracle@rac1 ~]$ . .db_env [oracle@rac1 ~]$ env|grep ORA ORACLE_BASE=/u01/app/oracle ORACLE_HOME=/u01/app/oracle/26ai/db_1 ORACLE_SID=raccdb1 [oracle@rac1 ~]$
In the machine setting, go to Network Section. Check the box "Enable Network Adapater", in "Attached To" select "Internal Network" and last give the name "Pubnet (Public Network)". Leave the rest things as default and click OK.
Similarly add for the "Privnet (Private Network)".
Now we can view the attached Network Cards. You can see the one extra Network Card, which was added during machine creation for Internet.
9. Now start the machine and confgiure the IPs by following below steps.
Inside the machine, go to Setting --> Network. Click on the setting icon for first Ethernet.
Now in IPv4 section, select "IPv4 Method" as "Manual". Then provide the "Address", "Netmask" and "Gateway" details. Last click OK. We are using this as for Public Network. Please note these details are as per my setup and you can have different as per your setup.
Similarly edit the configuration for Private Network.
Now enable the radio button and connect all the Networks.
Now verify all the IPs.
10. Now we will clone this machine and prepare the 2nd Node. So shutdown this machine and follow below steps.[root@rac1 ~]# ifconfig enp0s3: flags=4163mtu 1500 inet 192.168.80.11 netmask 255.255.255.0 broadcast 192.168.80.255 inet6 fe80::a00:27ff:fe25:7f8b prefixlen 64 scopeid 0x20 ether 08:00:27:25:7f:8b txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 124 bytes 19407 (18.9 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 enp0s8: flags=4163 mtu 1500 inet 192.168.10.11 netmask 255.255.255.0 broadcast 192.168.10.255 inet6 fe80::cc06:984:1b8f:e25c prefixlen 64 scopeid 0x20 ether 08:00:27:e5:5b:12 txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 57 bytes 8210 (8.0 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 enp0s9: flags=4163 mtu 1500 inet 192.168.1.41 netmask 255.255.255.0 broadcast 192.168.1.255 inet6 fe80::3449:ab9d:607e:c035 prefixlen 64 scopeid 0x20 ether 08:00:27:39:00:c7 txqueuelen 1000 (Ethernet) RX packets 522 bytes 54201 (52.9 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 327 bytes 36148 (35.3 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73 mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10 loop txqueuelen 1000 (Local Loopback) RX packets 317 bytes 20992 (20.5 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 317 bytes 20992 (20.5 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [root@rac1 ~]#
Right click on Machine and click Clone.
Provide the machine name as "rac2" and select its location. Leave the rest as default and click Finish.
Monitor the progress.
Once completed, you can view the new machine.
11. Now start the 2nd machine and change its Hostname & IPs, and also edit the environment files with "oracle" user. You can refer the steps 5,6 & 8. Post that verify all the details.
12. Now our both nodes has been configured for installation, so let's keep running both the machines and check the connectivity between them for Public & Private networks.[root@rac2 ~]# hostname rac2.oraeasy.com [root@rac2 ~]# [root@rac2 ~]# ifconfig enp0s3: flags=4163mtu 1500 inet 192.168.80.12 netmask 255.255.255.0 broadcast 192.168.80.255 inet6 fe80::a00:27ff:fe9b:a7ae prefixlen 64 scopeid 0x20 ether 08:00:27:9b:a7:ae txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 59 bytes 6064 (5.9 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 enp0s8: flags=4163 mtu 1500 inet 192.168.10.12 netmask 255.255.255.0 broadcast 192.168.10.255 inet6 fe80::cc06:984:1b8f:e25c prefixlen 64 scopeid 0x20 ether 08:00:27:78:db:95 txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 59 bytes 6064 (5.9 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 enp0s9: flags=4163 mtu 1500 inet 192.168.1.42 netmask 255.255.255.0 broadcast 192.168.1.255 inet6 fe80::3449:ab9d:607e:c035 prefixlen 64 scopeid 0x20 ether 08:00:27:06:30:39 txqueuelen 1000 (Ethernet) RX packets 4852 bytes 490496 (479.0 KiB) RX errors 3 dropped 0 overruns 0 frame 3 TX packets 471 bytes 48984 (47.8 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73 mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10 loop txqueuelen 1000 (Local Loopback) RX packets 419 bytes 26218 (25.6 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 419 bytes 26218 (25.6 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [root@rac2 ~]# [root@rac2 ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 # Public 192.168.80.11 rac1.oraeasy.com rac1 192.168.80.12 rac2.oraeasy.com rac2 # Virtual 192.168.80.21 rac1-vip.oraeasy.com rac1-vip 192.168.80.22 rac2-vip.oraeasy.com rac2-vip # SCAN 192.168.80.31 rac-scan.oraeasy.com rac-scan 192.168.80.32 rac-scan.oraeasy.com rac-scan 192.168.80.33 rac-scan.oraeasy.com rac-scan # Private 192.168.10.11 rac1-priv.oraeasy.com rac1-priv 192.168.10.12 rac2-priv.oraeasy.com rac2-priv [root@rac2 ~]# For Grid Home: [oracle@rac2 ~]$ vi .grid.env [oracle@rac2 ~]$ cat .grid.env # Environment variables for ASM - Grid Home ORACLE_SID=+ASM2; export ORACLE_SID ORACLE_BASE=/u01/grid; export ORACLE_BASE ORACLE_HOME=/u01/app/grid/26ai/grid_1; export ORACLE_HOME JAVA_HOME=/usr/bin/java; export JAVA_HOME PATH=$ORACLE_HOME/bin:$JAVA_HOME/bin:$PATH:. export PATH [oracle@rac2 ~]$ [oracle@rac2 ~]$ . .grid.env [oracle@rac2 ~]$ [oracle@rac2 ~]$ env|grep ORA ORACLE_BASE=/u01/grid ORACLE_HOME=/u01/app/grid/26ai/grid_1 ORACLE_SID=+ASM2 For Database Home: [oracle@rac2 ~]$ vi .db_env [oracle@rac2 ~]$ cat .db_env # Environment variables for Database - DB Home ORACLE_SID=raccdb2; export ORACLE_SID ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE ORACLE_HOME=/u01/app/oracle/26ai/db_1; export ORACLE_HOME JAVA_HOME=/usr/bin/java; export JAVA_HOME PATH=$ORACLE_HOME/bin:$JAVA_HOME/bin:$PATH:. export PATH [oracle@rac2 ~]$ [oracle@rac2 ~]$ . .db_env [oracle@rac2 ~]$ env|grep ORA ORACLE_BASE=/u01/app/oracle ORACLE_HOME=/u01/app/oracle/26ai/db_1 ORACLE_SID=raccdb2 [oracle@rac2 ~]$
From Node 1 to Node 2: [root@rac1 ~]# ping rac2 -c 3 PING rac2.oraeasy.com (192.168.80.12) 56(84) bytes of data. 64 bytes from rac2.oraeasy.com (192.168.80.12): icmp_seq=1 ttl=64 time=0.744 ms 64 bytes from rac2.oraeasy.com (192.168.80.12): icmp_seq=2 ttl=64 time=1.07 ms 64 bytes from rac2.oraeasy.com (192.168.80.12): icmp_seq=3 ttl=64 time=0.485 ms --- rac2.oraeasy.com ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2035ms rtt min/avg/max/mdev = 0.485/0.766/1.070/0.239 ms [root@rac1 ~]# [root@rac1 ~]# [root@rac1 ~]# ping rac2-priv -c 3 PING rac2-priv.oraeasy.com (192.168.10.12) 56(84) bytes of data. 64 bytes from rac2-priv.oraeasy.com (192.168.10.12): icmp_seq=1 ttl=64 time=0.643 ms 64 bytes from rac2-priv.oraeasy.com (192.168.10.12): icmp_seq=2 ttl=64 time=0.933 ms 64 bytes from rac2-priv.oraeasy.com (192.168.10.12): icmp_seq=3 ttl=64 time=1.15 ms --- rac2-priv.oraeasy.com ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2065ms rtt min/avg/max/mdev = 0.643/0.908/1.150/0.207 ms [root@rac1 ~]# From Node 2 to Node 1: [root@rac2 ~]# ping rac1 -c 3 PING rac1.oraeasy.com (192.168.80.11) 56(84) bytes of data. 64 bytes from rac1.oraeasy.com (192.168.80.11): icmp_seq=1 ttl=64 time=0.586 ms 64 bytes from rac1.oraeasy.com (192.168.80.11): icmp_seq=2 ttl=64 time=1.10 ms 64 bytes from rac1.oraeasy.com (192.168.80.11): icmp_seq=3 ttl=64 time=1.04 ms --- rac1.oraeasy.com ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2144ms rtt min/avg/max/mdev = 0.586/0.909/1.104/0.230 ms [root@rac2 ~]# [root@rac2 ~]# ping rac1-priv -c 3 PING rac1-priv.oraeasy.com (192.168.10.11) 56(84) bytes of data. 64 bytes from rac1-priv.oraeasy.com (192.168.10.11): icmp_seq=1 ttl=64 time=0.792 ms 64 bytes from rac1-priv.oraeasy.com (192.168.10.11): icmp_seq=2 ttl=64 time=0.913 ms 64 bytes from rac1-priv.oraeasy.com (192.168.10.11): icmp_seq=3 ttl=64 time=0.980 ms --- rac1-priv.oraeasy.com ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2271ms rtt min/avg/max/mdev = 0.792/0.895/0.980/0.077 ms [root@rac2 ~]# [root@rac2 ~]#
==> Now our both nodes have been prepared for further installation, so let's move forward for next phase.
ASM Disks configurations:
1. Now we need to add a raw disk for ASM disks to machine.
View the current attached hard disk on Node 1.
2. Now shutdown both the machines and follow below steps.[root@rac1 ~]# fdisk -l Disk /dev/sda: 80 GiB, 85899345920 bytes, 167772160 sectors Disk model: VBOX HARDDISK Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x4aa653ae Device Boot Start End Sectors Size Id Type /dev/sda1 * 2048 2099199 2097152 1G 83 Linux /dev/sda2 2099200 33556479 31457280 15G 83 Linux /dev/sda3 33556480 44042239 10485760 5G 82 Linux swap / Solaris /dev/sda4 44042240 167772159 123729920 59G f W95 Ext'd (LBA) /dev/sda5 44044288 54530047 10485760 5G 83 Linux /dev/sda6 54532096 167772159 113240064 54G 83 Linux [root@rac1 ~]#
In left panel, click on Media icon. Then in Hard disk section, click on Create.
Now Provide disk name & size, select the Hard disk type: VDI, and select Pre-Allocate, as it will be used as ASM storage. Click Finish.
Monitor the Progess.
Once completed, Hard disk can be viewed. Now make its Type from Normal to Shareable. Then click Apply.
Now select the 1st machine and then click on Storage. In controller SATA section, click on Add Hard disk.
Select the disk name and click Choose.
Last click OK.
Do similar steps for Node 2.
Now in Storage, you can see the added hard disk.
3. Now start both the machines and view the new attached hard disk.
4. Now we need to make the partition for new hard disk. So let's procced for this on Node 1.Node 1: [root@rac1 ~]# fdisk -l Disk /dev/sdb: 80 GiB, 85899345920 bytes, 167772160 sectors Disk model: VBOX HARDDISK Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk /dev/sda: 80 GiB, 85899345920 bytes, 167772160 sectors Disk model: VBOX HARDDISK Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x4aa653ae Device Boot Start End Sectors Size Id Type /dev/sda1 * 2048 2099199 2097152 1G 83 Linux /dev/sda2 2099200 33556479 31457280 15G 83 Linux /dev/sda3 33556480 44042239 10485760 5G 82 Linux swap / Solaris /dev/sda4 44042240 167772159 123729920 59G f W95 Ext'd (LBA) /dev/sda5 44044288 54530047 10485760 5G 83 Linux /dev/sda6 54532096 167772159 113240064 54G 83 Linux [root@rac1 ~]# Node 2: [root@rac2 ~]# fdisk -l Disk /dev/sdb: 80 GiB, 85899345920 bytes, 167772160 sectors Disk model: VBOX HARDDISK Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk /dev/sda: 80 GiB, 85899345920 bytes, 167772160 sectors Disk model: VBOX HARDDISK Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x4aa653ae Device Boot Start End Sectors Size Id Type /dev/sda1 * 2048 2099199 2097152 1G 83 Linux /dev/sda2 2099200 33556479 31457280 15G 83 Linux /dev/sda3 33556480 44042239 10485760 5G 82 Linux swap / Solaris /dev/sda4 44042240 167772159 123729920 59G f W95 Ext'd (LBA) /dev/sda5 44044288 54530047 10485760 5G 83 Linux /dev/sda6 54532096 167772159 113240064 54G 83 Linux [root@rac2 ~]#
[root@rac1 ~]# fdisk /dev/sdb Welcome to fdisk (util-linux 2.37.4). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not contain a recognized partition table. Created a new DOS disklabel with disk identifier 0x666322ba. Command (m for help): n --> Press "n" for new partition: Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): --> Press Enter for default. Using default response p. Partition number (1-4, default 1): --> Press Enter for default: --> Provide size: First sector (2048-167772159, default 2048): Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-167772159, default 167772159): +45G Created a new partition 1 of type 'Linux' and of size 45 GiB. --> Do same for next two partition: Command (m for help): n Partition type p primary (1 primary, 0 extended, 3 free) e extended (container for logical partitions) Select (default p): Using default response p. Partition number (2-4, default 2): First sector (94373888-167772159, default 94373888): Last sector, +/-sectors or +/-size{K,M,G,T,P} (94373888-167772159, default 167772159): +25G Created a new partition 2 of type 'Linux' and of size 25 GiB. Command (m for help): n Partition type p primary (2 primary, 0 extended, 2 free) e extended (container for logical partitions) Select (default p): Using default response p. Partition number (3,4, default 3): First sector (146802688-167772159, default 146802688): Last sector, +/-sectors or +/-size{K,M,G,T,P} (146802688-167772159, default 167772159): Created a new partition 3 of type 'Linux' and of size 10 GiB. Command (m for help): w --> Press "w" to save the changes: The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks. View the partitions: Node 1: [root@rac1 ~]# fdisk -l Disk /dev/sdb: 80 GiB, 85899345920 bytes, 167772160 sectors Disk model: VBOX HARDDISK Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x666322ba Device Boot Start End Sectors Size Id Type /dev/sdb1 2048 94373887 94371840 45G 83 Linux /dev/sdb2 94373888 146802687 52428800 25G 83 Linux /dev/sdb3 146802688 167772159 20969472 10G 83 Linux Disk /dev/sda: 80 GiB, 85899345920 bytes, 167772160 sectors Disk model: VBOX HARDDISK Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x4aa653ae Device Boot Start End Sectors Size Id Type /dev/sda1 * 2048 2099199 2097152 1G 83 Linux /dev/sda2 2099200 33556479 31457280 15G 83 Linux /dev/sda3 33556480 44042239 10485760 5G 82 Linux swap / Solaris /dev/sda4 44042240 167772159 123729920 59G f W95 Ext'd (LBA) /dev/sda5 44044288 54530047 10485760 5G 83 Linux /dev/sda6 54532096 167772159 113240064 54G 83 Linux [root@rac1 ~]# Node 2: [root@rac2 ~]# fdisk -l Disk /dev/sdb: 80 GiB, 85899345920 bytes, 167772160 sectors Disk model: VBOX HARDDISK Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x666322ba Device Boot Start End Sectors Size Id Type /dev/sdb1 2048 94373887 94371840 45G 83 Linux /dev/sdb2 94373888 146802687 52428800 25G 83 Linux /dev/sdb3 146802688 167772159 20969472 10G 83 Linux Disk /dev/sda: 80 GiB, 85899345920 bytes, 167772160 sectors Disk model: VBOX HARDDISK Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x4aa653ae Device Boot Start End Sectors Size Id Type /dev/sda1 * 2048 2099199 2097152 1G 83 Linux /dev/sda2 2099200 33556479 31457280 15G 83 Linux /dev/sda3 33556480 44042239 10485760 5G 82 Linux swap / Solaris /dev/sda4 44042240 167772159 123729920 59G f W95 Ext'd (LBA) /dev/sda5 44044288 54530047 10485760 5G 83 Linux /dev/sda6 54532096 167772159 113240064 54G 83 Linux [root@rac2 ~]#
==> Now we will configure ASM disks. For this we will use udev (Userspace Device or Userpace /dev)
UDEV: It is the Linux device manager used to manage hardware devices dynamically. In Oracle RAC, it helps create persistent permissions and device mappings for ASM disks under /dev. Using udev, it ensures disks keep the same ownership and access settings even after reboot. On OL8/OL9, udev is commonly preferred over ASMLib because it is built into Linux and easier to maintain.
5. Now we need to fetch ID_SERIAL or PART_ENTRY_UUID of our newly created partitions. Then we will use one of them in configuration whichever is unique in all.
[root@rac1 ~]# udevadm info --query=all --name=/dev/sdb1 | grep ID_SERIAL E: ID_SERIAL=VBOX_HARDDISK_VB016a3ff1-5d1e937c E: ID_SERIAL_SHORT=VB016a3ff1-5d1e937c [root@rac1 ~]# [root@rac1 ~]# udevadm info --query=all --name=/dev/sdb2 | grep ID_SERIAL E: ID_SERIAL=VBOX_HARDDISK_VB016a3ff1-5d1e937c E: ID_SERIAL_SHORT=VB016a3ff1-5d1e937c [root@rac1 ~]# [root@rac1 ~]# udevadm info --query=all --name=/dev/sdb3 | grep ID_SERIAL E: ID_SERIAL=VBOX_HARDDISK_VB016a3ff1-5d1e937c E: ID_SERIAL_SHORT=VB016a3ff1-5d1e937c [root@rac1 ~]# [root@rac1 ~]# [root@rac1 ~]# udevadm info --query=all --name=/dev/sdb1 | grep PART_ENTRY_UUID E: ID_PART_ENTRY_UUID=666322ba-01 [root@rac1 ~]# [root@rac1 ~]# udevadm info --query=all --name=/dev/sdb2 | grep PART_ENTRY_UUID E: ID_PART_ENTRY_UUID=666322ba-02 [root@rac1 ~]# [root@rac1 ~]# udevadm info --query=all --name=/dev/sdb3 | grep PART_ENTRY_UUID E: ID_PART_ENTRY_UUID=666322ba-03 [root@rac1 ~]#
==> As per above output PART_ENTRY_UUID value is unique so will use that in configuration.
6. Now create custom udev rules file used to define persistent ASM disk permissions and ownership for Oracle ASM environments.
7. Now transfer this file to Node 2 and verify.[root@rac1 ~]# vi /etc/udev/rules.d/99-oracle-asm.rules [root@rac1 ~]# cat /etc/udev/rules.d/99-oracle-asm.rules KERNEL=="sd*", ENV{ID_PART_ENTRY_UUID}=="666322ba-01", SYMLINK+="asm-data1", OWNER="oracle", GROUP="asmdba", MODE="0660" KERNEL=="sd*", ENV{ID_PART_ENTRY_UUID}=="666322ba-02", SYMLINK+="asm-fra1", OWNER="oracle", GROUP="asmdba", MODE="0660" KERNEL=="sd*", ENV{ID_PART_ENTRY_UUID}=="666322ba-03", SYMLINK+="asm-crs1", OWNER="oracle", GROUP="asmdba", MODE="0660"
8. Now need to enable the rules for ASM disks. Run this on both Nodes.[root@rac1 ~]# scp /etc/udev/rules.d/99-oracle-asm.rules root@rac2:/etc/udev/rules.d/ The authenticity of host 'rac2 (192.168.80.12)' can't be established. ED25519 key fingerprint is SHA256:2CH2fx4xpcQBVTKO/W+6utc3T81pa7JcFmKngApPvDs. This key is not known by any other names Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added 'rac2' (ED25519) to the list of known hosts. root@rac2's password: 99-oracle-asm.rules 100% 354 156.3KB/s 00:00 [root@rac1 ~]# Node 2: [root@rac2 ~]# cat /etc/udev/rules.d/99-oracle-asm.rules KERNEL=="sd*", ENV{ID_PART_ENTRY_UUID}=="666322ba-01", SYMLINK+="asm-data1", OWNER="oracle", GROUP="asmdba", MODE="0660" KERNEL=="sd*", ENV{ID_PART_ENTRY_UUID}=="666322ba-02", SYMLINK+="asm-fra1", OWNER="oracle", GROUP="asmdba", MODE="0660" KERNEL=="sd*", ENV{ID_PART_ENTRY_UUID}=="666322ba-03", SYMLINK+="asm-crs1", OWNER="oracle", GROUP="asmdba", MODE="0660" [root@rac2 ~]#
Node 1: [root@rac1 ~]# ls -l /dev/asm-* ls: cannot access '/dev/asm-*': No such file or directory [root@rac1 ~]# udevadm control --reload-rules [root@rac1 ~]# [root@rac1 ~]# udevadm trigger [root@rac1 ~]# [root@rac1 ~]# ls -l /dev/asm-* lrwxrwxrwx. 1 root root 4 May 4 21:35 /dev/asm-crs1 -> sdb3 lrwxrwxrwx. 1 root root 4 May 4 21:35 /dev/asm-data1 -> sdb1 lrwxrwxrwx. 1 root root 4 May 4 21:35 /dev/asm-fra1 -> sdb2 [root@rac1 ~]# [root@rac1 ~]# ls -l /dev/sdb1 /dev/sdb2 /dev/sdb3 brw-rw----. 1 oracle asmdba 8, 17 May 4 21:35 /dev/sdb1 brw-rw----. 1 oracle asmdba 8, 18 May 4 21:35 /dev/sdb2 brw-rw----. 1 oracle asmdba 8, 19 May 4 21:35 /dev/sdb3 Node 2: [root@rac2 ~]# udevadm control --reload-rules [root@rac2 ~]# [root@rac2 ~]# udevadm trigger [root@rac2 ~]# [root@rac2 ~]# ls -l /dev/asm-* lrwxrwxrwx. 1 root root 4 May 4 21:36 /dev/asm-crs1 -> sdb3 lrwxrwxrwx. 1 root root 4 May 4 21:36 /dev/asm-data1 -> sdb1 lrwxrwxrwx. 1 root root 4 May 4 21:36 /dev/asm-fra1 -> sdb2 [root@rac2 ~]# [root@rac2 ~]# ls -l /dev/sdb1 /dev/sdb2 /dev/sdb3 brw-rw----. 1 oracle asmdba 8, 17 May 4 21:36 /dev/sdb1 brw-rw----. 1 oracle asmdba 8, 18 May 4 21:36 /dev/sdb2 brw-rw----. 1 oracle asmdba 8, 19 May 4 21:36 /dev/sdb3 [root@rac2 ~]#
==> Now ASM disks configuration has been completed, so let's move forward for next phase.
Oracle Cluster Verification Utility (CVU) Validation:
We need to run runcluvfy.pl script which will be in Grid Home software. It is the Oracle Cluster Verification Utility (CVU) script used to validate Oracle RAC environment readiness. Prior to run this script , we need to configure the password less connectivity between nodes. So let's proceed for that.
1. First generate an RSA 2048-bit SSH key pair using the ssh-keygen command.
2. Now on Node 1 place and unzip the Grid Home software.Node 1: [oracle@rac1 scripts]$ rm -f ~/.ssh/id_rsa* [oracle@rac1 scripts]$ ssh-keygen -t rsa -b 2048 -N "" -f ~/.ssh/id_rsa Generating public/private rsa key pair. Your identification has been saved in /home/oracle/.ssh/id_rsa Your public key has been saved in /home/oracle/.ssh/id_rsa.pub The key fingerprint is: SHA256:Yc40248z+X3eTRk/WLgTsu/KHrtS1SxoTQkbm8VUcPs oracle@rac1.oraeasy.com The key's randomart image is: +---[RSA 2048]----+ | o+++o | | *+. .| | = ++ o. | | = = o +.o.| | S o..o.oE| | =o = +| | *o.+ oo| | ..++...=| | o*=o.o+| +----[SHA256]-----+ [oracle@rac1 scripts]$ Node 2: [oracle@rac2 ~]$ rm -f ~/.ssh/id_rsa* [oracle@rac2 ~]$ ssh-keygen -t rsa -b 2048 -N "" -f ~/.ssh/id_rsa Generating public/private rsa key pair. Your identification has been saved in /home/oracle/.ssh/id_rsa Your public key has been saved in /home/oracle/.ssh/id_rsa.pub The key fingerprint is: SHA256:bI06DzYzwSKee70ksdJ8wPfuKV1vKpVaYvhoOm+vWdQ oracle@rac2.oraeasy.com The key's randomart image is: +---[RSA 2048]----+ | | | | | | | . . . + | | . = +.S E. | | . = *.*o = | | + =.@=o* . | | oo=*@=. o | | ...*=**..o | +----[SHA256]-----+ [oracle@rac2 ~]$
3. Now run sshUserSetup.sh script to configure the password less connectivity.[oracle@rac1 software]$ pwd /home/oracle/software [oracle@rac1 software]$ ls -lrth LINUX.X64_2326100_grid_home.zip -rw-r--r--. 1 oracle oinstall 1.1G May 4 21:43 LINUX.X64_2326100_grid_home.zip [oracle@rac1 software]$ unzip LINUX.X64_2326100_grid_home.zip -d /u01/app/grid/26ai/grid_1
Syntax: ./sshUserSetup.sh -user "username" -hosts "node1 node2" -noPromptPassphrase -confirm -advanced
4. Now verify the password less connectivity.[oracle@rac1 ~]$ env|grep ORA ORACLE_BASE=/u01/grid ORACLE_HOME=/u01/app/grid/26ai/grid_1 ORACLE_SID=+ASM1 [oracle@rac1 ~]$ ll $ORACLE_HOME/oui/prov/resources/scripts/sshUserSetup.sh -rwxr-x---. 1 oracle oinstall 33333 Jan 7 2015 /u01/app/grid/26ai/grid_1/oui/prov/resources/scripts/sshUserSetup.sh [oracle@rac1 ~]$ [oracle@rac1 ~]$ cd $ORACLE_HOME/oui/prov/resources/scripts [oracle@rac1 scripts]$ ./sshUserSetup.sh -user oracle -hosts "rac1 rac2" -noPromptPassphrase -confirm -advanced The output of this script is also logged into /tmp/sshUserSetup_2026-05-05-20-04-28.log Hosts are rac1 rac2 user is oracle Platform:- Linux Checking if the remote hosts are reachable PING rac1.oraeasy.com (192.168.80.11) 56(84) bytes of data. 64 bytes from rac1.oraeasy.com (192.168.80.11): icmp_seq=1 ttl=64 time=0.022 ms 64 bytes from rac1.oraeasy.com (192.168.80.11): icmp_seq=2 ttl=64 time=0.070 ms 64 bytes from rac1.oraeasy.com (192.168.80.11): icmp_seq=3 ttl=64 time=0.067 ms 64 bytes from rac1.oraeasy.com (192.168.80.11): icmp_seq=4 ttl=64 time=0.062 ms 64 bytes from rac1.oraeasy.com (192.168.80.11): icmp_seq=5 ttl=64 time=0.058 ms --- rac1.oraeasy.com ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4103ms rtt min/avg/max/mdev = 0.022/0.055/0.070/0.017 ms PING rac2.oraeasy.com (192.168.80.12) 56(84) bytes of data. 64 bytes from rac2.oraeasy.com (192.168.80.12): icmp_seq=1 ttl=64 time=0.549 ms 64 bytes from rac2.oraeasy.com (192.168.80.12): icmp_seq=2 ttl=64 time=1.54 ms 64 bytes from rac2.oraeasy.com (192.168.80.12): icmp_seq=3 ttl=64 time=1.08 ms 64 bytes from rac2.oraeasy.com (192.168.80.12): icmp_seq=4 ttl=64 time=1.42 ms 64 bytes from rac2.oraeasy.com (192.168.80.12): icmp_seq=5 ttl=64 time=1.42 ms --- rac2.oraeasy.com ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4157ms rtt min/avg/max/mdev = 0.549/1.202/1.540/0.360 ms Remote host reachability check succeeded. The following hosts are reachable: rac1 rac2. The following hosts are not reachable: . All hosts are reachable. Proceeding further... firsthost rac1 numhosts 2 The script will setup SSH connectivity from the host rac1.oraeasy.com to all the remote hosts. After the script is executed, the user can use SSH to run commands on the remote hosts or copy files between this host rac1.oraeasy.com and the remote hosts without being prompted for passwords or confirmations. NOTE 1: As part of the setup procedure, this script will use ssh and scp to copy files between the local host and the remote hosts. Since the script does not store passwords, you may be prompted for the passwords during the execution of the script whenever ssh or scp is invoked. NOTE 2: AS PER SSH REQUIREMENTS, THIS SCRIPT WILL SECURE THE USER HOME DIRECTORY AND THE .ssh DIRECTORY BY REVOKING GROUP AND WORLD WRITE PRIVILEGES TO THESE directories. Do you want to continue and let the script make the above mentioned changes (yes/no)? Confirmation provided on the command line The user chose yes User chose to skip passphrase related questions. Creating .ssh directory on local host, if not present already Creating authorized_keys file on local host Changing permissions on authorized_keys to 644 on local host Creating known_hosts file on local host Changing permissions on known_hosts to 644 on local host Creating config file on local host If a config file exists already at /home/oracle/.ssh/config, it would be backed up to /home/oracle/.ssh/config.backup. Creating .ssh directory and setting permissions on remote host rac1 THE SCRIPT WOULD ALSO BE REVOKING WRITE PERMISSIONS FOR group AND others ON THE HOME DIRECTORY FOR oracle. THIS IS AN SSH REQUIREMENT. The script would create ~oracle/.ssh/config file on remote host rac1. If a config file exists already at ~oracle/.ssh/config, it would be backed up to ~oracle/.ssh/config.backup. The user may be prompted for a password here since the script would be running SSH on host rac1. Warning: Permanently added 'rac1' (ED25519) to the list of known hosts. oracle@rac1's password: Done with creating .ssh directory and setting permissions on remote host rac1. Creating .ssh directory and setting permissions on remote host rac2 THE SCRIPT WOULD ALSO BE REVOKING WRITE PERMISSIONS FOR group AND others ON THE HOME DIRECTORY FOR oracle. THIS IS AN SSH REQUIREMENT. The script would create ~oracle/.ssh/config file on remote host rac2. If a config file exists already at ~oracle/.ssh/config, it would be backed up to ~oracle/.ssh/config.backup. The user may be prompted for a password here since the script would be running SSH on host rac2. Warning: Permanently added 'rac2' (ED25519) to the list of known hosts. oracle@rac2's password: Done with creating .ssh directory and setting permissions on remote host rac2. Copying local host public key to the remote host rac1 The user may be prompted for a password or passphrase here since the script would be using SCP for host rac1. oracle@rac1's password: Done copying local host public key to the remote host rac1 Copying local host public key to the remote host rac2 The user may be prompted for a password or passphrase here since the script would be using SCP for host rac2. oracle@rac2's password: Done copying local host public key to the remote host rac2 Creating keys on remote host rac1 if they do not exist already. This is required to setup SSH on host rac1. Creating keys on remote host rac2 if they do not exist already. This is required to setup SSH on host rac2. Updating authorized_keys file on remote host rac1 Updating known_hosts file on remote host rac1 Updating authorized_keys file on remote host rac2 Updating known_hosts file on remote host rac2 cat: /home/oracle/.ssh/known_hosts.tmp: No such file or directory cat: /home/oracle/.ssh/authorized_keys.tmp: No such file or directory SSH setup is complete. ------------------------------------------------------------------------ Verifying SSH setup =================== The script will now run the date command on the remote nodes using ssh to verify if ssh is setup correctly. IF THE SETUP IS CORRECTLY SETUP, THERE SHOULD BE NO OUTPUT OTHER THAN THE DATE AND SSH SHOULD NOT ASK FOR PASSWORDS. If you see any output other than date or are prompted for the password, ssh is not setup correctly and you will need to resolve the issue and set up ssh again. The possible causes for failure could be: 1. The server settings in /etc/ssh/sshd_config file do not allow ssh for user oracle. 2. The server may have disabled public key based authentication. 3. The client public key on the server may be outdated. 4. ~oracle or ~oracle/.ssh on the remote host may not be owned by oracle. 5. User may not have passed -shared option for shared remote users or may be passing the -shared option for non-shared remote users. 6. If there is output in addition to the date, but no password is asked, it may be a security alert shown as part of company policy. Append the additional text to the/sysman/prov/resources/ignoreMessages.txt file. ------------------------------------------------------------------------ --rac1:-- Running /usr/bin/ssh -x -l oracle rac1 date to verify SSH connectivity has been setup from local host to rac1. IF YOU SEE ANY OTHER OUTPUT BESIDES THE OUTPUT OF THE DATE COMMAND OR IF YOU ARE PROMPTED FOR A PASSWORD HERE, IT MEANS SSH SETUP HAS NOT BEEN SUCCESSFUL. Please note that being prompted for a passphrase may be OK but being prompted for a password is ERROR. Tue May 5 08:05:01 PM IST 2026 ------------------------------------------------------------------------ --rac2:-- Running /usr/bin/ssh -x -l oracle rac2 date to verify SSH connectivity has been setup from local host to rac2. IF YOU SEE ANY OTHER OUTPUT BESIDES THE OUTPUT OF THE DATE COMMAND OR IF YOU ARE PROMPTED FOR A PASSWORD HERE, IT MEANS SSH SETUP HAS NOT BEEN SUCCESSFUL. Please note that being prompted for a passphrase may be OK but being prompted for a password is ERROR. Tue May 5 08:05:02 PM IST 2026 ------------------------------------------------------------------------ ------------------------------------------------------------------------ Verifying SSH connectivity has been setup from rac1 to rac1 IF YOU SEE ANY OTHER OUTPUT BESIDES THE OUTPUT OF THE DATE COMMAND OR IF YOU ARE PROMPTED FOR A PASSWORD HERE, IT MEANS SSH SETUP HAS NOT BEEN SUCCESSFUL. Tue May 5 08:05:03 PM IST 2026 ------------------------------------------------------------------------ ------------------------------------------------------------------------ Verifying SSH connectivity has been setup from rac1 to rac2 IF YOU SEE ANY OTHER OUTPUT BESIDES THE OUTPUT OF THE DATE COMMAND OR IF YOU ARE PROMPTED FOR A PASSWORD HERE, IT MEANS SSH SETUP HAS NOT BEEN SUCCESSFUL. Tue May 5 08:05:04 PM IST 2026 ------------------------------------------------------------------------ -Verification from complete- SSH verification complete. [oracle@rac1 scripts]$
5. Now run the runcluvfy.pl script.Node 1: [oracle@rac1 scripts]$ ssh rac2 Last login: Tue May 5 20:03:46 2026 from 192.168.1.36 [oracle@rac2 ~]$ Node 2: [oracle@rac2 ~]$ ssh rac1 Last login: Tue May 5 18:09:14 2026 from 192.168.1.36 [oracle@rac1 ~]$
[oracle@rac1 ~]$ . .grid.env [oracle@rac1 ~]$ [oracle@rac1 ~]$ env|grep ORA ORACLE_BASE=/u01/grid ORACLE_HOME=/u01/app/grid/26ai/grid_1 ORACLE_SID=+ASM1 [oracle@rac1 ~]$ cd $ORACLE_HOME/bin [oracle@rac1 bin]$ ./runcluvfy.pl stage -pre crsinst -n rac1,rac2 -verbose -bash: ./runcluvfy.pl: Permission denied [oracle@rac1 bin]$ ll ./runcluvfy.pl -rw-r-----. 1 oracle oinstall 3181 Aug 24 2017 ./runcluvfy.pl [oracle@rac1 bin]$ chmod +x $ORACLE_HOME/bin/runcluvfy.pl [oracle@rac1 bin]$ [oracle@rac1 bin]$ ./runcluvfy.pl stage -pre crsinst -n rac1,rac2 -verbose Initializing ... Performing following verification checks ... Physical Memory ... Node Name Available Required Status ------------ ------------------------ ------------------------ ---------- rac2 4.3578GB (4569516.0KB) 8GB (8388608.0KB) failed rac1 4.3578GB (4569516.0KB) 8GB (8388608.0KB) failed Physical Memory ...FAILED (PRVF-7530) Available Physical Memory ... Node Name Available Required Status ------------ ------------------------ ------------------------ ---------- rac2 3.8115GB (3996652.0KB) 50MB (51200.0KB) passed rac1 2.6638GB (2793212.0KB) 50MB (51200.0KB) passed Available Physical Memory ...PASSED Swap Size ... Node Name Available Required Status ------------ ------------------------ ------------------------ ---------- rac2 5GB (5242876.0KB) 4.3578GB (4569516.0KB) passed rac1 5GB (5242876.0KB) 4.3578GB (4569516.0KB) passed Swap Size ...PASSED Free Space: rac2:/usr,rac2:/var,rac2:/etc,rac2:/sbin ... Path Node Name Mount point Available Required Status ---------------- ------------ ------------ ------------ ------------ ------------ /usr rac2 / 8.624GB 25MB passed /var rac2 / 8.624GB 5MB passed /etc rac2 / 8.624GB 25MB passed /sbin rac2 / 8.624GB 10MB passed rac1 passed exists(54321) .............. .............. .............. .............. Pre-check for cluster services setup was unsuccessful on all the nodes. Failures were encountered during execution of CVU verification request "stage -pre crsinst". Physical Memory ...FAILED rac2: PRVF-7530 : Sufficient physical memory is not available on node "rac2" [Required physical memory = 8GB (8388608.0KB)] rac1: PRVF-7530 : Sufficient physical memory is not available on node "rac1" [Required physical memory = 8GB (8388608.0KB)] Package: policycoreutils-3.5-1 ...FAILED rac2: PRVF-7533 : Proper version of package "policycoreutils" is not found on node "rac2" [Required = "policycoreutils-3.5-1" ; Found = "policycoreutils-3.4-4.el9"]. rac1: PRVF-7533 : Proper version of package "policycoreutils" is not found on node "rac1" [Required = "policycoreutils-3.5-1" ; Found = "policycoreutils-3.4-4.el9"]. Package: policycoreutils-python-utils-3.5-1 ...FAILED rac2: PRVF-7533 : Proper version of package "policycoreutils-python-utils" is not found on node "rac2" [Required = "policycoreutils-python-utils-3.5-1" ; Found = "policycoreutils-python-utils-3.4-4.el9"]. rac1: PRVF-7533 : Proper version of package "policycoreutils-python-utils" is not found on node "rac1" [Required = "policycoreutils-python-utils-3.5-1" ; Found = "policycoreutils-python-utils-3.4-4.el9"]. resolv.conf Integrity ...FAILED rac2: PRVG-10048 : Name "rac2" was not resolved to an address of the specified type by name servers "38.254.163.4". rac2: PRVG-10048 : Name "rac2" was not resolved to an address of the specified type by name servers "139.5.241.15". rac1: PRVG-10048 : Name "rac1" was not resolved to an address of the specified type by name servers "38.254.163.4". rac1: PRVG-10048 : Name "rac1" was not resolved to an address of the specified type by name servers "139.5.241.15". Daemon "avahi-daemon" not configured and running ...FAILED rac2: PRVG-1359 : Daemon process "avahi-daemon" is configured on node "rac2" rac2: PRVG-1360 : Daemon process "avahi-daemon" is running on node "rac2" rac1: PRVG-1359 : Daemon process "avahi-daemon" is configured on node "rac1" rac1: PRVG-1360 : Daemon process "avahi-daemon" is running on node "rac1" Refer to My Oracle Support notes "2625498.1" for more details regarding errors PRVG-1359". RPM Package Manager database ...INFORMATION PRVG-11250 : The check "RPM Package Manager database" was not performed because it needs 'root' user privileges. Refer to My Oracle Support notes "2548970.1" for more details regarding errors PRVG-11250". cgroup OS compatibility ...INFORMATION PRVG-11250 : The check "cgroup OS compatibility" was not performed because it needs 'root' user privileges. Refer to My Oracle Support notes "2548970.1" for more details regarding errors PRVG-11250". ORAchk health score ...INFORMATION PRVH-1507 : ORAchk/EXAchk checks are skipped. CVU operation performed: stage -pre crsinst Date: May 5, 2026, 8:25:41 PM CVU version: 23.26.1.0.0 (010926x8664) CVU home: /u01/app/grid/26ai/grid_1 User: oracle Operating system: Linux5.15.0-3.60.5.1.el9uek.x86_64 [oracle@rac1 bin]$
6. Now we have got some precheck failed. From above we can ignore the "Physical Memory" & "resolv.conf Integrity" as we are doing a test setup. So let's proceed to fix the other failures. Start with Node 1.
7. Repeat the same steps on Node 2 and verify.avahi-daemon: [root@rac1 ~]# systemctl status avahi-daemon ● avahi-daemon.service - Avahi mDNS/DNS-SD Stack Loaded: loaded (/usr/lib/systemd/system/avahi-daemon.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2026-05-05 17:59:11 IST; 3h 5min ago TriggeredBy: ● avahi-daemon.socket Main PID: 697 (avahi-daemon) Status: "avahi-daemon 0.8 starting up." Tasks: 2 (limit: 28166) Memory: 2.2M CPU: 435ms CGroup: /system.slice/avahi-daemon.service ├─697 "avahi-daemon: running [rac1.local]" └─720 "avahi-daemon: chroot helper" May 05 17:59:16 rac1.oraeasy.com avahi-daemon[697]: Registering new address record for fe80::a00:27ff:fe25:7f8b on enp0s3.*. May 05 17:59:16 rac1.oraeasy.com avahi-daemon[697]: Joining mDNS multicast group on interface enp0s8.IPv6 with address fe80::cc06:984:1b8f:e25c. May 05 17:59:16 rac1.oraeasy.com avahi-daemon[697]: New relevant interface enp0s8.IPv6 for mDNS. May 05 17:59:16 rac1.oraeasy.com avahi-daemon[697]: Registering new address record for fe80::cc06:984:1b8f:e25c on enp0s8.*. May 05 17:59:16 rac1.oraeasy.com avahi-daemon[697]: Joining mDNS multicast group on interface enp0s9.IPv6 with address fe80::3449:ab9d:607e:c035. May 05 17:59:16 rac1.oraeasy.com avahi-daemon[697]: New relevant interface enp0s9.IPv6 for mDNS. May 05 17:59:16 rac1.oraeasy.com avahi-daemon[697]: Registering new address record for fe80::3449:ab9d:607e:c035 on enp0s9.*. May 05 17:59:17 rac1.oraeasy.com avahi-daemon[697]: Joining mDNS multicast group on interface enp0s9.IPv4 with address 192.168.1.41. May 05 17:59:17 rac1.oraeasy.com avahi-daemon[697]: New relevant interface enp0s9.IPv4 for mDNS. May 05 17:59:17 rac1.oraeasy.com avahi-daemon[697]: Registering new address record for 192.168.1.41 on enp0s9.IPv4. [root@rac1 ~]# [root@rac1 ~]# systemctl stop avahi-daemon Warning: Stopping avahi-daemon.service, but it can still be activated by: avahi-daemon.socket [root@rac1 ~]# [root@rac1 ~]# systemctl disable avahi-daemon Removed "/etc/systemd/system/multi-user.target.wants/avahi-daemon.service". Removed "/etc/systemd/system/sockets.target.wants/avahi-daemon.socket". Removed "/etc/systemd/system/dbus-org.freedesktop.Avahi.service". [root@rac1 ~]# [root@rac1 ~]# systemctl status avahi-daemon ○ avahi-daemon.service - Avahi mDNS/DNS-SD Stack Loaded: loaded (/usr/lib/systemd/system/avahi-daemon.service; disabled; vendor preset: enabled) Active: inactive (dead) since Tue 2026-05-05 21:04:38 IST; 12s ago Duration: 3h 5min 27.297s TriggeredBy: ● avahi-daemon.socket Main PID: 697 (code=exited, status=0/SUCCESS) Status: "avahi-daemon 0.8 starting up." CPU: 448ms May 05 21:04:38 rac1.oraeasy.com systemd[1]: Stopping Avahi mDNS/DNS-SD Stack... May 05 21:04:38 rac1.oraeasy.com avahi-daemon[697]: Leaving mDNS multicast group on interface enp0s8.IPv6 with address fe80::cc06:984:1b8f:e25c. May 05 21:04:38 rac1.oraeasy.com avahi-daemon[697]: Leaving mDNS multicast group on interface enp0s8.IPv4 with address 192.168.10.11. May 05 21:04:38 rac1.oraeasy.com avahi-daemon[697]: Leaving mDNS multicast group on interface enp0s3.IPv6 with address fe80::a00:27ff:fe25:7f8b. May 05 21:04:38 rac1.oraeasy.com avahi-daemon[697]: Leaving mDNS multicast group on interface enp0s3.IPv4 with address 192.168.80.11. May 05 21:04:38 rac1.oraeasy.com avahi-daemon[697]: Leaving mDNS multicast group on interface lo.IPv6 with address ::1. May 05 21:04:38 rac1.oraeasy.com avahi-daemon[697]: Leaving mDNS multicast group on interface lo.IPv4 with address 127.0.0.1. May 05 21:04:38 rac1.oraeasy.com avahi-daemon[697]: avahi-daemon 0.8 exiting. May 05 21:04:38 rac1.oraeasy.com systemd[1]: avahi-daemon.service: Deactivated successfully. May 05 21:04:38 rac1.oraeasy.com systemd[1]: Stopped Avahi mDNS/DNS-SD Stack. [root@rac1 ~]# policycoreutils package: [root@rac1 ~]# dnf install -y policycoreutils policycoreutils-python-utils Last metadata expiration check: 2:02:11 ago on Tue 05 May 2026 07:04:31 PM IST. ...... ...... ...... Upgraded: libselinux-3.6-3.el9.x86_64 libselinux-utils-3.6-3.el9.x86_64 libsemanage-3.6-5.el9_6.x86_64 libsepol-3.6-3.el9.x86_64 policycoreutils-3.6-3.el9.x86_64 policycoreutils-devel-3.6-3.el9.x86_64 policycoreutils-python-utils-3.6-3.el9.noarch python3-libselinux-3.63.el9.x86_64 python3-libsemanage-3.6-5.el9_6.x86_64 python3-policycoreutils-3.6-3.el9.noarch Installed: python3-distro-1.5.0-7.el9.noarch Complete! [root@rac1 ~]# [root@rac1 ~]# rpm -qa|grep polic crypto-policies-20220815-1.git0fbe86f.el9.noarch checkpolicy-3.4-1.el9.x86_64 selinux-policy-34.1.43-1.0.1.el9.noarch selinux-policy-targeted-34.1.43-1.0.1.el9.noarch crypto-policies-scripts-20220815-1.git0fbe86f.el9.noarch selinux-policy-devel-34.1.43-1.0.1.el9.noarch policycoreutils-3.6-3.el9.x86_64 python3-policycoreutils-3.6-3.el9.noarch policycoreutils-python-utils-3.6-3.el9.noarch policycoreutils-devel-3.6-3.el9.x86_64 [root@rac1 ~]#
8. As we fixed the failures, so let's re-run the runcluvfy.pl script.avahi-daemon: [root@rac2 ~]# systemctl status avahi-daemon ○ avahi-daemon.service - Avahi mDNS/DNS-SD Stack Loaded: loaded (/usr/lib/systemd/system/avahi-daemon.service; disabled; vendor preset: enabled) Active: inactive (dead) since Tue 2026-05-05 21:06:21 IST; 10s ago Duration: 2h 5min 55.235s TriggeredBy: ● avahi-daemon.socket Main PID: 689 (code=exited, status=0/SUCCESS) Status: "avahi-daemon 0.8 starting up." CPU: 634ms May 05 21:06:21 rac2.oraeasy.com avahi-daemon[689]: Leaving mDNS multicast group on interface enp0s9.IPv4 with address 192.168.1.42. May 05 21:06:21 rac2.oraeasy.com avahi-daemon[689]: Leaving mDNS multicast group on interface enp0s8.IPv6 with address fe80::81c:acfb:97df:d0d. May 05 21:06:21 rac2.oraeasy.com avahi-daemon[689]: Leaving mDNS multicast group on interface enp0s8.IPv4 with address 192.168.10.12. May 05 21:06:21 rac2.oraeasy.com avahi-daemon[689]: Leaving mDNS multicast group on interface enp0s3.IPv6 with address fe80::a00:27ff:fe9b:a7ae. May 05 21:06:21 rac2.oraeasy.com avahi-daemon[689]: Leaving mDNS multicast group on interface enp0s3.IPv4 with address 192.168.80.12. May 05 21:06:21 rac2.oraeasy.com avahi-daemon[689]: Leaving mDNS multicast group on interface lo.IPv6 with address ::1. May 05 21:06:21 rac2.oraeasy.com avahi-daemon[689]: Leaving mDNS multicast group on interface lo.IPv4 with address 127.0.0.1. May 05 21:06:21 rac2.oraeasy.com avahi-daemon[689]: avahi-daemon 0.8 exiting. May 05 21:06:21 rac2.oraeasy.com systemd[1]: avahi-daemon.service: Deactivated successfully. May 05 21:06:21 rac2.oraeasy.com systemd[1]: Stopped Avahi mDNS/DNS-SD Stack. [root@rac2 ~]# policycoreutils package: [root@rac2 ~]# rpm -qa|grep polic crypto-policies-20220815-1.git0fbe86f.el9.noarch selinux-policy-34.1.43-1.0.1.el9.noarch selinux-policy-targeted-34.1.43-1.0.1.el9.noarch crypto-policies-scripts-20220815-1.git0fbe86f.el9.noarch policycoreutils-devel-3.4-4.el9.x86_64 selinux-policy-devel-34.1.43-1.0.1.el9.noarch policycoreutils-python-utils-3.6-3.el9.noarch policycoreutils-3.6-3.el9.x86_64 checkpolicy-3.6-1.el9.x86_64 python3-policycoreutils-3.6-3.el9.noarch [root@rac2 ~]#
[oracle@rac1 bin]$ ./runcluvfy.pl stage -pre crsinst -n rac1,rac2 -verbose Initializing ... Performing following verification checks ... Physical Memory ... Node Name Available Required Status ------------ ------------------------ ------------------------ ---------- rac2 4.3578GB (4569516.0KB) 8GB (8388608.0KB) failed rac1 4.3578GB (4569516.0KB) 8GB (8388608.0KB) failed Physical Memory ...FAILED (PRVF-7530) Available Physical Memory ... Node Name Available Required Status ------------ ------------------------ ------------------------ ---------- rac2 3.0613GB (3210048.0KB) 50MB (51200.0KB) passed rac1 2.6131GB (2740044.0KB) 50MB (51200.0KB) passed Available Physical Memory ...PASSED Swap Size ... Node Name Available Required Status ------------ ------------------------ ------------------------ ---------- rac2 5GB (5242876.0KB) 4.3578GB (4569516.0KB) passed rac1 5GB (5242876.0KB) 4.3578GB (4569516.0KB) passed Swap Size ...PASSED .............. .............. .............. .............. Pre-check for cluster services setup was unsuccessful on all the nodes. Failures were encountered during execution of CVU verification request "stage -pre crsinst". Physical Memory ...FAILED rac2: PRVF-7530 : Sufficient physical memory is not available on node "rac2" [Required physical memory = 8GB (8388608.0KB)] rac1: PRVF-7530 : Sufficient physical memory is not available on node "rac1" [Required physical memory = 8GB (8388608.0KB)] resolv.conf Integrity ...FAILED rac2: PRVG-10048 : Name "rac2" was not resolved to an address of the specified type by name servers "38.254.163.4". rac2: PRVG-10048 : Name "rac2" was not resolved to an address of the specified type by name servers "139.5.241.15". rac1: PRVG-10048 : Name "rac1" was not resolved to an address of the specified type by name servers "38.254.163.4". rac1: PRVG-10048 : Name "rac1" was not resolved to an address of the specified type by name servers "139.5.241.15". RPM Package Manager database ...INFORMATION PRVG-11250 : The check "RPM Package Manager database" was not performed because it needs 'root' user privileges. Refer to My Oracle Support notes "2548970.1" for more details regarding errors PRVG-11250". cgroup OS compatibility ...INFORMATION PRVG-11250 : The check "cgroup OS compatibility" was not performed because it needs 'root' user privileges. Refer to My Oracle Support notes "2548970.1" for more details regarding errors PRVG-11250". ORAchk health score ...INFORMATION PRVH-1507 : ORAchk/EXAchk checks are skipped. CVU operation performed: stage -pre crsinst Date: May 5, 2026, 10:47:46 PM CVU version: 23.26.1.0.0 (010926x8664) CVU home: /u01/app/grid/26ai/grid_1 User: oracle Operating system: Linux5.15.0-3.60.5.1.el9uek.x86_64 [oracle@rac1 bin]$
==> Now our earlier failures have been resolved, so let's proceed for the next phase.
Oracle Grid Infrastructure Installation:
1. Now we will run the gridSetup.sh to install the Oracle Grid Infrastructure. We will do this on Node 1.
[oracle@rac1 ~]$ . .grid.env [oracle@rac1 ~]$ [oracle@rac1 ~]$ env|grep ORA ORACLE_BASE=/u01/grid ORACLE_HOME=/u01/app/grid/26ai/grid_1 ORACLE_SID=+ASM1 [oracle@rac1 ~]$ [oracle@rac1 ~]$ cd /u01/app/grid/26ai/grid_1 [oracle@rac1 grid_1]$ ls addnode crs dbs env.ora has jdbc lib network oracore plsql QOpatch rhp sdk srvm welcome.html assistants crypto deinstall evm install jdk md nls oss precomp racg root.sh slax ucp xag bin css demo gpnp inventory jlib META-INF OPatch oui pylib rdbms rootupgrade.sh sqlpatch usm xdk clone cv diagnostics gridSetup.sh javavm ldap micronaut opmn perl python relnotes runcluvfy.sh sqlplus utl [oracle@rac1 grid_1]$ [oracle@rac1 grid_1]$ ./gridSetup.sh Launching Oracle Grid Infrastructure Setup Wizard... The response file for this session can be found at: /u01/app/grid/26ai/grid_1/install/response/grid_2026-05-06_09-15-24AM.rsp You can find the log of this install session at: /tmp/GridSetupActions2026-05-06_09-15-24AM/gridSetupActions2026-05-06_09-15-24AM.log Moved the install session logs to: /u01/oraInventory/logs/GridSetupActions2026-05-06_09-15-24AM
2. Now a GUI installer window will open. Follow the below steps.
Select Configure Oracle Grid for New Cluster and click Next.
Select Configure Cluster to Manage RAC Database and click Next.
Provide Cluster, SCAN Name & Port and click Next.
Now we need to add the 2nd Node here, so click on Add.
Provide Public & Virtual Hostname and click OK.
Now click SSH Connectivity , provide "oracle" user & its password. Then click Test.
Once testing gets successful, you will get below message. Click OK and then click Next.
Select Network type and click Next. Here Public interface is for Public & Private is for Private & ASM. The last one is showing for Internet, added during machine creation.
Select Oracle Flex ASM for storage and click Next.
Provide the diskgroup name as CRS, select Redundancy as External and select Disk Name "/dev/sdb3". Click Next.
(Note: We will create other diskgroups later.)
Provide the password of SYS user for ASM instance and click Next.
Check Enable Automatic Self Correction and click Next.
Select Do not use Intelligent and click Next.
Click Next.
Provide the OS user group and click Next.
Provide Grid Base and click Next.
Provide Inventrory location and click Next.
We will execute root script manually so click Next.
It will check for Prerequisities.
Check on Ignore and click Next.
Review and click Install.
Monitor the progress.
Run the provided script with root user on both Nodes. Then click OK.
Node 1: [root@rac1 ~]# /u01/oraInventory/orainstRoot.sh Changing permissions of /u01/oraInventory. Adding read,write permissions for group. Removing read,write,execute permissions for world. Changing groupname of /u01/oraInventory to oinstall. The execution of the script is complete. [root@rac1 ~]# [root@rac1 ~]# /u01/app/grid/26ai/grid_1/root.sh Performing root user operation. The following environment variables are set as: ORACLE_OWNER= oracle ORACLE_HOME= /u01/app/grid/26ai/grid_1 Enter the full pathname of the local bin directory: [/usr/local/bin]: Copying dbhome to /usr/local/bin ... Copying oraenv to /usr/local/bin ... Copying coraenv to /usr/local/bin ... Creating /etc/oratab file... 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. RAC option enabled on: Linux Executing command '/u01/app/grid/26ai/grid_1/perl/bin/perl -I/u01/app/grid/26ai/grid_1/perl/lib -I/u01/app/grid/26ai/grid_1/crs/install /u01/app/grid/26ai/grid_1/crs/install/rootcrs.pl ' Using configuration parameter file: /u01/app/grid/26ai/grid_1/crs/install/crsconfig_params The log of current session can be found at: /u01/grid/crsdata/rac1/crsconfig/rootcrs_rac1_2026-05-06_10-08-30AM.log 2026/05/06 10:08:49 CLSRSC-594: Executing installation step 1 of 18: 'ValidateEnv'. 2026/05/06 10:08:50 CLSRSC-594: Executing installation step 2 of 18: 'CheckRootCert'. 2026/05/06 10:08:51 CLSRSC-594: Executing installation step 3 of 18: 'GenSiteGUIDs'. 2026/05/06 10:08:54 CLSRSC-594: Executing installation step 4 of 18: 'SetupOSD'. Redirecting to /bin/systemctl restart rsyslog.service 2026/05/06 10:08:56 CLSRSC-594: Executing installation step 5 of 18: 'CheckCRSConfig'. 2026/05/06 10:08:56 CLSRSC-594: Executing installation step 6 of 18: 'SetupLocalGPNP'. 2026/05/06 10:09:07 CLSRSC-594: Executing installation step 7 of 18: 'CreateRootCert'. 2026/05/06 10:09:45 CLSRSC-594: Executing installation step 8 of 18: 'ConfigOLR'. 2026/05/06 10:09:58 CLSRSC-594: Executing installation step 9 of 18: 'ConfigCHMOS'. 2026/05/06 10:09:58 CLSRSC-594: Executing installation step 10 of 18: 'CreateOHASD'. 2026/05/06 10:10:02 CLSRSC-594: Executing installation step 11 of 18: 'ConfigOHASD'. 2026/05/06 10:10:33 CLSRSC-330: Adding Clusterware entries to file 'oracle-ohasd.service' 2026/05/06 10:11:00 CLSRSC-594: Executing installation step 12 of 18: 'SetupTFA'. 2026/05/06 10:11:00 CLSRSC-594: Executing installation step 13 of 18: 'InstallACFS'. 2026/05/06 10:11:06 CLSRSC-594: Executing installation step 14 of 18: 'CheckFirstNode'. 2026/05/06 10:11:08 CLSRSC-594: Executing installation step 15 of 18: 'InitConfig'. CRS-4256: Updating the profile Successful addition of voting disk 214fe17305a34f85bf3badbe9642ef69. Successfully replaced voting disk group with +CRS. CRS-4256: Updating the profile CRS-4266: Voting file(s) successfully replaced ## STATE File Universal Id File Name Disk group -- ----- ----------------- --------- --------- 1. ONLINE 214fe17305a34f85bf3badbe9642ef69 (/dev/sdb3) [CRS] Located 1 voting disk(s). 2026/05/06 10:20:20 CLSRSC-4002: Successfully installed Oracle Autonomous Health Framework (AHF). 2026/05/06 10:21:36 CLSRSC-594: Executing installation step 16 of 18: 'StartCluster'. 2026/05/06 10:22:51 CLSRSC-343: Successfully started Oracle Clusterware stack 2026/05/06 10:23:08 CLSRSC-594: Executing installation step 17 of 18: 'ConfigNode'. clscfg: EXISTING configuration version 23 detected. Successfully accumulated necessary OCR keys. Creating OCR keys for user 'root', privgrp 'root'.. Operation successful. 2026/05/06 10:25:31 CLSRSC-594: Executing installation step 18 of 18: 'PostConfig'. 2026/05/06 10:29:07 CLSRSC-325: Configure Oracle Grid Infrastructure for a Cluster ... succeeded [root@rac1 ~]# Node 2: [root@rac2 ~]# /u01/oraInventory/orainstRoot.sh Changing permissions of /u01/oraInventory. Adding read,write permissions for group. Removing read,write,execute permissions for world. Changing groupname of /u01/oraInventory to oinstall. The execution of the script is complete. [root@rac2 ~]# [root@rac2 ~]# [root@rac2 ~]# [root@rac2 ~]# /u01/app/grid/26ai/grid_1/root.sh Performing root user operation. The following environment variables are set as: ORACLE_OWNER= oracle ORACLE_HOME= /u01/app/grid/26ai/grid_1 Enter the full pathname of the local bin directory: [/usr/local/bin]: Copying dbhome to /usr/local/bin ... Copying oraenv to /usr/local/bin ... Copying coraenv to /usr/local/bin ... Creating /etc/oratab file... 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. RAC option enabled on: Linux Executing command '/u01/app/grid/26ai/grid_1/perl/bin/perl -I/u01/app/grid/26ai/grid_1/perl/lib -I/u01/app/grid/26ai/grid_1/crs/install /u01/app/grid/26ai/grid_1/crs/install/rootcrs.pl ' Using configuration parameter file: /u01/app/grid/26ai/grid_1/crs/install/crsconfig_params The log of current session can be found at: /u01/grid/crsdata/rac2/crsconfig/rootcrs_rac2_2026-05-06_10-08-57AM.log 2026/05/06 10:09:18 CLSRSC-594: Executing installation step 1 of 18: 'ValidateEnv'. 2026/05/06 10:09:20 CLSRSC-594: Executing installation step 2 of 18: 'CheckRootCert'. 2026/05/06 10:09:23 CLSRSC-766: The execution of root script on this node rac2 is awaiting the progress of root script on the installer node rac1 to make initial configuration data available to this node 2026/05/06 10:09:46 CLSRSC-594: Executing installation step 3 of 18: 'GenSiteGUIDs'. 2026/05/06 10:09:46 CLSRSC-594: Executing installation step 4 of 18: 'SetupOSD'. Redirecting to /bin/systemctl restart rsyslog.service 2026/05/06 10:09:47 CLSRSC-594: Executing installation step 5 of 18: 'CheckCRSConfig'. 2026/05/06 10:09:48 CLSRSC-594: Executing installation step 6 of 18: 'SetupLocalGPNP'. 2026/05/06 10:09:48 CLSRSC-594: Executing installation step 7 of 18: 'CreateRootCert'. 2026/05/06 10:09:48 CLSRSC-594: Executing installation step 8 of 18: 'ConfigOLR'. 2026/05/06 10:10:02 CLSRSC-594: Executing installation step 9 of 18: 'ConfigCHMOS'. 2026/05/06 10:10:02 CLSRSC-594: Executing installation step 10 of 18: 'CreateOHASD'. 2026/05/06 10:10:06 CLSRSC-594: Executing installation step 11 of 18: 'ConfigOHASD'. 2026/05/06 10:10:34 CLSRSC-330: Adding Clusterware entries to file 'oracle-ohasd.service' 2026/05/06 10:11:00 CLSRSC-594: Executing installation step 12 of 18: 'SetupTFA'. 2026/05/06 10:11:00 CLSRSC-594: Executing installation step 13 of 18: 'InstallACFS'. 2026/05/06 10:11:07 CLSRSC-594: Executing installation step 14 of 18: 'CheckFirstNode'. 2026/05/06 10:11:10 CLSRSC-764: The execution of root script on this node rac2 is awaiting the progress of root script on the installer node rac1 to reach the Grid Infrastructure stack startup on that node 2026/05/06 10:15:32 CLSRSC-4002: Successfully installed Oracle Autonomous Health Framework (AHF). 2026/05/06 10:23:09 CLSRSC-594: Executing installation step 15 of 18: 'InitConfig'. 2026/05/06 10:23:38 CLSRSC-594: Executing installation step 16 of 18: 'StartCluster'. 2026/05/06 10:25:51 CLSRSC-343: Successfully started Oracle Clusterware stack 2026/05/06 10:25:51 CLSRSC-594: Executing installation step 17 of 18: 'ConfigNode'. 2026/05/06 10:25:51 CLSRSC-594: Executing installation step 18 of 18: 'PostConfig'. 2026/05/06 10:26:21 CLSRSC-325: Configure Oracle Grid Infrastructure for a Cluster ... succeeded [root@rac2 ~]#
Monitor the progress.
Click OK.
Installation has been completed, we can ignore those failures. Click Next.
Click Yes.
Click Close.
3. Now verify the Grid installation.
4. Now let's create the remaining ASM diskgroups using ASMCA.Node 1: [oracle@rac1 ~]$ . .grid.env [oracle@rac1 ~]$ [oracle@rac1 ~]$ olsnodes rac1 rac2 [oracle@rac1 ~]$ ps -ef|grep pmon oracle 32810 1 0 10:22 ? 00:00:00 asm_pmon_+ASM1 oracle 73816 6014 0 10:52 pts/0 00:00:00 grep --color=auto pmon [oracle@rac1 ~]$ [oracle@rac1 ~]$ ps -ef|grep tns root 5 2 0 08:27 ? 00:00:00 [netns] oracle 35905 1 0 10:25 ? 00:00:00 /u01/app/grid/26ai/grid_1/bin/tnslsnr LISTENER -no_crs_notify -inherit oracle 36088 1 0 10:25 ? 00:00:00 /u01/app/grid/26ai/grid_1/bin/tnslsnr LISTENER_SCAN1 -no_crs_notify -inherit oracle 36089 1 0 10:25 ? 00:00:00 /u01/app/grid/26ai/grid_1/bin/tnslsnr LISTENER_SCAN2 -no_crs_notify -inherit oracle 36108 1 0 10:25 ? 00:00:00 /u01/app/grid/26ai/grid_1/bin/tnslsnr ASMNET1LSNR_ASM -no_crs_notify -inherit oracle 73888 6014 0 10:52 pts/0 00:00:00 grep --color=auto tns [oracle@rac1 ~]$ [root@rac1 ~]# ps -ef|grep d.bin root 31563 1 1 10:21 ? 00:00:35 /u01/app/grid/26ai/grid_1/bin/ohasd.bin reboot BLOCKING_STACK_LOCALE_OHAS=AMERICAN_AMERICA.AL32UTF8;CRS_AUX_DATA=CRS_AUXD_FASTCSS=yes oracle 31816 1 0 10:21 ? 00:00:09 /u01/app/grid/26ai/grid_1/bin/evmd.bin oracle 31818 1 0 10:21 ? 00:00:05 /u01/app/grid/26ai/grid_1/bin/mdnsd.bin oracle 31851 1 0 10:21 ? 00:00:06 /u01/app/grid/26ai/grid_1/bin/gpnpd.bin oracle 31895 1 0 10:21 ? 00:00:14 /u01/app/grid/26ai/grid_1/bin/gipcd.bin oracle 32028 1 1 10:21 ? 00:00:35 /u01/app/grid/26ai/grid_1/bin/onmd.bin -S 1 -F oracle 32030 1 1 10:21 ? 00:00:20 /u01/app/grid/26ai/grid_1/bin/ocssd.bin -S 1 -F root 32341 1 2 10:22 ? 00:00:42 /u01/app/grid/26ai/grid_1/bin/osysmond.bin root 33341 1 3 10:22 ? 00:01:01 /u01/app/grid/26ai/grid_1/bin/crsd.bin reboot root 74951 13642 0 10:54 pts/1 00:00:00 grep --color=auto d.bin [root@rac1 ~]# [root@rac1 ~]# cd /u01/app/grid/26ai/grid_1/bin [root@rac1 bin]# ./crsctl check css CRS-4529: Cluster Synchronization Services is online [root@rac1 bin]# [root@rac1 bin]# ./crsctl check has CRS-4638: Oracle High Availability Services is online [root@rac1 bin]# Node 2: [oracle@rac2 ~]$ ps -ef|grep pmon oracle 60698 1 0 10:26 ? 00:00:00 asm_pmon_+ASM2 oracle 112997 6780 0 10:53 pts/0 00:00:00 grep --color=auto pmon [oracle@rac2 ~]$ [oracle@rac2 ~]$ ps -ef|grep tns root 5 2 0 08:28 ? 00:00:00 [netns] oracle 58973 1 0 10:25 ? 00:00:00 /u01/app/grid/26ai/grid_1/bin/tnslsnr LISTENER -no_crs_notify -inherit oracle 59132 1 0 10:26 ? 00:00:00 /u01/app/grid/26ai/grid_1/bin/tnslsnr LISTENER_SCAN3 -no_crs_notify -inherit oracle 59143 1 0 10:26 ? 00:00:00 /u01/app/grid/26ai/grid_1/bin/tnslsnr ASMNET1LSNR_ASM -no_crs_notify -inherit oracle 113061 6780 0 10:54 pts/0 00:00:00 grep --color=auto tns [oracle@rac2 ~]$ [root@rac2 ~]# ps -ef|grep d.bin root 55768 1 2 10:23 ? 00:00:40 /u01/app/grid/26ai/grid_1/bin/ohasd.bin reboot BLOCKING_STACK_LOCALE_OHAS=AMERICAN_AMERICA.AL32UTF8 oracle 55988 1 0 10:23 ? 00:00:09 /u01/app/grid/26ai/grid_1/bin/evmd.bin oracle 55990 1 0 10:23 ? 00:00:05 /u01/app/grid/26ai/grid_1/bin/mdnsd.bin oracle 56030 1 0 10:23 ? 00:00:07 /u01/app/grid/26ai/grid_1/bin/gpnpd.bin oracle 56089 1 0 10:23 ? 00:00:16 /u01/app/grid/26ai/grid_1/bin/gipcd.bin oracle 56189 1 1 10:23 ? 00:00:33 /u01/app/grid/26ai/grid_1/bin/onmd.bin -S 2 oracle 56191 1 0 10:23 ? 00:00:19 /u01/app/grid/26ai/grid_1/bin/ocssd.bin -S 2 root 56537 1 2 10:23 ? 00:00:45 /u01/app/grid/26ai/grid_1/bin/osysmond.bin root 57812 1 1 10:25 ? 00:00:32 /u01/app/grid/26ai/grid_1/bin/crsd.bin reboot root 114755 26733 0 10:56 pts/1 00:00:00 grep --color=auto d.bin [root@rac2 ~]# [root@rac2 ~]# cd /u01/app/grid/26ai/grid_1/bin/ [root@rac2 bin]# [root@rac2 bin]# ./crsctl check css CRS-4529: Cluster Synchronization Services is online [root@rac2 bin]# [root@rac2 bin]# ./crsctl check has CRS-4638: Oracle High Availability Services is online [root@rac2 bin]#
[oracle@rac1 grid_1]$ asmca
5. Now a GUI window will open. Follow the below steps.
Click on Disk Groups.
Click on Create from bottom section.
Provide the Disk Group name as "DATA", its path and other options. Click OK.
Similarly create FRA Disk Group and click OK.
Now required Disk Groups have been created.
6. Now let's verify the Disk Groups via SQLPLUS.
[oracle@rac1 grid_1]$ sqlplus / as sysasm SQL*Plus: Release 23.26.1.0.0 - Production on Wed May 6 11:13:00 2026 Version 23.26.1.0.0 Copyright (c) 1982, 2025, Oracle. All rights reserved. Connected to: Oracle AI Database 26ai Enterprise Edition Release 23.26.1.0.0 - Production Version 23.26.1.0.0 SQL> def DEFINE _DATE = "06-MAY-26" (CHAR) DEFINE _CONNECT_IDENTIFIER = "+ASM1" (CHAR) DEFINE _USER = "SYS" (CHAR) DEFINE _PRIVILEGE = "AS SYSASM" (CHAR) DEFINE _SQLPLUS_RELEASE = "2326010000" (CHAR) DEFINE _EDITOR = "vi" (CHAR) DEFINE _O_VERSION = "Oracle AI Database 26ai Enterprise Edition Release 23.26.1.0.0 - Production Version 23.26.1.0.0" (CHAR) DEFINE _O_RELEASE = "2326010000" (CHAR) SQL> SQL> select INST_ID,NAME,TOTAL_MB/(1024) TOTAL_GB,FREE_MB/1024 FREE_GB,(TOTAL_MB-FREE_MB)/1024 USED_GB,(FREE_MB/TOTAL_MB)*100 FREE_PER from gv$asm_diskgroup order by 1; INST_ID NAME TOTAL_GB FREE_GB USED_GB FREE_PER ---------- ------------------------------ ---------- ---------- ---------- ---------- 1 CRS 9.99609375 9.65234375 .34375 96.5611567 1 DATA 45 44.8632813 .13671875 99.6961806 1 FRA 25 24.8632813 .13671875 99.453125 2 CRS 9.99609375 9.65234375 .34375 96.5611567 2 DATA 45 44.8632813 .13671875 99.6961806 2 FRA 25 24.8632813 .13671875 99.453125 6 rows selected. SQL>
==> Now Oracle Grid Infrastructure has been completed, so let's move forward for next phase.
Oracle Database Software Installation:
1. Now we will install the Database Home software. So first unzip the software on Node 1.
2. Now start the Oracle Database Software Installation.[oracle@rac1 software]$ pwd /home/oracle/software [oracle@rac1 software]$ [oracle@rac1 software]$ ls -lrth total 3.3G -rw-r--r--. 1 oracle oinstall 1.1G May 4 21:43 LINUX.X64_2326100_grid_home.zip -rw-r--r--. 1 oracle oinstall 2.3G May 6 11:18 LINUX.X64_2326100_db_home.zip [oracle@rac1 software]$ [oracle@rac1 software]$ unzip LINUX.X64_2326100_db_home.zip -d /u01/app/oracle/26ai/db_1
oracle@rac1 ~]$ . .db_env [oracle@rac1 ~]$ [oracle@rac1 ~]$ env|grep ORA ORACLE_BASE=/u01/app/oracle ORACLE_HOME=/u01/app/oracle/26ai/db_1 ORACLE_SID=raccdb1 [oracle@rac1 ~]$ [oracle@rac1 ~]$ cd /u01/app/oracle/26ai/db_1 [oracle@rac1 db_1]$ [oracle@rac1 db_1]$ ls addnode crypto dbs env.ora inventory ldap mgw oml4py ords precomp rdbms sdk sqlplus utl assistants css deinstall has javavm lib network OPatch oss python relnotes slax srvm xdk bin ctx demo hs jdbc log nls opmn oui QOpatch root.sh sqlcl suptools clone cv diagnostics install jdk md odbc oracore perl R runInstaller sqlj ucp crs data dv instantclient jlib META-INF olap ord plsql racg schagent.conf sqlpatch usm [oracle@rac1 db_1]$ [oracle@rac1 db_1]$ ./runInstaller Launching Oracle AI Database Setup Wizard... The response file for this session can be found at: /u01/app/oracle/26ai/db_1/install/response/db_2026-05-06_11-31-20AM.rsp You can find the log of this install session at: /u01/oraInventory/logs/InstallActions2026-05-06_11-31-20AM/installActions2026-05-06_11-31-20AM.log [oracle@rac1 db_1]$
3. Now a GUI installer window will open. Follow the below steps.
Select Set up RAC Software only and click Next.
Select Oracle Real Application Cluster and click Next.
Select both Nodes and click Next.
Click Next.
Provide OS group and click Next.
We will run root script manually, so click Next.
It will check for Prerequisities.
Check on Ignore All and click Next.
Verify the details and click Install.
Monitor the progress.
Run the script on both nodes with root user and click OK.
Node 1: [root@rac1 ~]# /u01/app/oracle/26ai/db_1/root.sh Performing root user operation. The following environment variables are set as: ORACLE_OWNER= oracle ORACLE_HOME= /u01/app/oracle/26ai/db_1 Enter the full pathname of the local bin directory: [/usr/local/bin]: The contents of "dbhome" have not changed. No need to overwrite. The contents of "oraenv" have not changed. No need to overwrite. The contents of "coraenv" have not changed. No need to overwrite. 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. [root@rac1 ~]# [root@rac1 ~]# Node 2: [root@rac2 ~]# /u01/app/oracle/26ai/db_1/root.sh Performing root user operation. The following environment variables are set as: ORACLE_OWNER= oracle ORACLE_HOME= /u01/app/oracle/26ai/db_1 Enter the full pathname of the local bin directory: [/usr/local/bin]: The contents of "dbhome" have not changed. No need to overwrite. The contents of "oraenv" have not changed. No need to overwrite. The contents of "coraenv" have not changed. No need to overwrite. 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. [root@rac2 ~]#
Now installation has been completed. Click Close.
==> Now Database Home installation has been completed, so let's move forward for next phase.
RAC Database Creation:
Note: Since the physical memory (RAM) in our setup is limited, we will create the database using only Node 1. After the database creation is completed, Node 2 will be added to the database configuration using srvctl. This approach helps to avoid DBCA issues caused by insufficient memory. Therefore, shutdown Node 2 and increase Node 1 RAM allocation if possible.
1. Now let's create the database with DBCA on Node 1.
[oracle@rac1 ~]$ free -g total used free shared buff/cache available Mem: 7 3 2 1 2 3 Swap: 4 0 4 [oracle@rac1 ~]$ [oracle@rac1 ~]$ . .db_env [oracle@rac1 ~]$ [oracle@rac1 ~]$ dbca
2. Now a GUI window will open. Follow the below steps.
Select Create Database and click Next.
Select Advanced and click Next.
Select General Purpose and click Next.
Select the Node and click Next.
==> If we use both Nodes for DBCA then only this step's output will be changed like below.
Rest steps are same.
Provide Database, SID and PDB name. Click Next.
Select Storage option as ASM. Click Next.
Provide FRA options and click Next.
Click Next.
Provide SGA & PGA value. Click Next.
Click Next.
Provide sys/system user password. Click Next.
Click Next.
Check on Ignore All and click Next.
Review the details and click Finish.
Monitor the progress.
Now Database has been created. Click Close.
3. Now verify the database.
4. Now proceed to add the Node 2 in database configuration.[oracle@rac1 ~]$ srvctl config raccdb [oracle@rac1 ~]$ srvctl config database -d raccdb Database unique name: raccdb Database name: raccdb Oracle home: /u01/app/oracle/26ai/db_1 Oracle user: oracle Spfile: +DATA/RACCDB/PARAMETERFILE/spfile.305.1232622609 Password file: +DATA/RACCDB/PASSWORD/pwdraccdb.291.1232621481 Domain: Start options: open Stop options: immediate Database role: PRIMARY Management policy: AUTOMATIC Server pools: Disk Groups: DATA,FRA Mount point paths: Services: raccdb_orclpdb Type: RAC Start concurrency: Stop concurrency: OSDBA group: dba OSOPER group: asmoper Database instances: raccdb1 Configured nodes: rac1 CSS critical: no CPU count: 0 Memory target: 0 Maximum memory: 0 Default network number for database services: Database is administrator managed [oracle@rac1 ~]$ [oracle@rac1 ~]$ srvctl status database -d raccdb -v Instance raccdb1 is running on node rac1 with online services raccdb_orclpdb. Instance status: Open,HOME=/u01/app/oracle/26ai/db_1. [oracle@rac1 ~]$ [oracle@rac1 ~]$ sqlplus / as sysdba SQL*Plus: Release 23.26.1.0.0 - Production on Thu May 7 11:27:43 2026 Version 23.26.1.0.0 Copyright (c) 1982, 2025, Oracle. All rights reserved. Connected to: Oracle AI Database 26ai Enterprise Edition Release 23.26.1.0.0 - Production Version 23.26.1.0.0 SQL> SQL> def DEFINE _DATE = "07-MAY-26" (CHAR) DEFINE _CONNECT_IDENTIFIER = "raccdb1" (CHAR) DEFINE _USER = "SYS" (CHAR) DEFINE _PRIVILEGE = "AS SYSDBA" (CHAR) DEFINE _SQLPLUS_RELEASE = "2326010000" (CHAR) DEFINE _EDITOR = "vi" (CHAR) DEFINE _O_VERSION = "Oracle AI Database 26ai Enterprise Edition Release 23.26.1.0.0 - Production Version 23.26.1.0.0" (CHAR) DEFINE _O_RELEASE = "2326010000" (CHAR) SQL> SQL> select name,open_mode,database_role from v$database; NAME OPEN_MODE DATABASE_ROLE --------- -------------------- ---------------- RACCDB READ WRITE PRIMARY SQL> show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 ORCLPDB READ WRITE NO SQL> SQL> show parameter spfile NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ spfile string +DATA/RACCDB/PARAMETERFILE/spf ile.305.1232622609 SQL>
5. Now shutdown the database and then do startup with srvctl.[oracle@rac1 ~]$ ssh rac2 date Thu May 7 12:01:13 PM IST 2026 [oracle@rac1 ~]$ [oracle@rac1 ~]$ srvctl config database -d raccdb Database unique name: raccdb Database name: raccdb Oracle home: /u01/app/oracle/26ai/db_1 Oracle user: oracle Spfile: +DATA/RACCDB/PARAMETERFILE/spfile.305.1232622609 Password file: +DATA/RACCDB/PASSWORD/pwdraccdb.291.1232621481 Domain: Start options: open Stop options: immediate Database role: PRIMARY Management policy: AUTOMATIC Server pools: Disk Groups: DATA,FRA Mount point paths: Services: raccdb_orclpdb Type: RAC Start concurrency: Stop concurrency: OSDBA group: dba OSOPER group: asmoper Database instances: raccdb1 Configured nodes: rac1 CSS critical: no CPU count: 0 Memory target: 0 Maximum memory: 0 Default network number for database services: Database is administrator managed [oracle@rac1 ~]$ [oracle@rac1 ~]$ srvctl add instance -d raccdb -i raccdb2 -n rac2 [oracle@rac1 ~]$ [oracle@rac1 ~]$ srvctl config database -d raccdb Database unique name: raccdb Database name: raccdb Oracle home: /u01/app/oracle/26ai/db_1 Oracle user: oracle Spfile: +DATA/RACCDB/PARAMETERFILE/spfile.305.1232622609 Password file: +DATA/RACCDB/PASSWORD/pwdraccdb.291.1232621481 Domain: Start options: open Stop options: immediate Database role: PRIMARY Management policy: AUTOMATIC Server pools: Disk Groups: DATA,FRA Mount point paths: Services: raccdb_orclpdb Type: RAC Start concurrency: Stop concurrency: OSDBA group: dba OSOPER group: asmoper Database instances: raccdb1,raccdb2 Configured nodes: rac1,rac2 CSS critical: no CPU count: 0 Memory target: 0 Maximum memory: 0 Default network number for database services: Database is administrator managed [oracle@rac1 ~]$ [oracle@rac1 ~]$ srvctl status database -d raccdb -v Instance raccdb1 is running on node rac1 with online services raccdb_orclpdb. Instance status: Open,HOME=/u01/app/oracle/26ai/db_1. Instance raccdb2 is not running on node rac2 Create Redo log & undo tablespace for Node 2: SQL> create undo tablespace UNDOTBS2 datafile '+DATA' size 200m autoextend on SQL> select group#,thread# from v$log; GROUP# THREAD# ---------- ---------- 1 1 2 1 3 1 SQL> alter database add logfile thread 2 group 4 ('+DATA') size 200m; 2 Database altered. SQL> alter database add logfile thread 2 group 5 ('+DATA') size 200m; 2 Database altered. SQL> alter database add logfile thread 2 group 6 ('+DATA') size 200m; Database altered. SQL> select group#,thread# from v$log; GROUP# THREAD# ---------- ---------- 1 1 2 1 3 1 4 2 5 2 6 2 6 rows selected. Run below to update instance, thread number & undo tablespace: SQL> alter system set instance_number=1 sid='raccdb1' scope=spfile; System altered. SQL> alter system set instance_number=2 sid='raccdb2' scope=spfile; System altered. SQL> alter system set thread=1 sid='raccdb1' scope=spfile; System altered. SQL> alter system set thread=2 sid='raccdb2' scope=spfile; System altered. SQL> alter system set undo_tablespace='UNDOTBS1' sid='raccdb1' scope=spfile; System altered. SQL> alter database enable public thread 2; Database altered.
SQL> shut immediate Database closed. Database dismounted. ORACLE instance shut down. SQL> SQL> exit Disconnected from Oracle AI Database 26ai Enterprise Edition Release 23.26.1.0.0 - Production Version 23.26.1.0.0 [oracle@rac1 ~]$ srvctl status database -d raccdb -v Instance raccdb1 is not running on node rac1 Instance raccdb2 is not running on node rac2 [oracle@rac1 ~]$ srvctl start database -d raccdb [oracle@rac1 ~]$ [oracle@rac1 ~]$ srvctl status database -d raccdb -v Instance raccdb1 is running on node rac1 with online services raccdb_orclpdb. Instance status: Open,HOME=/u01/app/oracle/26ai/db_1. Instance raccdb2 is running on node rac2. Instance status: Open,HOME=/u01/app/oracle/26ai/db_1. [oracle@rac1 ~]$
==> Now we have completed all the installation & configuration. So let's proceed for last Verfication phase.
Post-Installation Verification:
1. Now verify the cluster & database services.
Cluster services:
[oracle@rac1 ~]$ . .grid_env [oracle@rac1 ~]$ cd /u01/app/grid/26ai/grid_1/bin [oracle@rac1 bin]$ ./crsctl check crs CRS-4638: Oracle High Availability Services is online CRS-4537: Cluster Ready Services is online CRS-4529: Cluster Synchronization Services is online CRS-4533: Event Manager is online [oracle@rac1 bin]$ ./crsctl check has CRS-4638: Oracle High Availability Services is online [oracle@rac1 bin]$ ./crsctl stat res -t -------------------------------------------------------------------------------- Name Target State Server State details -------------------------------------------------------------------------------- Local Resources -------------------------------------------------------------------------------- ora.LISTENER.lsnr ONLINE ONLINE rac1 STABLE ONLINE ONLINE rac2 STABLE ora.chad ONLINE ONLINE rac1 STABLE ONLINE ONLINE rac2 STABLE ora.cvuadmin OFFLINE OFFLINE rac1 STABLE OFFLINE OFFLINE rac2 STABLE ora.helper OFFLINE OFFLINE rac1 IDLE,STABLE OFFLINE OFFLINE rac2 IDLE,STABLE ora.net1.network ONLINE ONLINE rac1 STABLE ONLINE ONLINE rac2 STABLE ora.ons ONLINE ONLINE rac1 STABLE ONLINE ONLINE rac2 STABLE -------------------------------------------------------------------------------- Cluster Resources -------------------------------------------------------------------------------- ora.ASMNET1LSNR_ASM.lsnr(ora.asmgroup) 1 ONLINE ONLINE rac1 STABLE 2 ONLINE ONLINE rac2 STABLE ora.CRS.dg(ora.asmgroup) 1 ONLINE ONLINE rac1 STABLE 2 ONLINE ONLINE STABLE ora.DATA.dg(ora.asmgroup) 1 ONLINE ONLINE rac1 STABLE 2 ONLINE ONLINE rac2 STABLE ora.FRA.dg(ora.asmgroup) 1 ONLINE ONLINE rac1 STABLE 2 ONLINE ONLINE rac2 STABLE ora.LISTENER_SCAN1.lsnr 1 ONLINE ONLINE rac1 STABLE ora.LISTENER_SCAN2.lsnr 1 ONLINE ONLINE rac1 STABLE ora.LISTENER_SCAN3.lsnr 1 ONLINE ONLINE rac2 STABLE ora.asm(ora.asmgroup) 1 ONLINE ONLINE rac1 Started,STABLE 2 ONLINE ONLINE rac2 Started,STABLE ora.asmnet1.asmnetwork(ora.asmgroup) 1 ONLINE ONLINE rac1 STABLE 2 ONLINE ONLINE rac2 STABLE ora.cdp1.cdp 1 OFFLINE OFFLINE STABLE ora.cdp2.cdp 1 OFFLINE OFFLINE STABLE ora.cdp3.cdp 1 OFFLINE OFFLINE STABLE ora.cvu 1 ONLINE ONLINE rac1 STABLE ora.cvuhelper 1 ONLINE ONLINE rac1 STABLE ora.rac1.vip 1 ONLINE ONLINE rac1 STABLE ora.rac2.vip 1 ONLINE ONLINE rac2 STABLE ora.raccdb.db 1 ONLINE ONLINE rac1 Open,HOME=/u01/app/o racle/26ai/db_1,STAB LE 2 ONLINE ONLINE rac2 Open,HOME=/u01/app/o racle/26ai/db_1,STAB LE ora.raccdb.orclpdb.pdb 2 ONLINE ONLINE rac1 READ WRITE,STABLE 3 ONLINE ONLINE rac2 READ WRITE,STABLE ora.raccdb.raccdb_orclpdb.svc 1 ONLINE ONLINE STABLE ora.rhpserver 1 OFFLINE OFFLINE STABLE ora.scan1.vip 1 ONLINE ONLINE rac1 STABLE ora.scan2.vip 1 ONLINE ONLINE rac1 STABLE ora.scan3.vip 1 ONLINE ONLINE rac2 STABLE -------------------------------------------------------------------------------- [oracle@rac1 bin]$ Node 1: [oracle@rac1 ~]$ ps -ef|grep pmon oracle 9432 1 0 11:37 ? 00:00:02 asm_pmon_+ASM1 oracle 76664 1 0 12:54 ? 00:00:00 ora_pmon_raccdb1 oracle 86981 6130 0 13:14 pts/0 00:00:00 grep --color=auto pmon [oracle@rac1 ~]$ [oracle@rac1 ~]$ ps -ef|grep tns root 5 2 0 11:30 ? 00:00:00 [netns] oracle 8075 1 0 11:36 ? 00:00:00 /u01/app/grid/26ai/grid_1/bin/tnslsnr LISTENER -no_crs_notify -inherit oracle 8141 1 0 11:36 ? 00:00:00 /u01/app/grid/26ai/grid_1/bin/tnslsnr LISTENER_SCAN3 -no_crs_notify -inherit oracle 8155 1 0 11:36 ? 00:00:00 /u01/app/grid/26ai/grid_1/bin/tnslsnr ASMNET1LSNR_ASM -no_crs_notify -inherit oracle 87016 6130 0 13:14 pts/0 00:00:00 grep --color=auto tns [oracle@rac1 ~]$. .db_env [oracle@rac1 ~]$ sqlplus / as sysdba SQL*Plus: Release 23.26.1.0.0 - Production on Thu May 7 13:08:20 2026 Version 23.26.1.0.0 Copyright (c) 1982, 2025, Oracle. All rights reserved. Connected to: Oracle AI Database 26ai Enterprise Edition Release 23.26.1.0.0 - Production Version 23.26.1.0.0 SQL> set lines 200 pages 1000 SQL> col open_mode for a15 SQL> col HOST_NAME for a15 SQL> select distinct NAME,DATABASE_ROLE,OPEN_MODE,INSTANCE_NUMBER,INSTANCE_NAME,HOST_NAME,VERSION,STARTUP_TIME,STATUS from gv$database,gv$instance; NAME DATABASE_ROLE OPEN_MODE INSTANCE_NUMBER INSTANCE_NAME HOST_NAME VERSION STARTUP_T STATUS --------- ---------------- --------------- --------------- ---------------- ---------------- ----------------- --------- ------------ RACCDB PRIMARY READ WRITE 1 raccdb1 rac1.oraeasy.com 23.0.0.0.0 07-MAY-26 OPEN RACCDB PRIMARY READ WRITE 2 raccdb2 rac2.oraeasy.com 23.0.0.0.0 07-MAY-26 OPEN SQL> show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 ORCLPDB READ WRITE NO SQL> Node 2: [oracle@rac2 ~]$ ps -ef|grep pmon oracle 5639 1 0 11:35 ? 00:00:02 asm_pmon_+ASM2 oracle 67087 1 0 12:54 ? 00:00:00 ora_pmon_raccdb2 oracle 77330 5250 0 13:14 pts/0 00:00:00 grep --color=auto pmon [oracle@rac2 ~]$ [oracle@rac2 ~]$ ps -ef|grep tns root 5 2 0 11:32 ? 00:00:00 [netns] oracle 6829 1 0 11:36 ? 00:00:00 /u01/app/grid/26ai/grid_1/bin/tnslsnr ASMNET1LSNR_ASM -no_crs_notify -inherit oracle 7041 1 0 11:36 ? 00:00:00 /u01/app/grid/26ai/grid_1/bin/tnslsnr LISTENER -no_crs_notify -inherit oracle 7042 1 0 11:36 ? 00:00:00 /u01/app/grid/26ai/grid_1/bin/tnslsnr LISTENER_SCAN2 -no_crs_notify -inherit oracle 7045 1 0 11:36 ? 00:00:00 /u01/app/grid/26ai/grid_1/bin/tnslsnr LISTENER_SCAN1 -no_crs_notify -inherit oracle 77349 5250 0 13:14 pts/0 00:00:00 grep --color=auto tns [oracle@rac2 ~]$ . .db_env [oracle@rac2 ~]$ sqlplus / as sysdba SQL*Plus: Release 23.26.1.0.0 - Production on Thu May 7 13:09:13 2026 Version 23.26.1.0.0 Copyright (c) 1982, 2025, Oracle. All rights reserved. Connected to: Oracle AI Database 26ai Enterprise Edition Release 23.26.1.0.0 - Production Version 23.26.1.0.0 SQL> set lines 200 pages 1000 SQL> col open_mode for a15 SQL> col HOST_NAME for a15 SQL> select distinct NAME,DATABASE_ROLE,OPEN_MODE,INSTANCE_NUMBER,INSTANCE_NAME,HOST_NAME,VERSION,STARTUP_TIME,STATUS from gv$database,gv$instance; NAME DATABASE_ROLE OPEN_MODE INSTANCE_NUMBER INSTANCE_NAME HOST_NAME VERSION STARTUP_T STATUS --------- ---------------- --------------- --------------- ---------------- ---------------- ----------------- --------- ------------ RACCDB PRIMARY READ WRITE 1 raccdb1 rac1.oraeasy.com 23.0.0.0.0 07-MAY-26 OPEN RACCDB PRIMARY READ WRITE 2 raccdb2 rac2.oraeasy.com 23.0.0.0.0 07-MAY-26 OPEN SQL> show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 ORCLPDB READ WRITE NO SQL>
2. Below table will give you the required commands to manage the RAC database and its resources.
Description Command Check cluster status across all nodes crsctl check cluster -allDisplay all cluster resources in tabular format crsctl stat res -tVerify Oracle Clusterware stack status crsctl check crsCheck Oracle High Availability Services (OHAS) status crsctl check hasList all cluster nodes with node numbers olsnodes -nDisplay node status olsnodes -sDisplay ASM disk groups and free space asmcmd lsdgShow ASM instance status srvctl status asmDisplay ASM configuration srvctl config asmCheck RAC database status srvctl status database -d <DB_NAME>Display RAC database configuration srvctl config database -d <DB_NAME>Start RAC database (All nodes) srvctl start database -d <DB_NAME>Stop RAC database (All nodes) srvctl stop database -d <DB_NAME>Check listener status srvctl status listenerDisplay listener configuration srvctl config listenerDisplay SCAN configuration srvctl config scanCheck SCAN listener status srvctl status scan_listenerRun cluster health check cluvfy comp healthcheckValidate node connectivity cluvfy comp nodecon -n all -verboseCheck the status of all RAC instances srvctl status instance -d <DB_NAME>Display the configuration of RAC instances srvctl config database -d <DB_NAME>Start a specific RAC instance srvctl start instance -d <DB_NAME> -i <INSTANCE_NAME>Stop a specific RAC instance srvctl stop instance -d <DB_NAME> -i <INSTANCE_NAME>Start multiple RAC instances srvctl start instance -d <DB_NAME> -i <INSTANCE1>,<INSTANCE2>Stop multiple RAC instances srvctl stop instance -d <DB_NAME> -i <INSTANCE1>,<INSTANCE2>
Thank you for reading!
I hope this content has been helpful to you. Your feedback and suggestions are always welcome — feel free to leave a comment or reach out with any queries.
Abhishek Shrivastava
Follow Us
- Global details for each node:





















































































Comments
Post a Comment