引言
在我们日常运维数据库中,备份是命,恢复是保命的技能,而Oracle异机恢复,也是我们工作中经常用到的。那什么是Oracle异机恢复呢?顾名思义,就是源机器的Oracle数据库恢复到另外一台机器上,且能在另外一台机器上面运行。事不宜迟,马上我们进入异机恢复的世界~
说明
操作目的:恢复Oracle11.2.0.4版本数据库
前期准备:准备目标机器,并安装好相同版本的CRS软件和Oracle数据库软件,当然还有netbackup agent软件
注意事项:以下操作都是在容灾环境上面执行,不要在生产机器上操作,不要在生产机器上操作,不要在生产机器上操作,还想说几遍。
蓝色斜字体需要根据各环境修改
1、配置并运行环境变量,实例名PROD
$ viPROD.env
exportORACLE_HOME=/oracle/app/11.2.0.4/db_1
export ORACLE_SID=PROD
export ORACLE_BASE=/oracle/app/11.2.0.4
export PATH=$ORACLE_HOME/bin:$PATH
exportLD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
exportCLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export EDITOR=vi
export
export NLS_LANG=american_america.AL32UTF8
export NLS_DATE_FORMAT='yyyy/mm/ddhh24:mi:ss'
umask 022
$ .PROD.env
2、进入netbackup软件目录netbackupdir,找到生产主机名hostname1最近的备份源backup1
# cd /netbackupdir/bin
# ./bplist -Chost_name1-t 4 -l -R /|more
3、配置参数文件,创建相应的目录,启动数据库至nomount状态
$ vi /oracle/app/11.2.0.4/db_1/dbs/initPROD.ora
db_name=PROD
audit_file_dest='/oracle/app/11.2.0.4/admin/PROD/adump'
audit_trail ='db'
db_recovery_file_dest='/oradata/PROD/flash_recovery_area'
db_recovery_file_dest_size=160G
sga_max_size=8G
sga_target=8G
db_block_size=8192
control_files='/oradata/PROD/control01.ctl','/oradata/PROD/control02.ctl'
compatible='11.2.0.4.0'
$ mkdir -p /oracle/app/11.2.0.4/admin/PROD/adump
$ mkdir -p /oradata/PROD/flash_recovery_area
$ sqlplus / as sysdba
SQL> startup nomount pfile='/oracle/app/11.2.0.4/db_1/dbs/initPROD.ora';
4、恢复控制文件,填入netbackup的服务器主机名nbuhostname1,生产主机名hostname1,备份源backup1,修改数据库至mount状态
rman target /
RMAN> run {
allocate channel ch00 type 'SBT_TAPE';
allocate channel ch01 type 'SBT_TAPE';
send 'NB_ORA_SERV=nbuhostname1,NB_ORA_CLIENT=hostname1';
restore controlfile from 'backup1';
release channel ch00;
release channel ch01;
}
RMAN> alter database monut;
5、检查可恢复时间点 (例如时间点:2018/03/08 20:20:52)
RMAN> list backup of archivelog all;
6、恢复数据库
run {
allocate channel ch00 type 'SBT_TAPE';
allocate channel ch01 type 'SBT_TAPE';
allocate channel ch02 type 'SBT_TAPE';
allocate channel ch03 type 'SBT_TAPE';
send 'NB_ORA_SERV=nbuhostname1,NB_ORA_CLIENT=hostname1';
set newname for database to '/oradata/PROD/%b';
restore database;
switch datafile all;
switch tempfile all;
recover database until time "to_date('2018/03/08 20:20:52','yyyy/mm/ddhh24:mi:ss')";
alter databaseopen resetlogs;
release channel ch00;
release channel ch01;
release channel ch02;
release channel ch03;
}
7、创建spfile
$ sqlplus / assysdba
create spfile='/oracle/app/11.2.0.4/db_1/dbs/spfilePROD.ora' from pfile='/oracle/app/11.2.0.4/db_1/dbs/initPROD.ora'
8、大功告成,别忘了验证
验证数据库状态:
$ select instance_name,status from v$instance;
INSTANCE_NAME STATUS
---------------- ------------
PROD OPEN
验证数据恢复的时间:通过查询恢复后的最后产生的快照时间,与恢复时间点:2018/03/08 20:20:52对比,若时间差不多则说明当前数据库的确恢复到恢复时间点。
select SNAP_ID,TO_CHAR (end_interval_time, 'yyyymmdd hh24:mi:ss'),b.name from dba_hist_snapshot,v$database b order by snap_id;
SNAP_ID TO_CHAR(END_INTER NAME
---------- ----------------- ---------
24401 20180308 18:00:41 PROD
24402 20180308 19:00:43 PROD
24403 20180308 20:00:45 PROD
---END---
领取专属 10元无门槛券
私享最新 技术干货