复制ORACLE_HOME目录恢复数据库

时间:2022-03-29 06:26:12

本来想对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