适用于:
Oracle Database - Standard Edition - 版本 12.1.0.1 和更高版本Oracle Universal Installer - 版本 12.1.0.1 和更高版本
Oracle Database - Enterprise Edition - 版本 12.1.0.1 和更高版本
Oracle Database Cloud Schema Service - 版本 N/A 和更高版本
Gen 1 Exadata Cloud at Customer (Oracle Exadata Database Cloud Machine) - 版本 N/A 和更高版本
Generic UNIX
用途
本文档解释了如何使用 OUI 克隆一个已经存在的 Oracle12c 版本1(12.1.0.x)数据库软件。
适用范围
本文档是为需要在服务器上安装 Oracle 数据库软件或者克隆一个已经存在的 Oracle 数据库的 DBA 而写的。
请注意在克隆 Oracle12c 版本1数据库软件前需确认系统中已安装了 Perl 5.6 或更高版本。
注意:在克隆数据库软件到一个新的服务器之前,需确保新的服务器已经满足所有安装数据库软件的前提条件,因为 perl clone.pl(第三步)并不会检查这些前提条件。参照 <Note:169706.1> 或者在线安装文档来得到这些前提条件。
注意:本文档本来是为需要克隆一个单实例(非 RAC)的数据库 HOME 的客户而写,但是如果在克隆时不使用 -invPtrLoc 选项,那么它也适用于克隆一个 CRS/RAC 环境 (CRS/RAC 环境不支持 -invPtrLoc 选项)。 关于克隆 CRS/RAC 环境的更多信息,请参照 11.2 RAC Admin and Deployment Guide 的第8章和第9章。
详细信息
第一步
在源端安装要克隆的Oracle数据库软件。
对 Oracle12c 版本1,安装软件本身(12.1.0.x),之后安装示例光盘中所有需要的产品,之后再安装需要的补丁集及补丁。
第二步
对已存在的源端数据库软件做一个拷贝。如果要克隆到同一台服务器的另一个目录,可以使用 “cp -Rp”命令。
注意:此时不需要停止源端 Oracle 数据库软件之上运行的数据库/监听/agent, 因为这些运行的 process 不会阻塞拷贝的动作。
如:
cp -Rp /u01/app/oracle/product/12.1.0 /u01/app/oracle/product/12.1.0_clone
注意:这条命令可以使用 root 用户来运行也可以使用 $ORACLE_HOME 的属主来运行(如:oracle)。这里需要确保文件的属主不变。因为 $ORACLE_HOME/bin 下的某些文件是属于 root 所有并且设置了 SUID / SGID:
-rws--x--- 1 root oinstall 20872 Apr 24 12:00 nmb
-rws--x--- 1 root oinstall 28720 Apr 24 11:59 nmo
-rwsr-x--- 1 root oinstall 1340408 Sep 25 2011 oradism
所以如果是使用的非 root 用户做的拷贝,那么会碰到下面的错误:
cp: cannot open `$ORACLE_HOME/bin/nmb' for reading: Permission denied
cp: cannot open `$ORACLE_HOME/bin/nmo' for reading: Permission denied
cp: cannot open `$ORACLE_HOME/bin/oradism' for reading: Permission denied
但是在本文档的剩下步骤做完之后(使用 -clone 的参数运行 OUI 并执行 root.sh)。这些文件会被重建,所以上面的错误可以忽略。
也可以使用 tar 命令来把源端的 $ORACLE_HOME 打包:
cd /u01/app/oracle/product/12.1.0
tar -cvf /tmp/source.tar .
之后把它移动到目标端(同一台服务器或者另外的服务器)之后解包:
cd /u01/app/oracle/product/12.1.0_clone
tar -xvf /tmp/source.tar
注意:就像之前提到的那样,这个命令可以使用 root 用户执行或者 $ORACLE_HOME 的属主用户(如: oracle)。
重要的提示:
在进行第三步之前,花一些时间来检查目标端的文件/目录的权限和源端一致是很重要的。
请同时检查链接文件的正确性,确保它们指向的是目标端的文件/目录,而不是源端的文件/目录。如果链接文件的指向不对,重建它们。
同时需要确保 oraInst.loc 存在,否则 clone.pl 会失败:
SEVERE:OUI-10036:Could not create the inventory location. You may not have permission to write to this location.
SEVERE:OUI-10180:Invalid Operating System group name specified.
如果是在 AIX 上做克隆,确保 rootpre.sh 已经在目标端执行过了。可以在 Oracle12c 版本1数据库软件的安装介质里找到 rootpre.sh 文件。
第三步
执行下面的命令来使用 OUI 克隆 Oracle 数据库软件:
cd $ORACLE_HOME/clone/bin
perl
clone.pl ORACLE_HOME="<target_home>"
ORACLE_HOME_NAME="<unique_home_name>"
ORACLE_BASE="<path_for_ORACLE_BASE>"
OSDBA_GROUP=<OSDBA_privileged_group>
OSOPER_GROUP=<OSOPER_privileged_group>
注意:如果不指定 OSDBA_GROUP 和 OSOPER_GROUP 参数,那么在使用 sqlplus 连接数据库时会碰到 ORA-1031 错误(详细信息请参照文档 Note:1061788.1)。
如果服务器上不存在 /etc/oraInst.loc(AIX,Linux)或者 /var/opt/oracle/oraInst.loc(Solaris,HP-UX)文件,那么手工创建一个。这个文件需要包含如下面的一行:
inventory_loc=<path_to_oraInventory>
如:
inventory_loc=/u01/app/oracle/oraInventory
如果 oraInst.loc 已经存在,但是是在另外的目录里,那么编辑
$ORACLE_HOME/clone/config/cs.properties
文件,并在 clone 的命令行里加上"-invPtrLoc <path>/oraInst.loc"这个参数。
如果需要的话,也可以在这个文件中加入"-ignoreSysPrereqs"参数。
另一个 clone 的方法是使用如下的命令:
./runInstaller -clone -silent -ignorePreReq ORACLE_HOME="<target_home>" ORACLE_HOME_NAME="<unique_home_name>" ORACLE_BASE="<path_for_ORACLE_BASE>" oracle_install_OSDBA=OSDBA_privileged_group oracle_install_OSOPER=OSOPER_privileged_group
如果需要的话,在命令行中加入"-invPtrLoc <path>/oraInst.loc"和"-ignoreSysPrereqs"参数。
如果服务器中安装了多个版本的 Perl,那么需要指定 PERL5LIB 环境变量,这样来保证 Perl 的 module 和使用的 perl 版本一致。
注意:需要提供目标端 $ORACLE_HOME 绝对路径(如 /u01/app/oracle/product/12.1.0_clone)。
也要注意:ORACLE_HOME_NAME 必须是唯一的(就是说指定的 ORACLE_HOME_NAME 名字不能已经存在<path>/oraInventory/ContentsXML/inventory.xml文件中)。
注意:如果是把数据库克隆到一个已经存在了
central inventory,并且目标目录之前已经在
<path>/oraInventory/ContentsXML/inventory.xml 文件中存在的服务器,那么你需要在运行
clone 命令前运行下面的命令来把这个目录从 central inventory 中剥离:
./runInstaller -detachHome ORACLE_HOME=<target_home>
如果要克 隆Oracle 12c 版本1客户端软件,那么直接执行 OUI 如下:
./runInstaller -clone -silent -noconfig ORACLE_HOME="<target_home>" ORACLE_HOME_NAME="<unique_home_name>" ORACLE_BASE="<path_for_ORACLE_BASE>" OSDBA_GROUP=OSDBA_privileged_group OSOPER_GROUP=OSOPER_privileged_group
第四步
在 Linux/Unix 上,你需要在目标端执行 root.sh(使用 root 用户)
注意:在执行 root.sh 时,它会直接覆盖 /usr/bin/(oraenv,coraenv,dbhome)文件。并不会提示我们是否可以覆盖并给出选择。如果您需要这些文件,请备份它们。
注意:
* 对于 Windows,使用 setup.exe(而不是 runInstaller)来启动 OUI。
* 日志文件会创建在 central inventory(<path>/oraInventory/logs)和目标端($ORACLE_HOME/clone/logs)中。
已知的问题:
在克隆一个数据库之后,dba_libraries视图包含对老home的参照信息。关于详细,请参照MOS note 2145739.1
参考
NOTE:1061788.1 - Connect as SYSDBA on 11.2 Cloned Home Gives "ORA-1031: Insufficient Privileges" ErrorNOTE:169706.1 - Oracle Database (RDBMS) on Unix AIX,HP-UX,Linux,Mac OS X,Solaris,Tru64 Unix Operating Systems Installation and Configuration Requirements Quick Reference (8.0.5 to 11.2)
NOTE:1351051.1 - Information Center: Install and Configure Database Server/Client Installations
NOTE:300062.1 - How to Clone an Existing RDBMS / Client Installation Using OUI
NOTE:1520299.1 - Primary Note For Oracle Database 12c Release 1 (12.1) Database/Client Installation/Upgrade/Migration Standalone Environment (Non-RAC)