本來想對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
最後兩步,我正在查找原因,等待後續更新吧~