本来想对Oracle测试备份还原的,结果不小心把oracle的ORACLE_HOME目录给删了,还是rm -rf。。。
还好之前做了次冷备,数据文件、控制文件、联机重做日志文件、口令文件、初始化参数都还在。
重新安装固然可以,但是能不能在其他oracle上拷贝一个ORACLE_HOME目录,修改下使用那?
有了想法 咱就试试吧。
参照:http://www.cnblogs.com/killkill/archive/2011/01/21/1941215.html
在2台虚拟机上进行该操作。
被删的机器:hnhc
完好的机器:oral
由于2台机器的Oracle都是按照同一个文档安装的。
[oracle@oral ~]$ id oracle
uid=501(oracle) gid=501(oinstall) groups=501(oinstall),502(dba),504(beoper)
[oracle@hnhc lib]$ id oracle
uid=501(oracle) gid=501(oinstall) groups=501(oinstall),502(dba)
具体操作如下:
1、检查两台机器的 ORACLE_HOME信息
[root@oral ~]# su - oracle
env [oracle@oral ~]$ env | grep ORA
ORACLE_SID=guo
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1
[oracle@hnhc ~]$ env | grep ORA
ORACLE_SID=hckj
ORACLE_BASE=/u01
ORACLE_HOME=/u01/oracle/
2、打包db_1文件
[root@oral db_1]#tar zcvfp db_1.tar.gz db_1 #要保留全来的权限。
3、复制到另一台机器上,本来想用vsftp的,但是老是安装不上,没办法,共享了一个windows文件夹。
[root@oral db_1]#mount.cifs //192.168.1.102/share /media -o user=administrator,pass=123456
[root@oral db_1]#cp db_1.tar.gz /media
4、在另一台机器上也挂载该共享,解压到/u01/oracle中。
[root@hnhc media]#tar –xvf db_1.tar.gz –C /u01/oracle
虚拟机就是慢啊……
5、设置权限
[root@hnhc u01]# chown -R oracle:oinstall ./oracle
6、修改 $ORACLE_HOME 中的 oraInst.loc 文件,其实就是填入正确 oraInventory 目录,这个oraInventory 可以不建,但是父目录必须存在,并且Oracle用户可以写入(建目录)。
[oracle@hnhc oracle]$ cp oraInst.loc{,.bak} #做个备份
[oracle@hnhc u01]$ ls
admin arclog flash_recovery_area oracle oradata oraInventory userbkp
可以发现,我之前的这个目录在/u01下,修改之。
[oracle@hnhc oracle]$ vi oraInst.loc
inventory_loc=/u01/oraInventory
inst_group=oinstall
7、 修改$ORACLE_HOME/clone/config/cs.properties,在最后加上参数-invPtrLoc 指明oraInst.loc 所在的路径。
[oracle@hnhc config]$ vi cs.properties
# Copyright (c) 2005, Oracle. All rights reserved.
# clone command line
clone_command_line= -noConfig -invPtrLoc "/u01/oracle/oraInst.loc"
8、再去到$ORACLE_HOME/clone/bin 目录执行clone.pl的perl脚本:
[oracle@hnhc bin]$ ./clone.pl \
> ORACLE_HOME = "/u01/oracle" \
> ORACLE_HOME_NAME = "OracleHome1" \
> ORACLE_BASE = "/u01" \
> OSDBA_GROUP="dba" \
> OSOPER_GROUP="dba" \
> OSASM_GROUP="dba" \
9、最后用root用户执行那个$ORACLE_HOME 的root.sh 就OK了。
莫名奇妙的是最后两步一直出错,我直接重启了服务器,在用sqlplus竟然直接连接上了,一切正常。。
[oracle@hnhc ~]$ sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on Wed Jan 11 16:01:52 2012
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> connect /as sysdba
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Total System Global Area 285212672 bytes
Fixed Size 1218992 bytes
Variable Size 92276304 bytes
Database Buffers 188743680 bytes
Redo Buffers 2973696 bytes
Database mounted.
Database opened.
SQL> select name from v$controlfile;
NAME
--------------------------------------------------------------------------------
/u01/oradata/hckj/control01.ctl
/u01/oradata/hckj/control02.ctl
/u01/oradata/hckj/control03.ctl
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
/u01/oradata/hckj/system01.dbf
/u01/oradata/hckj/undotbs01.dbf
/u01/oradata/hckj/sysaux01.dbf
/u01/oradata/hckj/users01.dbf
/u01/oradata/hckj/example01.dbf
最后两步,我正在查找原因,等待后续更新吧~
本文出自 “飞舞的菜刀” 博客,请务必保留此出处http://caidao.blog.51cto.com/254338/761906