Read-Only Oracle Home
After installing Oracle database 21c on Linux, we found that some features are different from our sense. That's because Read-Only ORACLE_HOME is now the default feature since 21c.
Oracle's "Read-only Oracle home" does not really mean unchangeable, it means that the directory now become a place to store product binaries and patched updates only.
oradb21home1
All configuration files now go to a new place ORACLE_BASE_HOME. The default name of home directory is oradb21home1 for Oracle database 21c.
The idea of read-only Oracle home is good, but it changes the way we manage the product. Some rules need to be changed to adapt the new feature.
However, the feature of read-only Oracle home can be switched back to the original mode to operate our databases as usual. Let's see how we revert it by the following steps.
Stop Services
We should stop database related services before doing it.
For a single-instance database, we can do this.
[oracle@test ~]$ dbshut $ORACLE_HOME
Which stops listener and database services.
Copy Configuration Files Back to ORACLE_HOME
There're 2 types of configuration files that you should copy back to ORACLE_HOME.
Database Configuration
We copied all files related to the instance, such as parameter file (PFILE), server parameter file (SPFILE), password file and snapshot controlfile back to ORACLE_HOME.
[oracle@test ~]$ cp -p $ORACLE_BASE/dbs/* $ORACLE_HOME/dbs/
That's right, the server parameter file (SPFILE) in use is at $ORACLE_BASE/dbs, not ORACLE_BASE_HOME.
Network Configuration
We copied all files related to the network, such as listener.ora, tnsnames.ora and sqlnet.ora back to ORACLE_HOME.
Let's see current ORACLE_BASE_HOME. The Oracle command orabasehome points to it.
[oracle@test ~]$ orabasehome
/u01/app/oracle/homes/OraDB21Home1
Then we make a move.
[oracle@test ~]$ cp -p $(orabasehome)/network/admin/* $ORACLE_HOME/network/admin/
Turn Off Read-Only Mode of Oracle Home
We revert the feature by setting a letter N in orabasetab.
[oracle@test ~]$ vi $ORACLE_HOME/install/orabasetab
/u01/app/oracle/product/21.0.0/dbhome_1:/u01/app/oracle:OraDB21Home1:N:
N means that we use the first filed as our oracle base home.
Start Services
We should start database related services to take it effect.
For a single-instance database, we can do this.
[oracle@test ~]$ dbstart $ORACLE_HOME
Which starts listener and database services.
Check Results
We checked the following items to make sure that we have reverted read-only Oracle home to the original mode.
ORACLE_BASE_HOME
We use Oracle command orabasehome to determine current ORACLE_BASE_HOME.
[oracle@test ~]$ orabasehome
/u01/app/oracle/product/21.0.0/dbhome_1
SPFILE Location
SQL> select value from v$parameter where name = 'spfile';
VALUE
--------------------------------------------------------------------------------
/u01/app/oracle/product/21.0.0/dbhome_1/dbs/spfileORCLCDB.ora
Listener File
[oracle@test ~]$ lsnrctl status
...
Listener Parameter File /u01/app/oracle/product/21.0.0/dbhome_1/network/admin/listener.ora
Snapshot Controlfile
RMAN> show snapshot controlfile name;
RMAN configuration parameters for database with db_unique_name ORCLCDB are:
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/21.0.0/dbhome_1/dbs/snapcf_ORCLCDB.f'; # default
They're back.
Hello,
I am not sure if this was tested on 21c only.
On 19c versions, manually changing the file $ORACLE_HOME/install/orabasetab file from Y to N is not working. After doing this, “sqlplus / as sysdba” is failing with ORA-12547: TNS:lost contact.
[oracle@oraclevm ~]$ cat $ORACLE_HOME/install/orabasetab
#orabasetab file is used to track Oracle Home associated with Oracle Base
/u01/app/oracle/product/19.0.0/dbhome_1:/u01/app/oracle:OraDB19Home1:N:
[oracle@oraclevm ~]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 – Production on Tue Jan 23 13:01:00 2024
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
ERROR:
ORA-12547: TNS:lost contact
Enter user-name: ^C
[oracle@oraclevm ~]$
The correct method was to use “roohctl -disable”. When running this command it changes the file $ORACLE_HOME/install/orabasetab from Y to N and no more ORA-12547: TNS:lost contact errors.
Just thought to share my views. Thanks!
Thanks,
Rijesh Chandran
Thanks for your contribution, I’ll update my post later.