克隆数据库home
通过clone.pl将 Oracle 数据库 home 克隆到另一个地方可能比您想象的要复杂,尤其是在 RAC 环境中。
尽管它在 19c 中仍然有效,但clone.pl已被弃用,将来可能会被删除。Oracle 建议我们改为对新主目录执行纯软件安装。
在这篇文章中,我们介绍了在单实例数据库和 RAC 数据库中将数据库 home 克隆到另一个地方的正式方法。
请注意,在这种情况下我们没有克隆或移动 ORACLE_BASE。
单实例数据库
我们采取以下步骤将 Oracle 主目录克隆到另一个目录。
以下是步骤:
1.关闭数据库
在将任何内容复制到新位置之前,我们必须确保所有 Oracle 服务都已停止。这里我们通过dbshut关闭数据库
[oracle@test ~]$ dbshut $ORACLE_HOME
Processing Database instance "ORCLCDB": log file /u01/app/oracle/product/19.3.0/db_1/rdbms/log/shutdown.log
2.复制home文件
在这种情况下,我们将原始 Oracle 主目录复制到新主目录 /oracle/product/19.3.0/db_1。
[root@test ~]# mkdir -p /oracle/product/19.3.0/db_1
[root@test ~]# chown -R oracle:oinstall /oracle
[root@test ~]# cp -rp /u01/app/oracle/product/19.3.0/db_1 /oracle/product/19.3.0/
[root@test ~]# echo $?
0
3.更新ORACLE_HOME
由于我们已经复制了新家,我们应该更新环境变量ORACLE_HOME。
[oracle@test ~]$ vi ~/.bash_profile
...
ORACLE_HOME=/oracle/product/19.3.0/db_1
[oracle@test ~]$ . ~/.bash_profile
[oracle@test ~]$ echo $ORACLE_HOME
/oracle/product/19.3.0/db_1
4.运行clone.pl
接下来,我们执行一个 perl 可执行文件clone.pl来自动为我们自己配置新的home。在命令中,ORACLE_HOME指向新路径,而ORACLE_BASE保持不变。
[oracle@test ~]$ $ORACLE_HOME/perl/bin/perl $ORACLE_HOME/clone/bin/clone.pl ORACLE_HOME_NAME="OraDB19Home2" ORACLE_BASE="/u01/app/oracle" ORACLE_HOME="/oracle/product/19.3.0/db_1"
[INFO] [INS-32183] Use of clone.pl is deprecated in this release. Clone operation is equivalent to performing a Software Only installation from the image.
You must use /oracle/product/19.3.0/db_1/runInstaller script available to perform the Software Only install. For more details on image based installation, refer to help documentation.
Starting Oracle Universal Installer...
You can find the log of this install session at:
/u01/app/oraInventory/logs/cloneActions2022-11-11_10-24-13PM.log
.................................................. 5% Done.
.................................................. 10% Done.
.................................................. 15% Done.
.................................................. 20% Done.
.................................................. 25% Done.
.................................................. 30% Done.
.................................................. 35% Done.
.................................................. 40% Done.
.................................................. 45% Done.
.................................................. 50% Done.
.................................................. 55% Done.
.................................................. 60% Done.
.................................................. 65% Done.
.................................................. 70% Done.
.................................................. 75% Done.
.................................................. 80% Done.
.................................................. 85% Done.
..........
Copy files in progress.
Copy files successful.
Link binaries in progress.
..........
Link binaries successful.
Setup files in progress.
..........
Setup files successful.
Setup Inventory in progress.
Setup Inventory successful.
..........
Finish Setup successful.
The cloning of OraDB19Home2 was successful.
Please check '/u01/app/oraInventory/logs/cloneActions2022-11-11_10-24-13PM.log' for more details.
Setup Oracle Base in progress.
Setup Oracle Base successful.
.................................................. 95% Done.
As a root user, execute the following script(s):
1. /oracle/product/19.3.0/db_1/root.sh
.................................................. 100% Done.
在命令中,ORACLE_HOME_NAME是可选的。如果你不在意新home的名字,你可以忽略它。
5.运行root.sh
我们按照说明运行root.sh。
[root@test ~]# /oracle/product/19.3.0/db_1/root.sh
Check /oracle/product/19.3.0/db_1/install/root_ora19c1.example.com_2022-11-11_23-05-22-968505112.log for the output of root script
让我们看看inventory中有什么。
[oracle@ora19c1 ~]$ cat /u01/app/oraInventory/ContentsXML/inventory.xml
...
<HOME NAME="OraDB19Home1" LOC="/u01/app/oracle/product/19.3.0/db_1" TYPE="O" IDX="1"/>
<HOME NAME="OraDB19Home2" LOC="/oracle/product/19.3.0/db_1" TYPE="O" IDX="2"/>
现在我们有了另一个数据库home。
6.更新/etc/oratab
由于我们已将 ORACLE_HOME 切换到新位置,因此我们开始使用更新/etc/oratab的新主目录。
[oracle@test ~]$ vi /etc/oratab
ORCLCDB:/oracle/product/19.3.0/dbhome_1:Y
7.启动数据库
[oracle@test ~]$ dbstart $ORACLE_HOME
Processing Database instance "ORCLCDB": log file /oracle/product/19.3.0/db_1/rdbms/log/startup.log
8.测试连接
C:\Users\edchen>sqlplus system/password@orclcdb
...
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
SQL>
完成
RAC数据库
我们采取以下步骤将 Oracle 主目录克隆到 RAC 数据库的另一个目录。
以下是步骤:
1.关闭数据库
在将任何内容复制到新位置之前,我们必须确保数据库服务已停止。这里我们通过srvctl关闭数据库
[oracle@primary01 ~]$ srvctl stop database -d orclcdb
[oracle@primary01 ~]$ srvctl status database -d orclcdb
Instance ORCLCDB1 is not running on node primary01
Instance ORCLCDB2 is not running on node primary02
2.复制home文件
我们应该通过root将原始数据库home复制到集群所有节点上的新位置。
节点 1
[root@primary01 ~]# mkdir -p /oracle/product/19.3.0/db_1
[root@primary01 ~]# chown -R oracle:oinstall /oracle
[root@primary01 ~]# cp -rp /u01/app/oracle/product/19.3.0/db_1 /oracle/product/19.3.0/
节点 2
[root@primary02 ~]# mkdir -p /oracle/product/19.3.0/db_1
[root@primary02 ~]# chown -R oracle:oinstall /oracle
[root@primary02 ~]# cp -rp /u01/app/oracle/product/19.3.0/db_1 /oracle/product/19.3.0/
3.更新ORACLE_HOME
我们使用所有节点上的新位置更新环境变量ORACLE_HOME 。
节点 1
[oracle@primary01 ~]$ vi ~/.bash_profile
...
ORACLE_HOME=/oracle/product/19.3.0/db_1
[oracle@primary01 ~]$ . ~/.bash_profile
[oracle@primary01 ~]$ echo $ORACLE_HOME
节点 2
[oracle@primary02 ~]$ vi ~/.bash_profile
...
ORACLE_HOME=/oracle/product/19.3.0/db_1
[oracle@primary02 ~]$ . ~/.bash_profile
[oracle@primary02 ~]$ echo $ORACLE_HOME
4.运行clone.pl
接下来,我们执行clone.pl来为我们自己自动配置新home。在命令中,ORACLE_HOME指向新路径,而ORACLE_BASE保持不变。
节点 1
[oracle@primary01 ~]$ $ORACLE_HOME/perl/bin/perl $ORACLE_HOME/clone/bin/clone.pl ORACLE_HOME_NAME="OraDB19Home2" ORACLE_BASE="/u01/app/oracle" ORACLE_HOME="/oracle/product/19.3.0/db_1" CLUSTER_NODES="{primary01,primary02}" LOCAL_NODE=primary01
[INFO] [INS-32183] Use of clone.pl is deprecated in this release. Clone operation is equivalent to performing a Software Only installation from the image.
You must use /oracle/product/19.3.0/db_1/runInstaller script available to perform the Software Only install. For more details on image based installation, refer to help documentation.
Starting Oracle Universal Installer...
You can find the log of this install session at:
/u01/app/oraInventory/logs/cloneActions2022-11-14_01-36-08AM.log
.................................................. 5% Done.
.................................................. 10% Done.
.................................................. 15% Done.
.................................................. 20% Done.
.................................................. 25% Done.
.................................................. 30% Done.
.................................................. 35% Done.
.................................................. 40% Done.
.................................................. 45% Done.
.................................................. 50% Done.
.................................................. 55% Done.
.................................................. 60% Done.
.................................................. 65% Done.
.................................................. 70% Done.
.................................................. 75% Done.
.................................................. 80% Done.
.................................................. 85% Done.
..........
Copy files in progress.
Copy files successful.
Link binaries in progress.
..........
Link binaries successful.
Setup files in progress.
..........
Setup files successful.
Setup Inventory in progress.
Setup Inventory successful.
..........
Finish Setup successful.
The cloning of OraDB19Home2 was successful.
Please check '/u01/app/oraInventory/logs/cloneActions2022-11-14_01-36-08AM.log' for more details.
Setup Oracle Base in progress.
Setup Oracle Base successful.
.................................................. 95% Done.
As a root user, execute the following script(s):
1. /oracle/product/19.3.0/db_1/root.sh
Execute /oracle/product/19.3.0/db_1/root.sh on the following nodes:
[primary01]
.................................................. 100% Done.
在命令中,ORACLE_HOME_NAME是可选的。如果你不在意新home的名字,你可以忽略它。
节点 2
[oracle@primary02 ~]$ $ORACLE_HOME/perl/bin/perl $ORACLE_HOME/clone/bin/clone.pl ORACLE_HOME_NAME="OraDB19Home2" ORACLE_BASE="/u01/app/oracle" ORACLE_HOME="/oracle/product/19.3.0/db_1" CLUSTER_NODES="{primary01,primary02}" LOCAL_NODE=primary02
[INFO] [INS-32183] Use of clone.pl is deprecated in this release. Clone operation is equivalent to performing a Software Only installation from the image.
You must use /oracle/product/19.3.0/db_1/runInstaller script available to perform the Software Only install. For more details on image based installation, refer to help documentation.
Starting Oracle Universal Installer...
You can find the log of this install session at:
/u01/app/oraInventory/logs/cloneActions2022-11-14_01-45-38AM.log
.................................................. 5% Done.
.................................................. 10% Done.
.................................................. 15% Done.
.................................................. 20% Done.
.................................................. 25% Done.
.................................................. 30% Done.
.................................................. 35% Done.
.................................................. 40% Done.
.................................................. 45% Done.
.................................................. 50% Done.
.................................................. 55% Done.
.................................................. 60% Done.
.................................................. 65% Done.
.................................................. 70% Done.
.................................................. 75% Done.
.................................................. 80% Done.
.................................................. 85% Done.
..........
Copy files in progress.
Copy files successful.
Link binaries in progress.
..........
Link binaries successful.
Setup files in progress.
..........
Setup files successful.
Setup Inventory in progress.
Setup Inventory successful.
..........
Finish Setup successful.
The cloning of OraDB19Home2 was successful.
Please check '/u01/app/oraInventory/logs/cloneActions2022-11-14_01-45-38AM.log' for more details.
Setup Oracle Base in progress.
Setup Oracle Base successful.
.................................................. 95% Done.
As a root user, execute the following script(s):
1. /oracle/product/19.3.0/db_1/root.sh
Execute /oracle/product/19.3.0/db_1/root.sh on the following nodes:
[primary02]
.................................................. 100% Done.
5.运行root.sh
我们按照说明在所有节点上运行root.sh。
节点 1
[root@primary01 ~]# /oracle/product/19.3.0/db_1/root.sh
Check /oracle/product/19.3.0/db_1/install/root_primary01.example.com_2022-11-14_01-43-54-491162614.log for the output of root script
然后我们检查这个节点上的inventory。
[oracle@primary01 ~]$ cat /u01/app/oraInventory/ContentsXML/inventory.xml
...
<HOME_LIST>
<HOME NAME="OraGI19Home1" LOC="/u01/app/19.0.0/grid" TYPE="O" IDX="1" CRS="true"/>
<HOME NAME="OraDB19Home1" LOC="/u01/app/oracle/product/19.0.0/db_1" TYPE="O" IDX="2"/>
<HOME NAME="OraDB19Home2" LOC="/oracle/product/19.3.0/db_1" TYPE="O" IDX="3"/>
</HOME_LIST>
节点 2
[root@primary02 ~]# /oracle/product/19.3.0/db_1/root.sh
Check /oracle/product/19.3.0/db_1/install/root_primary02.example.com_2022-11-14_01-52-02-329293496.log for the output of root script
然后我们检查这个节点上的inventory。
[oracle@primary02 ~]$ cat /u01/app/oraInventory/ContentsXML/inventory.xml
...
<HOME_LIST>
<HOME NAME="OraGI19Home1" LOC="/u01/app/19.0.0/grid" TYPE="O" IDX="1" CRS="true"/>
<HOME NAME="OraDB19Home1" LOC="/u01/app/oracle/product/19.0.0/db_1" TYPE="O" IDX="2"/>
<HOME NAME="OraDB19Home2" LOC="/oracle/product/19.3.0/db_1" TYPE="O" IDX="3"/>
</HOME_LIST>
6.srvctl修改数据库
[oracle@primary01 ~]$ srvctl modify database -d orclcdb -o "/oracle/product/19.3.0/db_1"
[oracle@primary01 ~]$ srvctl config database -d orclcdb
...
Oracle home: /oracle/product/19.3.0/db_1
7.启动数据库
要启动 RAC 数据库,我们使用实用程序srvctl。
[oracle@primary01 ~]$ srvctl start database -d orclcdb
[oracle@primary01 ~]$ srvctl status database -d orclcdb
Instance ORCLCDB1 is running on node primary01
Instance ORCLCDB2 is running on node primary02
8.测试连接
C:\Users\edchen>sqlplus system/password@orclcdb
...
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
SQL>
我们已将数据库移至新位置。
来源
How to Clone Oracle Home - Ed Chen Logic
https://logic.edchen.org/how-to-clone-oracle-home/




