Allow me to ask you a question before going further: why would you like to move ORACLE HOME to another place? You may leave your comment below this post, I am curious about it.
As for me, it's because my client like old-fashioned file structure and don't like Optimal Flexible Architecture (OFA) to be used, which is /u01 prefixed path.
Move ORACLE HOME
Oracle allows us to have multiple ORACLE HOME in a machine, especially when we want to have different versions of Oracle products. To move ORACLE HOME to another place, we take the following steps:
- Prepare to Install Oracle Product
- Install Oracle Software on New Home
- Move Network Configuration Files
- Move Oracle Database
- Deinstall Old ORACLE HOME
- Verify the Persistence of New Home
Prepare to Install Oracle Product
First of all, make new directories for oracle new home by root.
[root@primary ~]# mkdir -p /oracle/ora11ghome
[root@primary ~]# chown -R oracle:dba /oracle
Shutdown all Oracle services like this.
[oracle@primary ~]$ dbshut $ORACLE_HOME
Processing Database instance "ORCL": log file /u01/app/oracle/product/11.2.0/dbhome_1/shutdown.log
Change the environment variables to new locations.
[oracle@primary ~]$ vi ~/.bash_profile
...
export ORACLE_BASE=/oracle
export ORACLE_HOME=/oracle/ora11ghome
export OLD_ORACLE_BASE=/u01/app/oracle
export OLD_ORACLE_HOME=$OLD_ORACLE_BASE/product/11.2.0/dbhome_1
...
[oracle@primary ~]$ . ~/.bash_profile
Install Oracle Software on New Home
Yes, that's correct. We plan to perform a software-only installation instead of cloning the Oracle home, which is what Oracle recommends. Let's see what they say.
This procedure using the clone.pl script is deprecated starting Oracle Database 19c and can be removed in a future release. Hence, Oracle recommends that you use the software-only installation option, available in the database installer, instead of clone.pl to clone your database.
In this step, we should point to the new location during installation.
[oracle@primary ~]$ cd /tmp/database/
[oracle@primary database]$ ./runInstaller
...
Be sure that you select Install database software only at step 3 during OUI installation. Because we'll manually move our database later.
After installation, you may check the oracle inventory for sure.
[oracle@primary database]$ cat /u01/app/oraInventory/ContentsXML/inventory.xml
<?xml version="1.0" standalone="yes" ?>
<!-- Copyright (c) 1999, 2013, Oracle and/or its affiliates.
All rights reserved. -->
<!-- Do not modify the contents of this file by hand. -->
<INVENTORY>
<VERSION_INFO>
<SAVED_WITH>11.2.0.4.0</SAVED_WITH>
<MINIMUM_VER>2.1.0.6.0</MINIMUM_VER>
</VERSION_INFO>
<HOME_LIST>
<HOME NAME="OraDb11g_home1" LOC="/u01/app/oracle/product/11.2.0/dbhome_1" TYPE="O" IDX="1"/>
<HOME NAME="OraDb11g_home2" LOC="/oracle/ora11" TYPE="O" IDX="2"/>
</HOME_LIST>
<COMPOSITEHOME_LIST>
</COMPOSITEHOME_LIST>
</INVENTORY>
As we can see, the new ORACLE HOME is the second HOME in this machine.
Please note that, there's another way that also can install oracle product, which is to run OUI from this path:
[oracle@primary database]$ cd $OLD_ORACLE_HOME/oui/bin
[oracle@primary bin]$ ./runInstaller
...
Both ways bring almost the same results, but I think the first approach is more flexible than this one.
Moreover, you can confirm the installation result in the OUI.
Move Network Configuration Files
Actually, we copied network configuration files instead of moving them.
[oracle@primary bin]$ cp -rp $OLD_ORACLE_HOME/network/admin/* $ORACLE_HOME/network/admin/
[oracle@primary bin]$ cd $ORACLE_HOME/network/admin/
[oracle@primary admin]$ ll
total 20
-rw-r--r--. 1 oracle dba 506 Aug 3 19:09 listener.ora
drwxr-xr-x. 2 oracle oinstall 4096 Feb 13 2018 samples
-rw-r--r--. 1 oracle oinstall 381 Dec 17 2012 shrept.lst
-rw-r--r--. 1 oracle dba 223 Feb 13 2018 sqlnet.ora
-rw-r-----. 1 oracle dba 326 Feb 13 2018 tnsnames.ora
Of course, we have to modify some files for the new home. Since there's a static listener registry in listener.ora, I have to modify the file.
[oracle@primary admin]$ vi listener.ora
...
ADR_BASE_LISTENER = /oracle
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(ORACLE_HOME=/oracle/ora11ghome)
(SID_NAME=ORCL))
)
Now turn to sqlnet.ora.
[oracle@primary admin]$ vi sqlnet.ora
...
ADR_BASE = /oracle
Now we have moved ORACLE HOME to another place. Next, we should move the database (if any) to the new home.
Move Oracle Database
Since I talked about how to move Oracle database to the new home in another post, so I won't mention it here.
Deinstall Old ORACLE HOME
If everything is fine, we can deinstall the old ORACLE HOME. Don't forget to shutdown all database services first.
[oracle@primary ~]$ dbshut $ORACLE_HOME
...
[oracle@primary ~]$ cd $OLD_ORACLE_HOME/deinstall/
[oracle@primary deinstall]$ pwd
/u01/app/oracle/product/11.2.0/dbhome_1/deinstall
[oracle@primary deinstall]$ ./deinstall
Checking for required files and bootstrapping ...
Please wait ...
Location of logs /u01/app/oraInventory/logs/
############ ORACLE DEINSTALL & DECONFIG TOOL START ############
######################### CHECK OPERATION START #########################
## [START] Install check configuration ##
Checking for existence of the Oracle home location /u01/app/oracle/product/11.2.0/dbhome_1
Oracle Home type selected for deinstall is: Oracle Single Instance Database
Oracle Base selected for deinstall is: /u01/app/oracle
Checking for existence of central inventory location /u01/app/oraInventory
Checking for sufficient temp space availability on node(s) : 'primary.example.com'
## [END] Install check configuration ##
Network Configuration check config START
Network de-configuration trace file location: /u01/app/oraInventory/logs/netdc_check2019-01-22_06-54-48-PM.log
Specify all Single Instance listeners that are to be de-configured [LISTENER]:
Network Configuration check config END
Database Check Configuration START
Database de-configuration trace file location: /u01/app/oraInventory/logs/databasedc_check2019-01-22_06-54-56-PM.log
Use comma as separator when specifying list of values as input
Specify the list of database names that are configured in this Oracle home []:
Database Check Configuration END
Enterprise Manager Configuration Assistant START
EMCA de-configuration trace file location: /u01/app/oraInventory/logs/emcadc_check2019-01-22_06-55-04-PM.log
Enterprise Manager Configuration Assistant END
Oracle Configuration Manager check START
OCM check log file location : /u01/app/oraInventory/logs//ocm_check2484.log
Oracle Configuration Manager check END
######################### CHECK OPERATION END #########################
####################### CHECK OPERATION SUMMARY #######################
Oracle Home selected for deinstall is: /u01/app/oracle/product/11.2.0/dbhome_1
Inventory Location where the Oracle home registered is: /u01/app/oraInventory
Following Single Instance listener(s) will be de-configured: LISTENER
No Enterprise Manager configuration to be updated for any database(s)
No Enterprise Manager ASM targets to update
No Enterprise Manager listener targets to migrate
Checking the config status for CCR
Oracle Home exists with CCR directory, but CCR is not configured
CCR check is finished
Do you want to continue (y - yes, n - no)? [n]: y
A log of this session will be written to: '/u01/app/oraInventory/logs/deinstall_deconfig2019-01-22_06-54-46-PM.out'
Any error messages from this session will be written to: '/u01/app/oraInventory/logs/deinstall_deconfig2019-01-22_06-54-46-PM.err'
######################## CLEAN OPERATION START ########################
Enterprise Manager Configuration Assistant START
EMCA de-configuration trace file location: /u01/app/oraInventory/logs/emcadc_clean2019-01-22_06-55-04-PM.log
Updating Enterprise Manager ASM targets (if any)
Updating Enterprise Manager listener targets (if any)
Enterprise Manager Configuration Assistant END
Database de-configuration trace file location: /u01/app/oraInventory/logs/databasedc_clean2019-01-22_06-55-14-PM.log
Network Configuration clean config START
Network de-configuration trace file location: /u01/app/oraInventory/logs/netdc_clean2019-01-22_06-55-14-PM.log
De-configuring Single Instance listener(s): LISTENER
De-configuring listener: LISTENER
Stopping listener: LISTENER
Listener stopped successfully.
Deleting listener: LISTENER
Listener deleted successfully.
Listener de-configured successfully.
De-configuring Listener configuration file...
Listener configuration file de-configured successfully.
De-configuring Naming Methods configuration file...
Naming Methods configuration file de-configured successfully.
De-configuring Local Net Service Names configuration file...
Local Net Service Names configuration file de-configured successfully.
De-configuring backup files...
Backup files de-configured successfully.
The network configuration has been cleaned up successfully.
Network Configuration clean config END
Oracle Configuration Manager clean START
OCM clean log file location : /u01/app/oraInventory/logs//ocm_clean2484.log
Oracle Configuration Manager clean END
Setting the force flag to false
Setting the force flag to cleanup the Oracle Base
Oracle Universal Installer clean START
Detach Oracle home '/u01/app/oracle/product/11.2.0/dbhome_1' from the central inventory on the local node : Done
Delete directory '/u01/app/oracle/product/11.2.0/dbhome_1' on the local node : Done
The Oracle Base directory '/u01/app/oracle' will not be removed on local node. The directory is not empty.
Oracle Universal Installer cleanup was successful.
Oracle Universal Installer clean END
## [START] Oracle install clean ##
Clean install operation removing temporary directory '/tmp/deinstall2019-01-22_06-54-34PM' on node 'primary'
## [END] Oracle install clean ##
######################### CLEAN OPERATION END #########################
####################### CLEAN OPERATION SUMMARY #######################
Following Single Instance listener(s) were de-configured successfully: LISTENER
Cleaning the config for CCR
As CCR is not configured, so skipping the cleaning of CCR configuration
CCR clean is finished
Successfully detached Oracle home '/u01/app/oracle/product/11.2.0/dbhome_1' from the central inventory on the local node.
Successfully deleted directory '/u01/app/oracle/product/11.2.0/dbhome_1' on the local node.
Oracle Universal Installer cleanup was successful.
Oracle deinstall tool successfully cleaned up temporary directories.
#######################################################################
############# ORACLE DEINSTALL & DECONFIG TOOL END #############
Verify the Persistence of New Home
We reboot the database server to verify the result.
[root@primary ~]# init 6
After server booted, we checked all database services.
- Listener:
- Instance:
- Inventory:
[oracle@primary ~]$ lsnrctl status
...
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date 22-JAN-2019 19:04:33
Uptime 0 days 0 hr. 0 min. 36 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /oracle/ora11ghome/network/admin/listener.ora
Listener Log File /oracle/diag/tnslsnr/primary/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=primary)(PORT=1521)))
Services Summary...
Service "ORCL" has 2 instance(s).
Instance "ORCL", status UNKNOWN, has 1 handler(s) for this service...
Instance "ORCL", status READY, has 1 handler(s) for this service...
Service "ORCLXDB" has 1 instance(s).
Instance "ORCL", status READY, has 1 handler(s) for this service...
The command completed successfully
[oracle@primary ~]$ sqlplus / as sysdba
...
SQL> select name, open_mode from v$database;
NAME OPEN_MODE
--------- --------------------
ORCL READ WRITE
SQL> show parameter spfile;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string /oracle/ora11ghome/dbs/spfileO
RCL.ora
[oracle@primary ~]$ cat /u01/app/oraInventory/ContentsXML/inventory.xml
<?xml version="1.0" standalone="yes" ?>
<!-- Copyright (c) 1999, 2013, Oracle and/or its affiliates.
All rights reserved. -->
<!-- Do not modify the contents of this file by hand. -->
<INVENTORY>
<VERSION_INFO>
<SAVED_WITH>11.2.0.4.0</SAVED_WITH>
<MINIMUM_VER>2.1.0.6.0</MINIMUM_VER>
</VERSION_INFO>
<HOME_LIST>
<HOME NAME="OraDb11g_home2" LOC="/oracle/ora11ghome" TYPE="O" IDX="2"/>
<HOME NAME="OraDb11g_home1" LOC="/u01/app/oracle/product/11.2.0/dbhome_1" TYPE="O" IDX="1" REMOVED="T"/>
</HOME_LIST>
<COMPOSITEHOME_LIST>
</COMPOSITEHOME_LIST>
</INVENTORY>
More Considerations
In this case, we chose to install a fresh Oracle software instead of cloning, but if you prefer to cloning for some reason, we do have a tutorial for cloning an Oracle software home to another place by clone.pl.
If you're planning to abandon /u01, you should also consider to move Oracle central inventory before or after moving ORACLE HOME.
If you have deployed scripts that can auto startup database on server's boot-time, you should also modify them in order to align with your new home. Usually, it's /etc/init.d/dbora.