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 :)