Oracle异机恢复
金蝶云社区-云社区用户O7l87531
云社区用户O7l87531
1人赞赏了该文章 387次浏览 未经作者许可,禁止转载编辑于2019年04月22日 11:20:19

引言在我们日常运维数据库中,备份是命,恢复是保命的技能,而Oracle异机恢复,也是我们工作中经常用到的。那什么是Oracle异机恢复呢?顾名思义,就是源机器的Oracle数据库恢复到另外一台机器上,且能在另外一台机器上面运行。事不宜迟,马上我们进入异机恢复的世界~

说明操作目的:恢复Oracle11.2.0.4版本数据库
前期准备:准备目标机器,并安装好相同版本的CRS软件和Oracle数据库软件,当然还有netbackup agent软件
注意事项:以下操作都是在容灾环境上面执行,不要在生产机器上操作,不要在生产机器上操作,不要在生产机器上操作,还想说几遍。
[i]蓝色斜字体需要根据各环境修改[/i] 1、配置并运行环境变量,实例名[i]PROD[/i]
$ vi [i]PROD[/i].env
exportORACLE_HOME=/oracle/app/11.2.0.4/db_1
export ORACLE_SID=[i]PROD[/i]
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
$ . [i]PROD[/i].env

2、进入netbackup软件目录[i]netbackupdir[/i],找到生产主机名[i]hostname1[/i]最近的备份源[i]backup1[/i]
# cd /[i]netbackupdir[/i]/bin
# ./bplist -C [i]host_name1 [/i]-t 4 -l -R /|more

3、配置参数文件,创建相应的目录,启动数据库至nomount状态
$ vi /oracle/app/11.2.0.4/db_1/dbs/init[i]PROD[/i].ora
db_name=[i]PROD[/i]
audit_file_dest='/oracle/app/11.2.0.4/admin/[i]PROD[/i]/adump'
audit_trail ='db'
db_recovery_file_dest='/oradata/[i]PROD[/i]/flash_recovery_area'
db_recovery_file_dest_size=160G
sga_max_size=8G
sga_target=8G
db_block_size=8192
control_files='/oradata/[i]PROD[/i]/control01.ctl','/oradata/[i]PROD[/i]/control02.ctl'
compatible='11.2.0.4.0'

$ mkdir -p /oracle/app/11.2.0.4/admin/[i]PROD[/i]/adump
$ mkdir -p /oradata/[i]PROD[/i]/flash_recovery_area
$ sqlplus / as sysdba
SQL> startup nomount pfile='/oracle/app/11.2.0.4/db_1/dbs/init[i]PROD[/i].ora';

4、恢复控制文件,填入netbackup的服务器主机名[i]nbuhostname1[/i],生产主机名[i]hostname1[/i],备份源[i]backup1[/i],修改数据库至mount状态
rman target /
RMAN> run {
allocate channel ch00 type 'SBT_TAPE';
allocate channel ch01 type 'SBT_TAPE';
send 'NB_ORA_SERV=[i]nbuhostname1[/i],NB_ORA_CLIENT=[i]hostname1[/i]';
restore controlfile from '[i]backup1[/i]';
release channel ch00;
release channel ch01;
}
RMAN> alter database monut;

5、检查可恢复时间点 (例如时间点:[i]2018/03/08 20:20:52[/i])
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=[i]nbuhostname1[/i],NB_ORA_CLIENT=[i]hostname1[/i]';
set newname for database to '/oradata/[i]PROD[/i]/%b';
restore database;
switch datafile all;
switch tempfile all;
recover database until time "to_date('[i]2018/03/08 20:20:52[/i]','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/spfile[i]PROD[/i].ora' from pfile='/oracle/app/11.2.0.4/db_1/dbs/init[i]PROD[/i].ora'

8、大功告成,别忘了验证
验证数据库状态:
$ select instance_name,status from v$instance;
INSTANCE_NAME STATUS---------------- ------------PROD OPEN 验证数据恢复的时间:通过查询恢复后的最后产生的快照时间,与恢复时间点:[i]2018/03/08 20:20:52[/i]对比,若时间差不多则说明当前数据库的确恢复到恢复时间点。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

赞 1