背景:因汛期将至,客户需要做数据库灾难演练,生产库数据量不大,就100多G 前提:一定要保证有备份,以及相应的环境 过程: 一、 找一台linux 系统安装数据库
源库为rhel6.10 系统下的 oracle 11.2.0.4 rac 双节点,目标环境也需要安装一个 11.2.0.4 的数据库
上传安装包到目标系统上,改参数+ 配置环境变量 + 安装数据库大概需要 20 分钟
2021 年 4 月 19 日 15:10:54 ~ 2021 年 4 月 19 日 15:26:07 安装数据库
一、 开始恢复数据库
1、 把源库完整的数据库备份+ 归档备份 ( 或者归档 ) 传输到目标环境 31.16.7.152 ,备份大概为 120G( 备份会随着数据库数据的变多而增加,数据量影响恢复时间 )
传输备份需要25 分钟左右
拷贝备份过去
2021 年 4 月 19 日 15:30:15 ~ 2021 年 4 月 19 日 15:52:28
2、 更改参数文件里的配置,确保dbname 和之前一样,然后用新的参数文件启动数据库
2021 年 4 月 19 日 16:06:52
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup nomount pfile='/home/oracle/u01/app/oracle/product/11.2.0.4/db_h/dbs/initdfcdata.ora';
3、 然后恢复控制文件
启动到mount 后,因为源数据有其他备份,在新环境用不了,清理掉那些无效备份,然后注册刚才传输过来的备份
crosscheck backup; delete expired backup;
catalog start with '/home/oracle/rman_back/';



4 、源环境和目标环境存储方式不一样,一个 asm ,一个文件系统,所以需转换一下数据文件的存储地方


5、 开始恢复数据库

此时可以观察告警日志,里面会显示正在恢复哪个文件
等待他恢复完成
然后recover
数据库
RUN{set until sequence 46632 thread 1;set until sequence 52198 thread 2;recover database;}
最后启动数据库
扫尾工作:
因为源库是rac
,所以需要清理多余的
redo
组和
undo
,重建
temp
表空间
SQL> col instance format a8
SQL> select thread#,instance,status,enabled from v$thread;
THREAD# INSTANCE STATUS ENABLED
---------- -------- ------ --------
1 dfcdata OPEN PUBLIC
2 dfcdata2 CLOSED PUBLIC
SQL> select group#,thread#,archived,status from v$log;
GROUP# THREAD# ARC STATUS
---------- ---------- --- ----------------
1
1 YES ACTIVE
2
1 NO CURRENT
3
1 YES UNUSED
10
2 YES INACTIVE
11
2 YES UNUSED
12
2 YES UNUSED
6 rows selected.
SQL> alter database disable thread 2 ;
SQL> select name from v$tablespace where name like 'UNDO%';
SQL> show parameter undo_tablespace;
SQL> drop tablespace undotbs2 including contents and datafiles;
恢复完成
2021
年
4
月
19
日
16:51:11
然后重启下数据库,看是否有问题。
至此,数据库已恢复完毕。
