Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9267928
  • 博文数量: 1669
  • 博客积分: 16831
  • 博客等级: 上将
  • 技术积分: 12594
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-25 07:23
个人简介

柔中带刚,刚中带柔,淫荡中富含柔和,刚猛中荡漾风骚,无坚不摧,无孔不入!

文章分类

全部博文(1669)

文章存档

2023年(4)

2022年(1)

2021年(10)

2020年(24)

2019年(4)

2018年(19)

2017年(66)

2016年(60)

2015年(49)

2014年(201)

2013年(221)

2012年(638)

2011年(372)

分类: Oracle

2012-01-17 10:12:16

复制Oracle Home所需要注意的几个问题
[日期:2011-02-02] 来源:Linux社区  作者:killkill
 
 
      近日通过复制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 
 
6 uid=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 
 
6 uid=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 
 
04 total 2129880 
 
05 drwxr-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 
 
07 drwxr-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   
 
16 char *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 :::::::::::::: 
 
06 oraInst.loc 
 
07 :::::::::::::: 
 
08 inventory_loc=/u01/app/ora11g/oraInventory 
 
09 inst_group=oradba 
 
10 :::::::::::::: 
 
11 oraInst.loc.bak 
 
12 :::::::::::::: 
 
13 inventory_loc=/u01/app/oracle/oraInventory 
 
14 inst_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 
 
6 clone_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 \ 
 
2 ORACLE_HOME="/u01/app/ora11g/product/11.2.0.2/db_1" \ 
 
3 ORACLE_BASE="/u01/app/ora11g" \ 
 
4 OSDBA_GROUP="oradba" \ 
 
5 OSOPER_GROUP="oradba" \ 
 
6 OSASM_GROUP="oradba" \ 
 
7 ORACLE_HOME_NAME="OracleHome1"
 
 
01 [ora11g@test06 config]$ cd $ORACLE_HOME/clone/bin 
 
02 [ora11g@test06 bin]$ ls 
 
03 clone.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了。
 
阅读(761) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~