I have to recognise I'm a bit of old fashion guy when it comes to get updates about new things, I still use RSS and even though twitter can replace it in some cases, I still like to do things at my own pace...
What I didn't expect to receive a notification from Mike Dietrich's blog about a new AutoUpgrade version supporting RAC database the first of April!
If you have any project to upgrade a Database or simple want to know how that works, just go to his website and you will get more than you will ever need to complete any upgrade project.
Anyway, lets start working with Autoupgrade tool in RAC databases :)
Let's create a Demo Database in 11.2 so we can test this
[oracle@rac1-node1 ~]$ /u01/app/oracle/product/11.2.0/dbhome_1/bin/dbca \ -silent \ -createDatabase \ -templateName General_Purpose.dbc \ -gdbName demo \ -sid demo \ -SysPassword Welcome1 \ -SystemPassword Welcome1 \ -emConfiguration NONE \ -storageType ASM \ -redoLogFileSize 50 \ -recoveryAreaDestination RECO \ -diskGroupName DATA11 \ -characterSet AL32UTF8 \ -nationalCharacterSet AL32UTF8 \ -automaticMemoryManagement true \ -memoryPercentage 20 \ -databaseType MULTIPURPOSE \ -sampleSchema true \ -nodelist rac1-node1,rac1-node2 Copying database files 1% complete 3% complete 9% complete [....] 73% complete 76% complete 85% complete 94% complete 100% complete Look at the log file "/u01/app/oracle/cfgtoollogs/dbca/demo/demo.log" for further details. [oracle@rac1-node1 ~]$ [oracle@rac1-node1 ~]$ srvctl config database -d demo Database unique name: demo Database name: demo Oracle home: /u01/app/oracle/product/11.2.0/dbhome_1 Oracle user: oracle Spfile: +DATA11/demo/spfiledemo.ora Domain: Start options: open Stop options: immediate Database role: PRIMARY Management policy: AUTOMATIC Server pools: demo Database instances: demo1,demo2 Disk Groups: DATA11 Mount point paths: Services: Type: RAC Database is administrator managed [oracle@rac1-node1 ~]$
Go to the AutoUpgrade Tool (Doc ID 2485457.1) and just download the autoupgrade.jar file
Create a configuration file but before that, remember to always check that you have the latest version before you start.
Every upgrade so far has been getting rid of different errors and adding new features, so always double check against AutoUpgrade Tool (Doc ID 2485457.1)
[oracle@rac1-node1 ~]$ java -jar /home/oracle/autoupgrade.jar -version build.hash 6010a62 build.version 19.8.1 build.date 2020/04/01 16:18:24 build.max_target_version 19 build.type production [oracle@rac1-node1 ~]$ [oracle@rac1-node1 ~]$ java -jar /home/oracle/autoupgrade.jar -create_sample_file config Created sample configuration file /home/oracle/sample_config.cfg [oracle@rac1-node1 ~]$ cp /home/oracle/sample_config.cfg /home/oracle/demo_config.cfg
For this example, we already have a 19c Home ready, so we just needed to indicate the version and home path in the cofig file. I have also enabled run_utlrp and timezone_upg
If you check your config file, you can see you can add more Upgrade jobs, and even upgrade the DBs in parallel!
[oracle@rac1-node1 ~]$ cat /home/oracle/demo_config.cfg # # sample config file # # build version 19.8.1 # build date 2020/04/01 16:18:24 # # # Global configurations # # This directory will include the following # (1) AutoUpgrade's global directory # (2) Any logs, not directly tied to a job # (3) Config files # (4) progress.json and status.json global.autoupg_log_dir=/home/oracle/upg_logs # # Database number 1 # upg1.dbname=demo upg1.start_time=NOW upg1.source_home=/u01/app/oracle/product/11.2.0/dbhome_1 upg1.target_home=/u01/app/oracle/product/19.3.0/dbhome_1 upg1.sid=demo1 upg1.log_dir=/home/oracle/upg_logs/demo upg1.upgrade_node=rac1-node1.raclab.local upg1.target_version=19.3.0.0.0 upg1.run_utlrp=yes upg1.timezone_upg=yes
Lets analyze the possible upgrade.
Something important to notice here, the analyze is not like a "dry run upgrade", so even if your system is not ready for the upgrade, it wont fail (for some reason I expected that... is what happens when you don't read the documentation..), but will create a log file with the errors or warning for your system upgrade activity
[oracle@rac1-node1 ~]$ java -jar /home/oracle/autoupgrade.jar -config demo_config.cfg -mode analyze AutoUpgrade tool launched with default options Processing config file ... +--------------------------------+ | Starting AutoUpgrade execution | +--------------------------------+ 1 databases will be analyzed Type 'help' to list console commands upg>
Once in the console, you can lists the jobs running
upg> lsj +----+-------+---------+---------+-------+--------------+--------+--------+-------+ |Job#|DB_NAME| STAGE|OPERATION| STATUS| START_TIME|END_TIME| UPDATED|MESSAGE| +----+-------+---------+---------+-------+--------------+--------+--------+-------+ | 102| demo1|PRECHECKS|PREPARING|RUNNING|20/04/07 18:19| N/A|18:19:01| | +----+-------+---------+---------+-------+--------------+--------+--------+-------+ Total jobs 1 upg>
Once completed we should head to the log generated and search for any error
upg> Job 102 completed ------------------- Final Summary -------------------- Number of databases [ 1 ] Jobs finished successfully [1] Jobs failed [0] Jobs pending [0] ------------- JOBS FINISHED SUCCESSFULLY ------------- Job 102 for demo1 [oracle@rac1-node1 ~]$
The logs will be located in the path we assigned for them into your configuration file + the job number + prechecks:
[oracle@rac1-node1 prechecks]$ pwd /home/oracle/upg_logs/demo/demo1/102/prechecks [oracle@rac1-node1 prechecks]$ ls -lrth total 228K -rwx------ 1 oracle oinstall 153K Apr 7 18:19 prechecks_demo1.log -rwx------ 1 oracle oinstall 15K Apr 7 18:19 demo_checklist.xml -rwx------ 1 oracle oinstall 146 Apr 7 18:19 demo_checklist.json -rwx------ 1 oracle oinstall 3.7K Apr 7 18:19 demo_checklist.cfg -rwx------ 1 oracle oinstall 15K Apr 7 18:19 demo_preupgrade.log -rwx------ 1 oracle oinstall 32K Apr 7 18:19 demo_preupgrade.html [oracle@rac1-node1 prechecks]$
Checking for Errors, we find the first one, which is the fact that we need to set the system in archive mode:
[oracle@rac1-node1 prechecks]$ grep -i error demo_preupgrade.log [severity] ERROR [rule] The database to be upgraded must have the archive mode on before execute the AutoUpgrade for a fast restoration in case of error [oracle@rac1-node1 prechecks]$
Lets do just that:
[oracle@rac1-node1 prechecks]$ srvctl stop database -d demo [oracle@rac1-node1 prechecks]$ srvctl start database -d demo -o mount [oracle@rac1-node1 prechecks]$ . oraenv ORACLE_SID = [db1121] ? demo The Oracle base remains unchanged with value /u01/app/oracle [oracle@rac1-node1 prechecks]$ . oraenv ORACLE_SID = [demo] ? demo1 ORACLE_HOME = [/home/oracle] ? ^C [oracle@rac1-node1 prechecks]$ sqlplus / as sysdba SQL> ALTER SYSTEM set db_recovery_file_dest_size=5G scope=both sid='*' ; System altered. SQL> ALTER SYSTEM SET db_recovery_file_dest='+RECO' sid='*'; System altered. SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_1 = 'LOCATION=USE_DB_RECOVERY_FILE_DEST' scope=BOTH; System altered. SQL> ALTER DATABASE ARCHIVELOG; Database altered. SQL> exit [oracle@rac1-node1 prechecks]$ srvctl stop database -d demo ; srvctl start database -d demo
Checking again, we can see we need more FRA space (it has less than 5G), so just expanded FRA to 10G :)
[oracle@rac1-node1 ~]$ java -jar /home/oracle/autoupgrade.jar -config demo_config.cfg -mode analyze AutoUpgrade tool launched with default options Processing config file ... +--------------------------------+ | Starting AutoUpgrade execution | +--------------------------------+ 1 databases will be analyzed Type 'help' to list console commands upg> lsj +----+-------+---------+---------+-------+--------------+--------+--------+---------------+ |Job#|DB_NAME| STAGE|OPERATION| STATUS| START_TIME|END_TIME| UPDATED| MESSAGE| +----+-------+---------+---------+-------+--------------+--------+--------+---------------+ | 103| demo1|PRECHECKS|PREPARING|RUNNING|20/04/07 18:29| N/A|18:29:11|Loading DB info| +----+-------+---------+---------+-------+--------------+--------+--------+---------------+ Total jobs 1 upg> Job 103 completed ------------------- Final Summary -------------------- Number of databases [ 1 ] Jobs finished successfully [1] Jobs failed [0] Jobs pending [0] ------------- JOBS FINISHED SUCCESSFULLY ------------- Job 103 for demo1 [oracle@rac1-node1 ~]$ [oracle@rac1-node1 prechecks]$ pwd /home/oracle/upg_logs/demo/demo1/103/prechecks [oracle@rac1-node1 prechecks]$ [oracle@rac1-node1 prechecks]$ grep -i error demo_preupgrade.log -C5 [checkname] MIN_RECOVERY_AREA_SIZE [stage] PRECHECKS [fixup_available] YES [runfix] YES [severity] ERROR [action] Set DB_RECOVERY_FILE_DEST_SIZE initialization parameter to at least 5154 MB. Check alert log during the upgrade to ensure there is remaining free space available in the recovery area. [broken rule] DB_RECOVERY_FILE_DEST_SIZE is set at 5120 MB. There is currently 4916 MB of free space remaining, which may not be adequate for the upgrade. Currently: Fast recovery area : +RECO Limit : 5120 MB Used : 204 MB Available : 4916 MB [rule] The database has archivelog and flashback enabled, and the upgrade process will need free space to generate archived and flashback logs to the recovery area specified by initialization parameter DB_RECOVERY_FILE_DEST. The logs generated must not overflow the limit set by DB_RECOVERY_FILE_DEST_SIZE, as that can cause the upgrade to not proceed. ---------------------------------------------------- [oracle@rac1-node1 prechecks]$ SQL> ALTER SYSTEM set db_recovery_file_dest_size=10G scope=both sid='*' ; System altered. SQL> exit
New analyze run and no more errors, good.
Now, you should also check for some warnings and if they will get fixed during the upgrade.
To be honest, the tool seems to be doing really good job on that and most of the fix are automatically done, but something like APEX is something you will need to take care manually
[oracle@rac1-node1 prechecks]$ pwd /home/oracle/upg_logs/demo/demo1/104/prechecks [oracle@rac1-node1 prechecks]$ grep -i error demo_preupgrade.log -C5 [oracle@rac1-node1 prechecks]$ [oracle@rac1-node1 prechecks]$ cat demo_preupgrade.log [...] [checkname] PARAMETER_MIN_VAL [stage] PRECHECKS [fixup_available] YES [runfix] YES [severity] WARNING [action] Update NUMERIC INITIALIZATION PARAMETERS to meet estimated minimums. This action may be done now or when starting the d atabase in upgrade mode using the 19 ORACLE HOME. [broken rule] [|Parameter|Currently|minimum] ||processes|150|300| [rule] The database upgrade process requires certain initialization parameters to meet minimum values. The Oracle upgrade proc ess itself has minimum values which may be higher and are marked with an asterisk. After upgrading, those asterisked parameter values may be reset if needed. [...] [checkname] APEX_MANUAL_UPGRADE [stage] PRECHECKS [fixup_available] NO [runfix] N/A [severity] WARNING [action] Upgrade Oracle Application Express (APEX) manually before or after the database upgrade. [broken rule] The database contains APEX version 3.2.1.00.12, which is not supported on the target version 19.0.0.0.0. APEX must be upgraded to at least version 18.2.0.00.12 either before or after the database is upgraded [rule] Starting with Oracle Database Release 18, APEX is not upgraded automatically as part of the database upgrade. Refer to My Oracle Support Note 1088970.1 for information about APEX installation and upgrades. Refer to MOS Note 1344948.1 for the minimum APEX version supported for your target database release. Unsupported versions of APEX will be in an INVALID state when its database dependencies are not in sync with the upgraded database.
Lets just get things done and deploy the upgrade
[oracle@rac1-node1 ~]$ java -jar /home/oracle/autoupgrade.jar -config demo_config.cfg -mode deploy AutoUpgrade tool launched with default options Processing config file ... +--------------------------------+ | Starting AutoUpgrade execution | +--------------------------------+ 1 databases will be processed Type 'help' to list console commands upg> lsj +----+-------+---------+---------+-------+--------------+--------+--------+-------------+ |Job#|DB_NAME| STAGE|OPERATION| STATUS| START_TIME|END_TIME| UPDATED| MESSAGE| +----+-------+---------+---------+-------+--------------+--------+--------+-------------+ | 105| demo1|PREFIXUPS|EXECUTING|RUNNING|20/04/07 18:37| N/A|18:38:28|Remaining 8/8| +----+-------+---------+---------+-------+--------------+--------+--------+-------------+ Total jobs 1 upg>
We can check the job progress from the console:
upg> status -job 105 Progress ----------------------------------- Start time: 20/04/07 18:37 Elapsed (min): 2 End time: N/A Last update: 2020-04-07T18:39:19.760 Stage: PREFIXUPS Operation: EXECUTING Status: RUNNING Pending stages: 6 Stage summary: SETUP <1 min PREUPGRADE <1 min PRECHECKS <1 min GRP <1 min PREFIXUPS 1 min (IN PROGRESS) Job Logs Locations ----------------------------------- Logs Base: /home/oracle/upg_logs/demo/demo1 Job logs: /home/oracle/upg_logs/demo/demo1/105 Stage logs: /home/oracle/upg_logs/demo/demo1/105/prefixups TimeZone: /home/oracle/upg_logs/demo/demo1/temp Additional information ----------------------------------- Details: +--------+----------+--------+ |DATABASE| FIXUP| STATUS| +--------+----------+--------+ | demo1|AMD_EXISTS|FINISHED| | demo1|EM_PRESENT| STARTED| +--------+----------+--------+ Error Details: None upg> upg> status -job 105 Progress ----------------------------------- Start time: 20/04/07 18:37 Elapsed (min): 12 End time: N/A Last update: 2020-04-07T18:48:36.809 Stage: DBUPGRADE Operation: EXECUTING Status: RUNNING Pending stages: 4 Stage summary: SETUP <1 min PREUPGRADE <1 min PRECHECKS <1 min GRP <1 min PREFIXUPS 8 min DRAIN <1 min DBUPGRADE 2 min (IN PROGRESS) Job Logs Locations ----------------------------------- Logs Base: /home/oracle/upg_logs/demo/demo1 Job logs: /home/oracle/upg_logs/demo/demo1/105 Stage logs: /home/oracle/upg_logs/demo/demo1/105/dbupgrade TimeZone: /home/oracle/upg_logs/demo/demo1/temp Additional information ----------------------------------- Details: [Upgrading] is [0%] completed for [demo] +---------+------------+ |CONTAINER| PERCENTAGE| +---------+------------+ | demo|UPGRADE [0%]| +---------+------------+ Error Details: None upg> Job 105 completed ------------------- Final Summary -------------------- Number of databases [ 1 ] Jobs finished successfully [1] Jobs failed [0] Jobs pending [0] ------------- JOBS FINISHED SUCCESSFULLY ------------- Job 105 for demo1 [oracle@rac1-node1 ~]$
and voila! we got our demo database upgraded to 19.3
upg> Job 105 completed ------------------- Final Summary -------------------- Number of databases [ 1 ] Jobs finished successfully [1] Jobs failed [0] Jobs pending [0] ------------- JOBS FINISHED SUCCESSFULLY ------------- Job 105 for demo1 [oracle@rac1-node1 ~]$ [oracle@rac1-node1 ~]$ . oraenv ORACLE_SID = [oracle] ? demo1 ORACLE_HOME = [/home/oracle] ? /u01/app/oracle/product/19.3.0/dbhome_1 The Oracle base has been set to /u01/app/oracle [oracle@rac1-node1 ~]$ srvctl config database -d demo Database unique name: demo Database name: demo Oracle home: /u01/app/oracle/product/19.3.0/dbhome_1 Oracle user: oracle Spfile: +DATA11/DEMO/PARAMETERFILE/spfile.281.1037189091 Password file: Domain: Start options: open Stop options: immediate Database role: PRIMARY Management policy: AUTOMATIC Server pools: Disk Groups: DATA11 Mount point paths: Services: Type: RAC Start concurrency: Stop concurrency: OSDBA group: oinstall OSOPER group: oinstall Database instances: demo1,demo2 Configured nodes: rac1-node1,rac1-node2 CSS critical: no CPU count: 0 Memory target: 0 Maximum memory: 0 Default network number for database services: Database is administrator managed [oracle@rac1-node1 ~]$
For our example, this is the Log file (there are more logs file, but this is the one for the user to see, but I recommend you to check all of them during your tests to understand all the steps done)
[oracle@rac1-node1 105]$ pwd /home/oracle/upg_logs/demo/demo1/105 [oracle@rac1-node1 105]$ tail -150f autoupgrade_20200408_user.log 2020-04-07 18:37:48.320 INFO build.hash:6010a62 build.version:19.8.1 build.date:2020/04/01 16:18:24 build.max_target_version:19 build.type:production build.label:HEAD 2020-04-07 18:37:59.604 INFO Analyzing demo1, 81 checks will run using 16 threads 2020-04-07 18:38:09.771 INFO Guarantee Restore Point (GRP) successfully removed [DEMO1][AUTOUPGRADE_221145114461854_DEMO1] 2020-04-07 18:38:27.699 INFO Guarantee Restore Point (GRP) successfully created [DEMO1][AUTOUPGRADE_221145114461854_DEMO1] 2020-04-07 18:38:27.729 INFO Using /home/oracle/upg_logs/demo/demo1/105/prechecks/demo_checklist.cfg as reference to determine the fixups which will be executed 2020-04-07 18:38:27.758 INFO Adding fixup PURGE_RECYCLEBIN to execution queue of demo1 2020-04-07 18:46:11.484 INFO Updating parameter *.processes=150 to *.processes=330 in /home/oracle/upg_logs/demo/demo1/temp/during_upgrade_pfile_demo1.ora 2020-04-07 18:46:11.485 INFO Updating parameter *.processes=150 to *.processes=330 in /home/oracle/upg_logs/demo/demo1/temp/after_upgrade_pfile_demo1.ora 2020-04-07 18:46:11.488 INFO Updating parameter *.cluster_database='true' to *.cluster_database='FALSE' in /home/oracle/upg_logs/demo/demo1/temp/during_upgrade_pfile_demo1.ora [....] 2020-04-07 19:18:59.974 INFO [Upgrading] is [49%] completed for [demo] +---------+-------------+ |CONTAINER| PERCENTAGE| +---------+-------------+ | demo|UPGRADE [49%]| +---------+-------------+ [.....] 2020-04-07 19:51:36.479 INFO End Compiling Invalid Objects on Database [demo] 2020-04-07 19:51:36.480 INFO SUCCESSFULLY COMPILED [demo] 2020-04-07 19:51:37.161 INFO [Upgrading] is [100%] completed for [demo] +---------+----------------------------+ |CONTAINER| PERCENTAGE| +---------+----------------------------+ | demo|SUCCESSFULLY UPGRADED [demo]| +---------+----------------------------+ 2020-04-07 19:51:37.163 INFO Error opening file [/u01/app/oracle/product/19.3.0/dbhome_1/dbs/initdemo1.ora] for reading. 2020-04-07 19:51:39.192 INFO Creating spfile completed with success 2020-04-07 19:51:39.193 INFO SUCCESSFULLY UPGRADED [demo] 2020-04-07 19:51:39.227 INFO demo Return status is SUCCESS 2020-04-07 19:53:57.453 INFO Analyzing demo1, 10 checks will run using 10 threads 2020-04-07 19:54:03.431 INFO Using /home/oracle/upg_logs/demo/demo1/105/prechecks/demo_checklist.cfg as reference to determine the fixups which will be executed 2020-04-07 19:59:34.708 INFO Executing [/home/oracle/upg_logs/demo/demo1/temp/sqlsessstart.sql][demo1] 2020-04-07 19:59:35.217 INFO Complete [/home/oracle/upg_logs/demo/demo1/temp/sqlsessstart.sql][demo1] 2020-04-07 19:59:35.217 INFO Executing [/home/oracle/upg_logs/demo/demo1/temp/demo1_utltz_upg_check.sql][demo1] 2020-04-07 19:59:39.721 INFO Complete [/home/oracle/upg_logs/demo/demo1/temp/demo1_utltz_upg_check.sql][demo1] 2020-04-07 19:59:39.722 INFO Executing [/home/oracle/upg_logs/demo/demo1/temp/demo1_utltz_upg_apply.sql][demo1] 2020-04-07 20:02:58.319 INFO Complete [/home/oracle/upg_logs/demo/demo1/temp/demo1_utltz_upg_apply.sql][demo1] 2020-04-07 20:02:58.320 INFO Executing [/home/oracle/upg_logs/demo/demo1/temp/sqlsessend.sql][demo1] 2020-04-07 20:03:00.284 INFO Complete [/home/oracle/upg_logs/demo/demo1/temp/sqlsessend.sql][demo1] 2020-04-07 20:03:00.285 INFO The Timezone upgrade has finished for [demo1] 2020-04-07 20:03:38.804 INFO Analyzing demo1, 10 checks will run using 10 threads 2020-04-07 20:03:39.983 INFO No entry was found for [demo1:/u01/app/oracle/product/11.2.0/dbhome_1] in /etc/oratab 2020-04-07 20:03:39.988 INFO Copying/merging file listener.ora ended 2020-04-07 20:03:39.989 INFO Creating temporary IFile /u01/app/oracle/product/19.3.0/dbhome_1/network/admin/tnsnames.ora.tmp 2020-04-07 20:03:39.991 INFO Merging files /u01/app/oracle/product/19.3.0/dbhome_1/network/admin/tnsnames.ora.tmp and /u01/app/oracle/product/19.3.0/dbhome_1/network/admin/tnsnames.ora to /u01/app/oracle/product/19.3.0/dbhome_1/network/admin/tnsnames.ora 2020-04-07 20:03:39.991 INFO Copying/merging file /u01/app/oracle/product/19.3.0/dbhome_1/network/admin/tnsnames.ora.tmp ended 2020-04-07 20:03:39.992 INFO Copying/merging file sqlnet.ora ended 2020-04-07 20:04:50.957 INFO Database demo1 was successfully restarted. 2020-04-07 20:04:50.961 INFO Return status is SUCCESS 2020-04-07 20:04:50.967 INFO Update of oratab [demo] [/etc/oratab] [SUCCESS] [None] Network Files [demo] [/u01/app/oracle/product/19.3.0/dbhome_1/network/admin/tnsnames.ora] [SUCCESS] [None] [/u01/app/oracle/product/19.3.0/dbhome_1/network/admin/listener.ora] [SUCCESS] [None] [/u01/app/oracle/product/19.3.0/dbhome_1/network/admin/sqlnet.ora] [SUCCESS] [None] Database State Resetting the database's state: [SUCCESS] [None] Drop GRP [demo] [SUCCESS] [None] Creation of SPFILE for database [demo1] [SUCCESS] [None] Restart of database [demo] [SUCCESS] [None] 2020-04-07 20:04:50.973 INFO /home/oracle/upg_logs/demo/demo1/temp/after_upgrade_pfile_demo1.ora
This is of corse a simple test scenario, but I really recommend you to start digging into Mike Dietrich's website, specially if you are one of those people that still think Upgrade Oracle Database are just way to difficult to do, and remember to always "try this at home!!"
Also, check the Documentation, can be really useful :P
Lets summarise steps done for this test:
- Create a new 11.2 demo Database
- Create Autoupgrade configuration file to upgrade to 19.3
- Analyse the system for Upgrade in search for any errors
- Set the system in archive mode
- Deploy the Upgrade
Top comments (2)
"For this example, we already have a 19c Home ready"
is above meaning you already have installed the 19c grid too ?
Hi, Yes.
In Oracle, GRID Version should be always At least the same than your newest Database version.. Meaning, if you want to install Oracle DB 12.2, your Grid should be 12.2 or newer.
Right now, there is not GRID Autoupgrade tool (but I'm sure is in the pipeline) so this asume you already have your GRID at a proper version
In my case, I have Grid 19.3 and then different DBs versions installed there
[oracle@rac1-node1 ~]$ cat /etc/oratab
Backup file is /u01/app/grid/crsdata/rac1-node1/output/oratab.bak.rac1-node1.oracle line added by Agent
[.....]
ASM
+ASM1:/u01/app/19.3.0/grid:N
DB 11.2
db1121:/u01/app/oracle/product/11.2.0/dbhome_1:N
DB 12.1
cdb1211:/u01/app/oracle/product/12.1.0/dbhome_1:N
db1211:/u01/app/oracle/product/12.1.0/dbhome_1:N
DB 12.2
cdb1221:/u01/app/oracle/product/12.2.0/dbhome_1:N
db1221:/u01/app/oracle/product/12.2.0/dbhome_1:N
DB 18.0
cdb181:/u01/app/oracle/product/18.0.0/dbhome_1:N
db181:/u01/app/oracle/product/18.0.0/dbhome_1:N
DB 19.3
cdb191:/u01/app/oracle/product/19.3.0/dbhome_1:N
db191:/u01/app/oracle/product/19.3.0/dbhome_1:N
[oracle@rac1-node1 ~]$
Is very easy now days to get your own RAC Cluster at home, if you are not sure how, please go to oracle-base.com/articles/19c/oracl... and give it a try.
I'm trying to do something similar with KVM+Ansible so I can learn Ansible in the process, but Tim's tutorials are the best around and mine will take some time to be completed :)
Hope this help you and dont doubt in "ping me" if you have more questions, will be happy to help :)