目的:记录以处理下一次。回馈网络。
案例:Oracle 11.0.3.0。公司人员交接,发现 DG 归档日志GAP过大,无法直接复制日志文件注册恢复,通过RMAN增量备份数据和控制文件来恢复。
1.Standby库取消恢复管理状态
SQL> alter database recover managed standby database cancel;
2.Standby库确定SCN最小值
SQL> select current_scn from v$database;
假设结果为:
current_scn
-------------
1000
SQL> select min(f.fhscn) from x$kcvfh f, v$datafile d where f.hxfil=d.file# and d.enabled!='READ ONLY';
假设结果为:
min(f.fhscn)
-------------
1001
则最小SCN为 1000,下一步使用到。
3. 在主库做数据库增量和控制文件备份
$ mkdir -p /home/oracle/archbak
$ rman target /
RMAN> backup as compressed backupset incremental from scn 1000 database format '/home/oracle/archbak/stb_arch_%U.bak';
RMAN> backup current controlfile for standby format '/home/oracle/archbak/std_ctl_%U.bak';
4.将主库备份的文件复制到备库
-- 备库:
$ mkdir -p /home/oracle/archbak
-- 主库:
$ scp /home/oracle/archbak/* oracle@orclb:/home/oracle/archbak
************************************************************************************************
* 以下步骤可以通过打开另一个shell窗口查看alert日志实时查看状态 *
* (备库)首先,查看日志路径 *
* SQL> show parameter dump; *
* 找到 background_dump_dest 的 VALUE 值进入对应目录,使用如下命令实时查看 *
* $ tail -100f $VALUE/alert_xxx.log *
*************************************************************************************************
5.将备库重启到 nomount 模式
SQL> shutdown immediate;
SQL> startup nomount;
SQL> exit;
6.备库用 RMAN 恢复控制文件
$ rman target /
RMAN> restore standby controlfile from '/home/oracle/archbak/std_ctl_XXX.bak';
RMAN> exit;
7.将备库启动到 mount 阶段
SQL> alter database mount;
SQL> exit
8.向Standby库控制文件注册数据备份信息
$ rman target /
RMAN> catalog start with '/home/oracle/archbak';
输出:
...
List of Files Unkown to the Database
=====================================
...
Do you really want to catalog the above files (enter YES or NO)? YES -- 此处输入 YES 回车
...
...
(此步运行时第一次找不到备份数据,退出rman重新进又可以)
9.恢复standby库
接上一步
RMAN> recover database noredo;
...
...
Finished recover at XXXX-xx-xx xx:xx:xx
10.启动Standby库到DG恢复进程
SQL> alter database recover managed standby database disconnect from session;
11.验证同步状态
主库:
select name,sequence#,archived,applied from v$archived_log order by 2;
备库:
select name,sequence#,archived,applied from v$archived_log order by 2;
select process,status,client_process,sequence#,block# from v$managed_standby;
12.如果需要,重建broker.
参考文章:
https://blog.csdn.net/badly9/article/details/51363534
https://www.cnblogs.com/ilifeilong/p/7072026.html
https://blog.csdn.net/shiyu1157758655/article/details/79086148