Skip to content

如何备份ORACLE_HOME目录(升级或者打补丁前建议备份ORACLE_HOME目录)

可以使用任何喜欢的方式备份 Oracle home 。可以使用任何工具来压缩Oracle Home,比如zip,tar,cpio。个人强烈推荐在安装补丁集或补丁之前备份 Oracle_Home binaries 和 Central Inventory 。这应该作为数据库程序升级或者应用补丁流程标准备份计划中的一部分。

同样,建议关闭源库上的任何数据库,监听进程,从而可以对Oracle Home软件进行冷备份,这并非必须。

然而, 如果你是在安装补丁或者补丁集,Readme中的步骤会要求关闭,这种情况下,建议在计划维护窗口内执行ORACLE_HOME冷备份。在Oracle进程活跃状态下执行备份仍然是有效的,因为任何加载static binaries 或者libraries的进程都不应当持有write lock。重申:这篇文档仅仅讨论备份ORACLE_HOME软件而不是数据库。

 

备份必须由Oracle安装用户或者root用户执行,目的是保证文件的属主和权限正确,我个人建议是用Root备份。

如下是使用tar命令的例子。

1. (建议而非必须) 关闭数据库,监听或者任何其它关联到你在备份的ORACLE_HOME的进程

2. cd 到ORACLE_HOME所在的目录。例如:

cd /u01/app/oracle/product/11.2

3. 备份 ORACLE_HOME 。例如:

tar -pcvf /u01/app/oracle/backup/oracle_home_bkup.tar db1

在上述命令中, ORACLE_HOME 是 /u01/app/oracle/product/11.2/db1 而备份目录是 /u01/app/oracle/backup/

如下是一个还原ORACLE_HOME的例子:

1. (还原的时候这个步骤是必须的) 关闭数据库,监听或者任何其它关联到你在还原的ORACLE_HOME的进程

2. 进入 ORACLE_HOME 所在的目录。例如:

cd /u01/app/oracle/product/11.2

3. 重命名或者移动 ORACLE_HOME 例如:

mv db1 db1_bkup

4. 还原ORACLE_HOME 例如:

tar -pxvf /u01/app/oracle/backup/oracle_home_bkup.tar

在备份前确保有足够的磁盘空间。

Oracle_Home 所注册的Central Inventory同样应该作为备份计划的一部分,与ORACLE_HOME同时备份,从而保证一致性。

取决于不同平台,查看如下文件来确定Central Inventory (oraInventory)的位置:

/var/opt/oracle/oraInst.loc

或者

/etc/oraInst.loc

oraInst.loc文件的内容类似于如下例子:

inventory_loc=/oracle/product/oraInventory
inst_group=dba
测试过程如下:

 

1、检查两台机器的 ORACLE_HOME信息

[root@oral ~]# su – oracle
env [oracle@oral ~]$ env | grep ORA
ORACLE_SID=tes1
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1

[oracle@luda ~]$ env | grep ORA
ORACLE_SID=lldd
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@luda media]#tar –xvf db_1.tar.gz –C /u01/oracle

 

5、设置权限

[root@luda u01]# chown -R oracle:oinstall ./oracle

6、修改 $ORACLE_HOME 中的 oraInst.loc 文件,其实就是填入正确 oraInventory 目录,这个oraInventory 可以不建,但是父目录必须存在,并且Oracle用户可以写入(建目录)。

[oracle@luda oracle]$ cp oraInst.loc{,.bak}?? #做个备份

[oracle@luda u01]$ ls
admin? arclog? flash_recovery_area? oracle? oradata? oraInventory? userbkp

可以发现,之前的这个目录在/u01下,修改之。
[oracle@luda oracle]$ vi oraInst.loc

inventory_loc=/u01/oraInventory
inst_group=oinstall

7、 修改$ORACLE_HOME/clone/config/cs.properties,在最后加上参数-invPtrLoc 指明oraInst.loc 所在的路径。

[oracle@luda 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@luda 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了。

[oracle@luda ~]$ 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/lldd/control01.ctl
/u01/oradata/lldd/control02.ctl
/u01/oradata/lldd/control03.ctl

SQL> select name from v$datafile;

NAME
——————————————————————————–
/u01/oradata/lldd/system01.dbf
/u01/oradata/lldd/undotbs01.dbf
/u01/oradata/lldd/sysaux01.dbf
/u01/oradata/lldd/users01.dbf
/u01/oradata/lldd/example01.dbf
———————————–