背景:因汛期将至,客户需要做数据库灾难演练,生产库数据量不大,就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
然后重启下数据库,看是否有问题。

至此,数据库已恢复完毕。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31098809/viewspace-2768818/ ,如需转载,请注明出处,否则将追究法律责任。