Table of Contents
Introduction
In this article, we will install a Single Instance Oracle on ASM in Oracle 19c, which acts as an Oracle RAC single instance, and later add new nodes to form a RAC 2 or 3 node cluster.
Install Single Instance Oracle on ASM in Oracle 19c
Note: – If you want to practice this whole activity in your home lab, then you'll need a platform to perform the installation. To set that up, you first need to download and install Oracle VirtualBox, followed by the operating system, the Oracle binary software, and finally, create the database.
Now, let's begin the setup to install Single Instance Oracle on ASM in Oracle 19c. I assume you have already installed Oracle VirtualBox and the Operating system. If not, kindly go through the articles that I have shared above, and then start from here.
Step 1) Directories Creation for GRID and ORACLE HOME.
[root@rac1~]# mkdir -p /u01/app/oracle/product/19.0.0.0/dbhome_1
[root@rac1~]# mkdir -p /u01/app/19.0.0.0/gridhome_1
[root@rac1~]# mkdir -p /u01/app/oraInventory
[root@rac1~]# chown -R oracle:oinstall /u01
[root@rac1~]# chmod -R 755 /u01
Central Inventory
[oracle@rac1 gridhome_1]$ vi /etc/oraInst.loc
inventory_loc=/u01/app/oraInventory
inst_group=oinstall
Note: – I have already covered from Step 3 to Step 8 in Oracle 19c RAC Database Installation. You can check out that article and complete your setup till this point.
Step 2) /etc/hosts File Configuration
Step 3) Prerequisites Packages
Step 4) Zone Configuration (Forward, Reverse)
Step 5) resolv.conf
Step 6) Change Oracle User Password
Step 7) Creation of Shared Disk
Step 8) Disk Formatting
Step 9) ASM Disk Creation
Step 10) Passwordless connectivity
Step 11) Download, copy, and unzip the grid binary
You can download the software from the Oracle eDelivery website.
a) Oracle Database Grid Infrastructure 19.3.0.0.0 (Linux x86-64)
b) Oracle Databaase 19.3.0.0.0 (Linux x86-64)
Unzip the grid binaries inside the GRID Home
cd /u01
unzip LINUX.X64_193000_grid_home.zip -d /u01/app/19.0.0.0/gridhome_1

Step 12) Cluvfy (Cluster Verification Utility)
This is one of the important steps in Single Instance Oracle on ASM in Oracle 19c Creation activity.
[oracle@rac1 gridhome_1]$ ./runcluvfy.sh stage -pre crsinst -n rac1 -verbose
Verifying Physical Memory ...
Node Name Available Required Status
------------ ------------------------ ------------------------ ----------
rac1 7.4236GB (7784196.0KB) 8GB (8388608.0KB) failed
Verifying Physical Memory ...FAILED (PRVF-7530)
Verifying Available Physical Memory ...
Node Name Available Required Status
------------ ------------------------ ------------------------ ----------
rac1 5.7348GB (6013416.0KB) 50MB (51200.0KB) passed
Verifying Available Physical Memory ...PASSED
Verifying Swap Size ...
Node Name Available Required Status
------------ ------------------------ ------------------------ ----------
rac1 12GB (1.2582908E7KB) 7.4236GB (7784196.0KB) passed
Verifying Swap Size ...PASSED
Verifying Free Space: rac1:/usr,rac1:/var,rac1:/etc,rac1:/sbin,rac1:/tmp ...
Path Node Name Mount point Available Required Status
---------------- ------------ ------------ ------------ ------------ ------------
/usr rac1 / 5.9648GB 25MB passed
/var rac1 / 5.9648GB 5MB passed
/etc rac1 / 5.9648GB 25MB passed
/sbin rac1 / 5.9648GB 10MB passed
/tmp rac1 / 5.9648GB 1GB passed
Verifying Free Space: rac1:/usr,rac1:/var,rac1:/etc,rac1:/sbin,rac1:/tmp ...PASSED
Verifying User Existence: oracle ...
Node Name Status Comment
------------ ------------------------ ------------------------
rac1 passed exists(54321)
Verifying Users With Same UID: 54321 ...PASSED
Verifying User Existence: oracle ...PASSED
Verifying Group Existence: asmadmin ...
Node Name Status Comment
------------ ------------------------ ------------------------
rac1 passed exists
Verifying Group Existence: asmadmin ...PASSED
Verifying Group Existence: asmdba ...
Node Name Status Comment
------------ ------------------------ ------------------------
rac1 passed exists
Verifying Group Existence: asmdba ...PASSED
Verifying Group Existence: oinstall ...
Node Name Status Comment
------------ ------------------------ ------------------------
rac1 passed exists
Verifying Group Existence: oinstall ...PASSED
Verifying Group Membership: asmadmin ...
Node Name User Exists Group Exists User in Group Status
---------------- ------------ ------------ ------------ ----------------
rac1 yes yes yes passed
Verifying Group Membership: asmadmin ...PASSED
Verifying Group Membership: asmdba ...
Node Name User Exists Group Exists User in Group Status
---------------- ------------ ------------ ------------ ----------------
rac1 yes yes yes passed
Verifying Group Membership: asmdba ...PASSED
Verifying Group Membership: oinstall(Primary) ...
Node Name User Exists Group Exists User in Group Primary Status
---------------- ------------ ------------ ------------ ------------ ------------
rac1 yes yes yes yes passed
Verifying Group Membership: oinstall(Primary) ...PASSED
Verifying Run Level ...
Node Name run level Required Status
------------ ------------------------ ------------------------ ----------
rac1 5 3,5 passed
Verifying Run Level ...PASSED
Verifying Hard Limit: maximum open file descriptors ...
Node Name Type Available Required Status
---------------- ------------ ------------ ------------ ----------------
rac1 hard 65536 65536 passed
Verifying Hard Limit: maximum open file descriptors ...PASSED
Verifying Soft Limit: maximum open file descriptors ...
Node Name Type Available Required Status
---------------- ------------ ------------ ------------ ----------------
rac1 soft 1024 1024 passed
Verifying Soft Limit: maximum open file descriptors ...PASSED
Verifying Hard Limit: maximum user processes ...
Node Name Type Available Required Status
---------------- ------------ ------------ ------------ ----------------
rac1 hard 16384 16384 passed
Verifying Hard Limit: maximum user processes ...PASSED
Verifying Soft Limit: maximum user processes ...
Node Name Type Available Required Status
---------------- ------------ ------------ ------------ ----------------
rac1 soft 16384 2047 passed
Verifying Soft Limit: maximum user processes ...PASSED
Verifying Soft Limit: maximum stack size ...
Node Name Type Available Required Status
---------------- ------------ ------------ ------------ ----------------
rac1 soft 10240 10240 passed
Verifying Soft Limit: maximum stack size ...PASSED
Verifying Users With Same UID: 0 ...PASSED
Verifying Current Group ID ...PASSED
Verifying Root user consistency ...
Node Name Status
------------------------------------ ------------------------
rac1 passed
Verifying Root user consistency ...PASSED
Verifying Package: cvuqdisk-1.0.10-1 ...
Node Name Available Required Status
------------ ------------------------ ------------------------ ----------
rac1 cvuqdisk-1.0.10-1 cvuqdisk-1.0.10-1 passed
Verifying Package: cvuqdisk-1.0.10-1 ...PASSED
Verifying Host name ...PASSED
Verifying Node Connectivity ...
Verifying Hosts File ...
Node Name Status
------------------------------------ ------------------------
rac1 passed
Verifying Hosts File ...PASSED
Interface information for node "rac1"
Name IP Address Subnet Gateway Def. Gateway HW Address MTU
------ --------------- --------------- --------------- --------------- ----------------- ------
enp0s3 192.168.1.200 192.168.1.0 0.0.0.0 UNKNOWN 08:00:27:4E:E6:1B 1500
enp0s8 192.168.79.200 192.168.79.0 0.0.0.0 UNKNOWN 08:00:27:B0:9C:3D 1500
Check: MTU consistency of the subnet "192.168.1.0".
Node Name IP Address Subnet MTU
---------------- ------------ ------------ ------------ ----------------
rac1 enp0s3 192.168.1.200 192.168.1.0 1500
Check: MTU consistency of the subnet "192.168.79.0".
Node Name IP Address Subnet MTU
---------------- ------------ ------------ ------------ ----------------
rac1 enp0s8 192.168.79.200 192.168.79.0 1500
Verifying Check that maximum (MTU) size packet goes through subnet ...PASSED
Verifying Node Connectivity ...PASSED
Verifying Multicast or broadcast check ...
Checking subnet "192.168.1.0" for multicast communication with multicast group "224.0.0.251"
Verifying Multicast or broadcast check ...PASSED
Verifying ASMLib installation and configuration verification. ...
Verifying '/etc/init.d/oracleasm' ...PASSED
Verifying '/dev/oracleasm' ...PASSED
Verifying '/etc/sysconfig/oracleasm' ...PASSED
Node Name Status
------------------------------------ ------------------------
rac1 passed
Verifying ASMLib installation and configuration verification. ...PASSED
Verifying Network Time Protocol (NTP) ...PASSED
Verifying Same core file name pattern ...PASSED
Verifying User Mask ...
Node Name Available Required Comment
------------ ------------------------ ------------------------ ----------
rac1 0022 0022 passed
Verifying User Mask ...PASSED
Verifying User Not In Group "root": oracle ...
Node Name Status Comment
------------ ------------------------ ------------------------
rac1 passed does not exist
Verifying User Not In Group "root": oracle ...PASSED
Verifying Time zone consistency ...PASSED
Verifying resolv.conf Integrity ...
Node Name Status
------------------------------------ ------------------------
rac1 passed
checking response for name "rac1" from each of the name servers specified in
"/etc/resolv.conf"
Node Name Source Comment Status
------------ ------------------------ ------------------------ ----------
rac1 192.168.1.200 IPv4 passed
Verifying resolv.conf Integrity ...PASSED
Verifying DNS/NIS name service ...PASSED
Verifying Domain Sockets ...PASSED
Verifying /boot mount ...PASSED
Verifying Daemon "avahi-daemon" not configured and running ...
Node Name Configured Status
------------ ------------------------ ------------------------
rac1 no passed
Node Name Running? Status
------------ ------------------------ ------------------------
rac1 no passed
Verifying Daemon "avahi-daemon" not configured and running ...PASSED
Verifying Daemon "proxyt" not configured and running ...
Node Name Configured Status
------------ ------------------------ ------------------------
rac1 no passed
Node Name Running? Status
------------ ------------------------ ------------------------
rac1 no passed
Verifying Daemon "proxyt" not configured and running ...PASSED
Verifying User Equivalence ...PASSED
Verifying RPM Package Manager database ...INFORMATION (PRVG-11250)
Verifying /dev/shm mounted as temporary file system ...PASSED
Verifying File system mount options for path /var ...PASSED
Verifying DefaultTasksMax parameter ...PASSED
Verifying zeroconf check ...PASSED
Verifying ASM Filter Driver configuration ...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".
Verifying Physical Memory ...FAILED
rac1: PRVF-7530 : Sufficient physical memory is not available on node "rac1"
[Required physical memory = 8GB (8388608.0KB)] ---We can ignore this check as this is for practice purpose, but in real you make sure you have sufficent Physical memory in your system.
Verifying RPM Package Manager database ...INFORMATION
PRVG-11250 : The check "RPM Package Manager database" was not performed because
it needs 'root' user privileges.
CVU operation performed: stage -pre crsinst
Date: Sep 2, 2025 1:43:46 AM
CVU home: /u01/app/19.0.0.0/gridhome_1/
User: oracle
[oracle@rac1 gridhome_1]$
Step 13) Clusterware Installation (Grid+ASM)
Clusterware installation is the next step in Single Instance Oracle on ASM in Oracle 19c.
cd /u01/app/19.0.0.0/gridhome_1
./gridSetup.sh

Choose option Configure an Oracle Standalone Cluster.
















Note: – root.sh is also one of the important steps in Single Instance Oracle on ASM in Oracle 19c.
root.sh Output
[root@rac1 ~]# /u01/app/19.0.0.0/gridhome_1/root.sh
Performing root user operation.
The following environment variables are set as:
ORACLE_OWNER= oracle
ORACLE_HOME= /u01/app/19.0.0.0/gridhome_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.
Relinking oracle with rac_on option
linking oracle with rac_on olinking oracle with rac_on oUsing configuration parameter file: /u01/app/19.0.0.0/gridhome_1/crs/install/crsconfig_params
The log of current session can be found at:
/u01/app/oracle/crsdata/rac1/crsconfig/rootcrs_rac1_2025-09-02_01-55-46AM.log
2025/09/02 01:56:01 CLSRSC-594: Executing installation step 1 of 19: 'SetupTFA'.
2025/09/02 01:56:01 CLSRSC-594: Executing installation step 2 of 19: 'ValidateEnv'.
2025/09/02 01:56:01 CLSRSC-363: User ignored prerequisites during installation
2025/09/02 01:56:01 CLSRSC-594: Executing installation step 3 of 19: 'CheckFirstNode'.
2025/09/02 01:56:04 CLSRSC-594: Executing installation step 4 of 19: 'GenSiteGUIDs'.
2025/09/02 01:56:04 CLSRSC-594: Executing installation step 5 of 19: 'SetupOSD'.
2025/09/02 01:56:04 CLSRSC-594: Executing installation step 6 of 19: 'CheckCRSConfig'.
2025/09/02 01:56:05 CLSRSC-594: Executing installation step 7 of 19: 'SetupLocalGPNP'.
2025/09/02 01:56:35 CLSRSC-594: Executing installation step 8 of 19: 'CreateRootCert'.
2025/09/02 01:56:41 CLSRSC-594: Executing installation step 9 of 19: 'ConfigOLR'.
2025/09/02 01:56:47 CLSRSC-4002: Successfully installed Oracle Trace File Analyzer (TFA) Collector.
2025/09/02 01:56:53 CLSRSC-594: Executing installation step 10 of 19: 'ConfigCHMOS'.
2025/09/02 01:56:53 CLSRSC-594: Executing installation step 11 of 19: 'CreateOHASD'.
2025/09/02 01:56:58 CLSRSC-594: Executing installation step 12 of 19: 'ConfigOHASD'.
2025/09/02 01:56:58 CLSRSC-330: Adding Clusterware entries to file 'oracle-ohasd.service'
2025/09/02 01:57:28 CLSRSC-594: Executing installation step 13 of 19: 'InstallAFD'.
2025/09/02 01:57:34 CLSRSC-594: Executing installation step 14 of 19: 'InstallACFS'.
2025/09/02 01:57:40 CLSRSC-594: Executing installation step 15 of 19: 'InstallKA'.
2025/09/02 01:57:46 CLSRSC-594: Executing installation step 16 of 19: 'InitConfig'.
ASM has been created and started successfully.
[DBT-30001] Disk groups created successfully. Check /u01/app/oracle/cfgtoollogs/asmca/asmca-250902AM015820.log for details.
2025/09/02 02:00:03 CLSRSC-482: Running command: '/u01/app/19.0.0.0/gridhome_1/bin/ocrconfig -upgrade oracle oinstall'
CRS-4256: Updating the profile
Successful addition of voting disk b716bfe9ba4b4f8dbf5adc62d409574e.
Successfully replaced voting disk group with +OCR.
CRS-4256: Updating the profile
CRS-4266: Voting file(s) successfully replaced
## STATE File Universal Id File Name Disk group
-- ----- ----------------- --------- ---------
1. ONLINE b716bfe9ba4b4f8dbf5adc62d409574e (/dev/oracleasm/disks/CRS) [OCR]
Located 1 voting disk(s).
2025/09/02 02:01:40 CLSRSC-594: Executing installation step 17 of 19: 'StartCluster'.
2025/09/02 02:02:49 CLSRSC-343: Successfully started Oracle Clusterware stack
2025/09/02 02:02:49 CLSRSC-594: Executing installation step 18 of 19: 'ConfigNode'.
2025/09/02 02:05:06 CLSRSC-594: Executing installation step 19 of 19: 'PostConfig'.
2025/09/02 02:05:48 CLSRSC-325: Configure Oracle Grid Infrastructure for a Cluster ... succeeded
Step 14) Database Software and Creation
Database Software download and unzip is the next step in Oracle RAC single instance setup.
unzip LINUX.X64_193000_db_home.zip -d /u01/app/oracle/product/19.0.0.0/dbhome_1
Output
1/javavm/lib/security/cacerts -> ../../../javavm/jdk/jdk8/lib/security/cacerts
/u01/app/oracle/product/19.0.0.0/dbhome_1/javavm/lib/sunjce_provider.jar -> ../../javavm/jdk/jdk8/lib/sunjce_provider.jar
/u01/app/oracle/product/19.0.0.0/dbhome_1/javavm/lib/security/README.txt -> ../../../javavm/jdk/jdk8/lib/security/README.txt
/u01/app/oracle/product/19.0.0.0/dbhome_1/javavm/lib/security/java.security -> ../../../javavm/jdk/jdk8/lib/security/java.security
/u01/app/oracle/product/19.0.0.0/dbhome_1/jdk/jre/lib/amd64/server/libjsig.so -> ../libjsig.so
[oracle@rac1 u01]$
cd /u01/app/oracle/product/19.0.0.0/dbhome_1
./runInstaller










Note: – root.sh is also one of the important steps in Single Instance Oracle on ASM in Oracle 19c.
root.sh Output
[root@rac1 admin]# /u01/app/oracle/product/19.0.0.0/dbhome_1/root.sh
Performing root user operation.
The following environment variables are set as:
ORACLE_OWNER= oracle
ORACLE_HOME= /u01/app/oracle/product/19.0.0.0/dbhome_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.

Step 15) Diskgroup Creation
Diskgroup creation is our next step in Single Instance Oracle on ASM in Oracle 19c activity.
cd /u01/app/19.0.0.0/gridhome_1/bin
./asmca


asmcmd output for Diskgroup Check
[oracle@rac1 ~]$ asmcmd
ASMCMD> lsdg
State Type Rebal Sector Logical_Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files Name
MOUNTED EXTERN N 512 512 4096 4194304 10236 10148 0 10148 0 N DATA/
MOUNTED EXTERN N 512 512 4096 4194304 20476 20388 0 20388 0 N FRA/
MOUNTED EXTERN N 512 512 4096 4194304 5116 4824 0 4824 0 Y OCR/
Step 16) Oracle RAC Single Instance Creation
Finally, Oracle RAC Single Instance Creation is the final step in this activity.
cd /u01/app/oracle/product/19.0.0.0/dbhome_1/bin
./dbca




Oracle RAC Single Instance Creation Output
[oracle@rac1 ~]$ srvctl status database -d PRODDB
Instance PRODDB1 is running on node rac1
[oracle@rac1 ~]$ srvctl config database -d PRODDB
Database unique name: PRODDB
Database name: PRODDB
Oracle home: /u01/app/oracle/product/19.0.0.0/dbhome_1
Oracle user: oracle
Spfile: +DATA/PRODDB/PARAMETERFILE/spfile.257.1210787295
Password file: +DATA/PRODDB/PASSWORD/pwdproddb.256.1210786721
Domain:
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
Server pools:
Disk Groups: FRA,DATA
Mount point paths:
Services:
Type: RAC
Start concurrency:
Stop concurrency:
OSDBA group: oinstall
OSOPER group: oinstall
Database instances: PRODDB1
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 ~]$
Cluster Output
[oracle@rac1 ~]$ crsctl stat res -t
--------------------------------------------------------------------------------
Name Target State Server State details
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.LISTENER.lsnr
ONLINE ONLINE rac1 STABLE
ora.chad
ONLINE ONLINE rac1 STABLE
ora.net1.network
ONLINE ONLINE rac1 STABLE
ora.ons
ONLINE ONLINE rac1 STABLE
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.ASMNET1LSNR_ASM.lsnr(ora.asmgroup)
1 ONLINE ONLINE rac1 STABLE
2 ONLINE OFFLINE STABLE
3 ONLINE OFFLINE STABLE
ora.DATA.dg(ora.asmgroup)
1 ONLINE ONLINE rac1 STABLE
2 OFFLINE OFFLINE STABLE
3 OFFLINE OFFLINE STABLE
ora.FRA.dg(ora.asmgroup)
1 ONLINE ONLINE rac1 STABLE
2 OFFLINE OFFLINE STABLE
3 OFFLINE OFFLINE 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 rac1 STABLE
ora.OCR.dg(ora.asmgroup)
1 ONLINE ONLINE rac1 STABLE
2 OFFLINE OFFLINE STABLE
3 OFFLINE OFFLINE STABLE
ora.asm(ora.asmgroup)
1 ONLINE ONLINE rac1 Started,STABLE
2 OFFLINE OFFLINE STABLE
3 OFFLINE OFFLINE STABLE
ora.asmnet1.asmnetwork(ora.asmgroup)
1 ONLINE ONLINE rac1 STABLE
2 OFFLINE OFFLINE STABLE
3 OFFLINE OFFLINE STABLE
ora.cvu
1 ONLINE ONLINE rac1 STABLE
ora.proddb.db
1 ONLINE ONLINE rac1 Open,HOME=/u01/app/o
racle/product/19.0.0
.0/dbhome_1,STABLE
ora.qosmserver
1 ONLINE ONLINE rac1 STABLE
ora.rac1.vip
1 ONLINE ONLINE rac1 STABLE
ora.scan1.vip
1 ONLINE ONLINE rac1 STABLE
ora.scan2.vip
1 ONLINE ONLINE rac1 STABLE
ora.scan3.vip
1 ONLINE ONLINE rac1 STABLE
--------------------------------------------------------------------------------
[oracle@rac1 ~]$
Conclusion
Finally!! We have completed Single Instance Oracle on ASM in Oracle 19c setup.
If you enjoyed the article, please leave a comment and share it with your friends. Also, let me know which Oracle and MySQL topics you'd like to see covered in future articles.