Welcome 微信登录

首页 / 数据库 / MySQL / 复制Oracle Home所需要注意的几个问题

      近日通过复制Oracle Home($ORACLE_HOME)目录来安装Oracle的时候遇到了几个问题。      首先建好Oracle的相关OS用户、组还有调整好内核参数,当然还有设置Oracle用户的一些环境变量(~/.bash_profile),对于正规安装过Oracle的朋友来说这都是浮云。      如果源机和目标机的Oracle Home目录一样,用户、组也一样,那直接复制过去后重新用root用户运行一下root.sh就可以了,非常简单。      如果源机和目标机的Oracle Home目录一样,用户、组不一样(主要是用户ID不一样),复制过去后要重新设定一下文件所属 chown -R 用户:组 $ORACLE_HOME,然后 relink all(relink all可以参考这篇文章),再运行一下root.sh就可以了,其实也没什么大不了的。      如果用户、组和Oracle Home目录都不一样,就比较麻烦了,也就是本文的重点内容,一下模拟这个过程。      先介绍一下环境,源机:
1[oracle@test01 oracle]$ echo $ORACLE_BASE 
2/u01/app/oracle
3[oracle@test01 oracle]$ echo $ORACLE_HOME 
4/u01/app/oracle/11.2.0.2
5[oracle@test01 oracle]$ id
6uid=1003(oracle) gid=501(oracle) groups=501(oracle)
      目标机:
1[ora11g@test06 ora11g]$ echo $ORACLE_BASE 
2/u01/app/ora11g
3[ora11g@test06 ora11g]$ echo $ORACLE_BASE 
4/u01/app/ora11g/product/11.2.0.2/db_1
5[ora11g@test06 ora11g]$ id
6uid=731(ora11g) gid=700(oradba) groups=700(oradba)
      首先在源机上对Oracle Home打包,要用root用户执行,并且保留相关的权限,复制到目标机器上:
1[oracle@test01 oracle]$ echo $ORACLE_HOME
2/u01/app/oracle/11.2.0.2
3[oracle@test01 oracle]$ exit
4[oracle@test01 ~]$ cd /u01/app/oracle/
5[root@test01 oracle]# tar zcvfp 11.2.0.2.tar.gz ./11.2.0.2/
6[root@test01 oracle]# scp ./11.2.0.2.tar.gz 10.168.0.206:/u01/app/ora11g/product/11.2.0.2/
      下文就和源机没有什么关系了,在目标机上解压这个压缩包,并替换新的Oracle Home目录,当然还要将文件归属搞好:
01[root@test06 ~]# cd /u01/app/ora11g/product/11.2.0.2/
02[root@test06 11.2.0.2]# tar zxvf 11.2.0.2.tar.gz 
03[root@test06 11.2.0.2]# ll
04total 2129880
05drwxr-xr-x 75   1003 oradba       4096 Nov 20 22:19 11.2.0.2
06-rw-r--r--  1 root   root   2178854174 Jan 21 09:35 11.2.0.2.tar.gz
07drwxr-xr-x  2 ora11g oradba       4096 Jan 21 09:47 db_1
08[root@test06 11.2.0.2]# rm -rf db_1/
09[root@test06 11.2.0.2]# mv 11.2.0.2 db_1
10[root@test06 11.2.0.2]# chown -R ora11g:oradba ./db_1/
      修改 $ORACLE_HOME/rdbms/lib/config.c 将Oracle用户的组名改过来,relink all一下就可以了:
01[root@test06 ~]# su - ora11g
02[ora11g@test06 ~]$ cat $ORACLE_HOME/rdbms/lib/config.c
03  
04/*  SS_DBA_GRP defines the UNIX group ID for sqldba adminstrative access.  */
05/*  Refer to the Installation and User"s Guide for further information.  */
06  
07/* IMPORTANT: this file needs to be in sync with
08              rdbms/src/server/osds/config.c, specifically regarding the
09              number of elements in the ss_dba_grp array.
10 */
11  
12#define SS_DBA_GRP "oradba"
13#define SS_OPER_GRP "oradba"
14#define SS_ASM_GRP "oradba"
15  
16char *ss_dba_grp[] = {SS_DBA_GRP, SS_OPER_GRP, SS_ASM_GRP};   
17[ora11g@test06 ~]$ relink all
      修改 $ORACLE_HOME 中的 oraInst.loc 文件,其实就是填入正确 oraInventory 目录,这个oraInventory 可以不建,但是父目录必须存在,并且Oracle用户可以写入(建目录):
01[ora11g@test06 ~]$ cd $ORACLE_HOME
02[ora11g@test06 db_1]$ cp oraInst.loc{,.bak}
03[ora11g@test06 db_1]$ vim oraInst.loc
04[ora11g@test06 db_1]$ more oraInst.loc*   
05::::::::::::::
06oraInst.loc
07::::::::::::::
08inventory_loc=/u01/app/ora11g/oraInventory
09inst_group=oradba
10::::::::::::::
11oraInst.loc.bak
12::::::::::::::
13inventory_loc=/u01/app/oracle/oraInventory
14inst_group=oradba
      修改 $ORACLE_HOME/clone/config/cs.properties  在最后加上参数-invPtrLoc 指明 oraInst.loc 所在的路径:
1[ora11g@test06 db_1]$ cd $ORACLE_HOME/clone/config
2[ora11g@test06 config]$ cat cs.properties 
3# Copyright (c) 2005, Oracle. All rights reserved.  
4  
5# clone command line
6clone_command_line= -silent -noConfig -nowait -invPtrLoc "/u01/app/ora11g/product/11.2.0.2/db_1/oraInst.loc"
      再去到 $ORACLE_HOME/clone/bin 目录执行一下一个perl脚本:
1./clone.pl
2ORACLE_HOME="/u01/app/ora11g/product/11.2.0.2/db_1"
3ORACLE_BASE="/u01/app/ora11g"
4OSDBA_GROUP="oradba"
5OSOPER_GROUP="oradba"
6OSASM_GROUP="oradba"
7ORACLE_HOME_NAME="OracleHome1"
 
01[ora11g@test06 config]$ cd $ORACLE_HOME/clone/bin
02[ora11g@test06 bin]$ ls
03clone.pl  prepare_clone.pl
04[ora11g@test06 bin]$ ./clone.pl
05[ora11g@test06 bin]> ORACLE_HOME="/u01/app/ora11g/product/11.2.0.2/db_1"
06[ora11g@test06 bin]> ORACLE_BASE="/u01/app/ora11g"
07[ora11g@test06 bin]> OSDBA_GROUP="oradba"
08[ora11g@test06 bin]> OSOPER_GROUP="oradba"
09[ora11g@test06 bin]> OSASM_GROUP="oradba"
10[ora11g@test06 bin]> ORACLE_HOME_NAME="OracleHome1"
      最后按照提示用root用户执行那个 $ORACLE_HOME 的 root.sh 就OK了。Oracle 检查表的数据变动在Linux下使用strace窥视Oracle LGWR进程相关资讯      Oracle教程 
  • Oracle中纯数字的varchar2类型和  (07/29/2015 07:20:43)
  • Oracle教程:Oracle中查看DBLink密  (07/29/2015 07:16:55)
  • [Oracle] SQL*Loader 详细使用教程  (08/11/2013 21:30:36)
  • Oracle教程:Oracle中kill死锁进程  (07/29/2015 07:18:28)
  • Oracle教程:ORA-25153 临时表空间  (07/29/2015 07:13:37)
  • Oracle教程之管理安全和资源  (04/08/2013 11:39:32)
本文评论 查看全部评论 (0)
表情: 姓名: 字数