In the pervious article we have explained the STEPS FOR GRID UGPRADE FROM 12C TO 19C. Now We will explain the steps for downgrade oracle 19c 2 node GRID to oracle 12.1.0.2 GRID.

ENVIRONMENT DETAILS:

2 NODES – dbhost1 and dbhost2
Grid owner – oracle
19C ORACLE_HOME(current) – > /sharearea/crs/grid19c
12C ORACLE_HOME (old) -> /crs/app/oracle/product/grid12c

1. Check the current grid version:( check on both the nodes)

oracle@dbhost1:/$ crsctl query crs softwareversion
Oracle Clusterware version on node [dbhost1] is [19.0.0.0.0]
oracle@dbhost1:$ crsctl query crs activeversion
Oracle Clusterware active version on the cluster is [19.0.0.0.0]

2. Remove the mgmt database:

oracle@dbhost1:$ srvctl status mgmtdb
Database is enabled
Instance -MGMTDB is running on node dbhost2

Currently MGMT is running from dbhost2 i.e node 2 .So run the delete command from NODE 2 only.

oracle@dbhost2:~$  dbca -silent -deleteDatabase -sourceDB -MGMTDB
[WARNING] [DBT-19202] The Database Configuration Assistant will delete the Oracle instances and datafiles for your database. All information in the database will be destroyed.
Prepare for db operation
32% complete
Connecting to database
35% complete
39% complete
42% complete
45% complete
48% complete
52% complete
65% complete
Updating network configuration files
68% complete
Deleting instance and datafiles
84% complete
100% complete
Database deletion completed.
Look at the log file "/sharearea/orabase/cfgtoollogs/dbca/_mgmtdb/_mgmtdb.log" for further details.

NOTE:

So if we try to delete the MGMTDB from node 1, it will throw error as below.

oracle@dbhost1:$ dbca -silent -deleteDatabase -sourceDB -MGMTDB
[FATAL] [DBT-10003] Delete operation for Oracle Grid Infrastructure Management Repository (GIMR) cannot be performed on the current node (dbhost1).
CAUSE: Oracle GIMR is running on a remote node (dbhost2).
ACTION: Invoke DBCA on the remote node (dbhost2) to delete Oracle GIMR.

 

3. Downgrade script execution:

Now we will run the downgrade script first one local node and then on remote node. It need to be run from root user.

Login as root and go to a path where grid owner has write permission. In our case grid owner is oracle.

Downgrade on node 1:(dbhost1) –

login as root and move to a path where oracle has write permission

root$ cd export/home/oracle

/sharearea/crs/grid19c/crs/install/rootcrs.sh -downgrade

root@dbhost1:/export/home/oracle# /sharearea/crs/grid19c/crs/install/rootcrs.sh -downgrade

Using configuration parameter file: /sharearea/crs/grid19c/crs/install/crsconfig_params
The log of current session can be found at:
  /sharearea/orabase/crsdata/dbhost1/crsconfig/crsdowngrade_dbhost1_2019-09-16_10-01-30AM.log
2019/09/16 10:04:12 CLSRSC-4006: Removing Oracle Trace File Analyzer (TFA) Collector.
2019/09/16 10:05:16 CLSRSC-4007: Successfully removed Oracle Trace File Analyzer (TFA) Collector.
2019/09/16 10:05:18 CLSRSC-591: successfully downgraded Oracle Clusterware stack on this node
root@dbhost1:/export/home/oracle# 2019/09/16 10:05:55 CLSRSC-4002: Successfully installed Oracle Trace File Analyzer (TFA) Collector.


Downgrade on node 2( dbhost2)

login as root and move to a path where oracle has write permission

root$ cd /export/home/oracle

/sharearea/crs/grid19c/crs/install/rootcrs.sh -downgrade

root@dbhost2:# /sharearea/crs/grid19c/crs/install/rootcrs.sh -downgrade

Using configuration parameter file: /sharearea/crs/grid19c/crs/install/crsconfig_params
The log of current session can be found at:
  /sharearea/orabase/crsdata/dbhost2/crsconfig/crsdowngrade_dbhost2_2019-09-16_10-10-47AM.log
2019-09-16 10:11:04.631 [1] gipcmodClsaBind: Clsa bind
2019-09-16 10:11:04.631 [1] gipcmodClsaBind: Clsa bind, endp 103ee91e0 [00000000000001e9] { gipcEndpoint : localAddr 'clsc://(ADDRESS=(PROTOCOL=ipc)(KEY=)(GIPCID=00000000-00000000-0))', remoteAddr 'clsc://(ADDRESS=(PROTOCOL=ipc)(KEY=OHASD_UI_SOCKET)(GIPCID=00000000-00000000-0))', numPend 0, numReady 0, numDone 0, numDead 0, numTransfer 0, objFlags 0x0, pidPeer 0, readyRef 0, ready 0, wobj 103eeb0a0, sendp 103f9e820 status 13flags 0x21080710, flags-2 0x0, usrFlags 0x0 }
2019-09-16 10:11:04.631 [1] gipcmodClsaSetFast: IPC Clsa with fast clsa, endp 103ee91e0 [00000000000001e9] { gipcEndpoint : localAddr 'clsc://(ADDRESS=(PROTOCOL=ipc)(KEY=)(GIPCID=00000000-00000000-0))', remoteAddr 'clsc://(ADDRESS=(PROTOCOL=ipc)(KEY=OHASD_UI_SOCKET)(GIPCID=00000000-00000000-0))', numPend 0, numReady 0, numDone 0, numDead 0, numTransfer 0, objFlags 0x0, pidPeer 0, readyRef 0, ready 0, wobj 103eeb0a0, sendp 103f9e820 status 13flags 0xa1080710, flags-2 0x0, usrFlags 0x0 }
2019-09-16 10:11:04.631 [1] gipcmodClsaCompleteRequest: [clsa]  stared for req 103eea7b0 [00000000000001ee] { gipcConnectRequest : addr 'clsc://(ADDRESS=(PROTOCOL=ipc)(KEY=OHASD_UI_SOCKET)(GIPCID=8a08364e-459c1999-52758))', parentEndp 103ee91e0, ret gipcretSuccess (0), objFlags 0x0, reqFlags 0x2 }
2019-09-16 10:11:04.631 [1] gipcmodClsaCompleteConnect: [clsa]  completed connect on endp 103ee91e0 [00000000000001e9] { gipcEndpoint : localAddr 'clsc://(ADDRESS=(PROTOCOL=ipc)(KEY=)(GIPCID=459c1999-8a08364e-31594))', remoteAddr 'clsc://(ADDRESS=(PROTOCOL=ipc)(KEY=OHASD_UI_SOCKET)(GIPCID=8a08364e-459c1999-52758))', numPend 4, numReady 1, numDone 2, numDead 0, numTransfer 0, objFlags 0x0, pidPeer 52758, readyRef 0, ready 0, wobj 103eeb0a0, sendp 103f9e820 status 13flags 0xa1082712, flags-2 0x100, usrFlags 0x0 }
2019-09-16 10:11:04.631 [1] gipcmodClsaCheckCompletion: username, state 4, endp 103ee91e0 [00000000000001e9] { gipcEndpoint : localAddr 'clsc://(ADDRESS=(PROTOCOL=ipc)(KEY=)(GIPCID=459c1999-8a08364e-31594))', remoteAddr 'clsc://(ADDRESS=(PROTOCOL=ipc)(KEY=OHASD_UI_SOCKET)(GIPCID=8a08364e-459c1999-52758))', numPend 4, numReady 0, numDone 3, numDead 0, numTransfer 0, objFlags 0x0, pidPeer 52758, readyRef 0, ready 0, wobj 103eeb0a0, sendp 103f9e820 status 0flags 0xa1002716, flags-2 0x100, usrFlags 0x0 }
2019-09-16 10:11:04.631 [1] gipcmodClsaCheckCompletion: username CLSA, modendp 4, userData 103f2afd0
2019-09-16 10:11:04.632 [1] gipcmodClsaCompleteRequest: [clsa]  stared for req 103d6f570 [00000000000001fe] { gipcSendRequest : addr '', data 103eea7b0, len 627, olen 627, parentEndp 103ee91e0, ret gipcretSuccess (0), objFlags 0x0, reqFlags 0x2 }
2019-09-16 10:11:04.654 [1] gipcmodClsaCompleteRequest: [clsa]  stared for req 103d6f570 [0000000000000200] { gipcReceiveRequest : peerName 'clsc_ipc', data 103eea8f8, len 502, olen 502, off 0, parentEndp 103ee91e0, ret gipcretSuccess (0), objFlags 0x0, reqFlags 0x2 }
2019-09-16 10:11:04.655 [1] gipcmodClsaDisconnect: [clsa] disconnect issued on endp 103ee91e0 [00000000000001e9] { gipcEndpoint : localAddr 'clsc://(ADDRESS=(PROTOCOL=ipc)(KEY=)(GIPCID=459c1999-8a08364e-31594))', remoteAddr 'clsc://(ADDRESS=(PROTOCOL=ipc)(KEY=OHASD_UI_SOCKET)(GIPCID=8a08364e-459c1999-52758))', numPend 5, numReady 0, numDone 0, numDead 0, numTransfer 0, objFlags 0x0, pidPeer 52758, readyRef 0, ready 0, wobj 103eeb0a0, sendp 103f9e820 status 0flags 0xa1002716, flags-2 0x100, usrFlags 0x0 }
2019-09-16 10:11:04.655 [1] gipcmodClsaDisconnect: [clsa] disconnect issued on endp 103ee91e0 [00000000000001e9] { gipcEndpoint : localAddr 'clsc://(ADDRESS=(PROTOCOL=ipc)(KEY=)(GIPCID=459c1999-8a08364e-31594))', remoteAddr 'clsc://(ADDRESS=(PROTOCOL=ipc)(KEY=OHASD_UI_SOCKET)(GIPCID=8a08364e-459c1999-52758))', numPend 0, numReady 5, numDone 0, numDead 0, numTransfer 0, objFlags 0x0, pidPeer 52758, readyRef 0, ready 0, wobj 103eeb0a0, sendp 103f9e820 status 0flags 0xa700271e, flags-2 0x100, usrFlags 0x0 }
CRS-4123: Oracle High Availability Services has been started.
CRS-2672: Attempting to start 'ora.evmd' on 'dbhost2'
CRS-2672: Attempting to start 'ora.mdnsd' on 'dbhost2'
CRS-2676: Start of 'ora.mdnsd' on 'dbhost2' succeeded
CRS-2676: Start of 'ora.evmd' on 'dbhost2' succeeded
CRS-2672: Attempting to start 'ora.gpnpd' on 'dbhost2'
CRS-2676: Start of 'ora.gpnpd' on 'dbhost2' succeeded
CRS-2672: Attempting to start 'ora.cssdmonitor' on 'dbhost2'
CRS-2672: Attempting to start 'ora.gipcd' on 'dbhost2'
CRS-2676: Start of 'ora.cssdmonitor' on 'dbhost2' succeeded
CRS-2676: Start of 'ora.gipcd' on 'dbhost2' succeeded
CRS-2672: Attempting to start 'ora.cssd' on 'dbhost2'
CRS-2672: Attempting to start 'ora.diskmon' on 'dbhost2'
CRS-2676: Start of 'ora.diskmon' on 'dbhost2' succeeded
CRS-2676: Start of 'ora.cssd' on 'dbhost2' succeeded
CRS-2672: Attempting to start 'ora.crf' on 'dbhost2'
CRS-2672: Attempting to start 'ora.ctssd' on 'dbhost2'
CRS-2672: Attempting to start 'ora.cluster_interconnect.haip' on 'dbhost2'
CRS-2676: Start of 'ora.crf' on 'dbhost2' succeeded
CRS-2676: Start of 'ora.ctssd' on 'dbhost2' succeeded
CRS-2676: Start of 'ora.cluster_interconnect.haip' on 'dbhost2' succeeded
CRS-2672: Attempting to start 'ora.asm' on 'dbhost2'
CRS-2676: Start of 'ora.asm' on 'dbhost2' succeeded
CRS-2672: Attempting to start 'ora.storage' on 'dbhost2'
CRS-2676: Start of 'ora.storage' on 'dbhost2' succeeded
CRS-2672: Attempting to start 'ora.crsd' on 'dbhost2'
CRS-2676: Start of 'ora.crsd' on 'dbhost2' succeeded
2019/09/16 10:26:12 CLSRSC-338: Successfully downgraded OCR to version 12.1.0.2.0
CRS-2672: Attempting to start 'ora.crf' on 'dbhost2'
CRS-2676: Start of 'ora.crf' on 'dbhost2' succeeded
CRS-2672: Attempting to start 'ora.crsd' on 'dbhost2'
CRS-2676: Start of 'ora.crsd' on 'dbhost2' succeeded
2019/09/16 10:27:09 CLSRSC-4006: Removing Oracle Trace File Analyzer (TFA) Collector.
2019/09/16 10:27:52 CLSRSC-4007: Successfully removed Oracle Trace File Analyzer (TFA) Collector.
2019/09/16 10:27:54 CLSRSC-591: successfully downgraded Oracle Clusterware stack on this node
2019/09/16 10:27:55 CLSRSC-640: To complete the downgrade operation, ensure that the node inventory on all nodes points to the configured Grid Infrastructure home '/crs/app/oracle/product/grid12c'.
2019/09/16 10:27:56 CLSRSC-592: Run 'crsctl start crs' from home /crs/app/oracle/product/grid12c on each node to complete downgrade.
root@dbhost2:/export/home/oracle# 2019/09/16 10:28:38 CLSRSC-4002: Successfully installed Oracle Trace File Analyzer (TFA) Collector.


4. Remove the 19c grid_home from Active cluster inventory: ( only from one node)

Run this as oracle user from 19C GRID HOME, This need to be run only from one node

cd /sharearea/crs/grid19c/oui/bin

oracle$./runInstaller -nowait -waitforcompletion -ignoreSysPrereqs -updateNodeList -silent CRS=false  
ORACLE_HOME=/sharearea/crs/grid19c "CLUSTER_NODES=dbhost1,dbhost2" -doNotUpdateNodeList

Starting Oracle Universal Installer...

Checking swap space: must be greater than 500 MB.   Actual 470964 MB    Passed
The inventory pointer is located at /var/opt/oracle/oraInst.loc
You can find the log of this install session at:
 /crs/app/oraInventory/logs/UpdateNodeList2019-09-16_10-33-44AM.log
'UpdateNodeList' was successful.

5. Update the active cluster inventory with ORACLE 12C grid home ( only from one node)

Run this as oracle user from 12C GRID HOME, This need to be run only from one node

cd /crs/app/oracle/product/grid12c/oui/bin

oracle$ ./runInstaller -nowait -waitforcompletion -ignoreSysPrereqs -updateNodeList -silent CRS=true  
ORACLE_HOME=/crs/app/oracle/product/grid12c "CLUSTER_NODES=dbhost1,dbhost2"

Starting Oracle Universal Installer...

Checking swap space: must be greater than 500 MB.   Actual 470673 MB    Passed
The inventory pointer is located at /var/opt/oracle/oraInst.loc
'UpdateNodeList' was successful.

6. START THE CRS FROM ORACLE 12C GRID HOME

--- node 1 :

root@dbhost1:/crs/app/oracle/product/grid12c/bin# ./crsctl start crs
CRS-4123: Oracle High Availability Services has been started.

--- node 2 :

root@dbhost2:/crs/app/oracle/product/grid12c/bin# ./crsctl start crs
CRS-4123: Oracle High Availability Services has been started.

7. Remove MGMTDB service from cluster.

REMOVE MGMT SERVICE:

oracle@dbhost1:~$ srvctl remove mgmtdb
Remove the database _mgmtdb? (y/[n]) y


8.Check crs active version on both nodes:

oracle@dbhost1:~$ crsctl query crs softwareversion
Oracle Clusterware version on node [dbhost1] is [12.1.0.2.0]

oracle@dbhost1:~$ crsctl query crs activeversion

Oracle Clusterware active version on the cluster is [12.1.0.2.0]


9.Create the MGMTDB CONTAINER DB:

Here mgmtdb will be created inside +MGMT diskgroup . Make sure +MGMT diskgroup is mounted .

/crs/app/oracle/product/grid12c/bin/dbca -silent -createDatabase -createAsContainerDatabase true 
-templateName MGMTSeed_Database.dbc -sid -MGMTDB -gdbName _mgmtdb -storageType ASM -diskGroupName +MGMT 
-datafileJarLocation /crs/app/oracle/product/grid12c/assistants/dbca/templates -characterset AL32UTF8 
-autoGeneratePasswords -skipUserTemplateCheck



Registering database with Oracle Grid Infrastructure
5% complete
Copying database files
7% complete
9% complete
16% complete
23% complete
30% complete
41% complete
Creating and starting Oracle instance
43% complete
48% complete
49% complete
50% complete
55% complete
60% complete
61% complete
64% complete
Completing Database Creation
68% complete
79% complete
89% complete
100% complete
Look at the log file "/crs/app/grid/cfgtoollogs/dbca/_mgmtdb/_mgmtdb1.log" for further details.


10.Create the MGMTDB PDB:

 /crs/app/oracle/product/grid12c/bin/dbca -silent -createPluggableDatabase -sourceDB -MGMTDB -pdbName cluster_name -createPDBFrom 
RMANBACKUP -PDBBackUpfile  /crs/app/oracle/product/grid12c/assistants/dbca/templates/mgmtseed_pdb.dfb -
PDBMetadataFile  /crs/app/oracle/product/grid12c/assistants/dbca/templates/mgmtseed_pdb.xml 
-createAsClone true -internalSkipGIHomeCheck

Creating Pluggable Database
4% complete
12% complete
21% complete
38% complete
55% complete
85% complete
Completing Pluggable Database Creation
100% complete
Look at the log file "/crs/app/grid/cfgtoollogs/dbca/_mgmtdb/cluster_name/_mgmtdb.log" for further details.




oracle@dbhost1:...app/oracle/product/grid12c/bin$ srvctl status mgmtdb
Database is enabled
Instance -MGMTDB is running on node dbhost1


We have successfully completed the downgrade activity from 19C GRID TO 12.1.0.2 GRID.