通过 RMAN备份恢复搭建Oracle DG

平时都是通过RMAN DUPLICATE来搭建dg,今天遇到了问题,只能改换方法。

一、 奇怪的问题

执行RMAN DUPLICATE时发现数据文件传输十分之慢,在约250M/s的磁盘上传输速度居然只有10M/s左右。检查存储、网络、服务器均无异常。查看源库有remote DB file write等待,搜索发现MOS有相关文档 RMAN Hangs When Creating Standby DB As Duplicate From Active Primary (文档 ID 2512075.1) 。

其中给出的问题症状如下(我们符合前两项):

  • Executing RMAN active duplicate for standby.
  • RMAN hangs with wait event "remote DB file write" on target (primary) DB and "sql*net vector data to client" on auxiliary (standby) database.
  • ASM disks being used for both target database and auxiliary database

但是文档并没有给出问题原因,给出的解决方法是升级操作系统至最新版本,这个对我们来说无法接受,并且之前使用该操作系统也成功搭建过很多次,只能另寻解决方法。

另外NOTE:1676197.1 - RMAN Duplicate hangs when using DCD and TCPS给出了另一个可能导致hang的原因——使用了DCD(sqlnet.ora设置了expire_time),但我们也没用,不符合。

二、 通过RMAN备份恢复搭建DG

到 startup nomount pfile='/xxx/initxxx.ora' 这步及之前都与使用RMAN Duplicate没有区别,不再另外列出

1. 备份源库

# 执行全备,是否使用并行和压缩视情况而定
# 压缩备份语法  backup as compressed backupset database FORMAT '/data/bak/data_%T_%s';
RMAN> 
run {
 allocate channel t1 type disk;
 allocate channel t2 type disk;
 backup database FORMAT '/oradata/backup/data_%T_%s'; 
 release channel t1;
 release channel t2;
}

# 执行控制文件备份
RMAN> backup current controlfile for standby format '/oradata/backup/control.bak';

将备份文件传至目标库

2. 数据恢复

数据文件目录与源库相同时

# 恢复控制文件
RMAN> RESTORE STANDBY CONTROLFILE FROM '/oradata/backup/control.bak';

# 启动数据库到mount状态
RMAN> sql 'alter database mount';

# 恢复数据库
RMAN> catalog start with '/oradata/backup/';
RMAN> restore database;
RMAN> recover database;
# 恢复有报错,可以忽略
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 10/17/2017 09:33:30
RMAN-06054: media recovery requesting unknown archived log for thread 1 with sequence xx  and starting SCN of xxxx

数据文件目录与源库不同时

# 恢复控制文件
RMAN> RESTORE STANDBY CONTROLFILE FROM '/oradata/backup/control.bak';
# 启动数据库到mount状态
RMAN> sql 'alter database mount';
# 恢复数据库
RMAN> catalog start with '/oradata/backup/';
RMAN> Set newname for database to '/xxx/datafile/%b';
RMAN> restore database;
RMAN> recover database;
RMAN> Switch datafile all;

3. 配置DG

创建备库standby日志文件,用于实时同步数据。如果有主库同步过来的需要drop掉用我们新建的,否则做不到实时同步。另外也建议把online redolog建上,否则主从切换后会有问题。

alter system set standby_file_management=manual;

--建n个online redolog
alter database add logfile size 300m;

--建n+1个standby log
alter database add standby logfile size 300M;

alter system set standby_file_management=auto;

应用日志,到追平后open数据库,启用实时日志应用

-- 应用日志
alter database recover managed standby database disconnect from session;
-- 查看alert日志,追平后打开数据库
alter database recover managed standby database cancel;
alter database open;
-- 实时应用日志
alter database recover managed standby database using current logfile disconnect from session parallel 4;

检查主从是否同步

select value from v$dataguard_stats where name='apply lag'; 
select value from v$dataguard_stats where name='transport lag';

参考

RMAN Hangs When Creating Standby DB As Duplicate From Active Primary (文档 ID 2512075.1)

NOTE:1676197.1 - RMAN Duplicate hangs when using DCD and TCPS

Oracle DG--Rman备份集搭建备库-阿里云开发者社区

你可能感兴趣的:(Oracle,灾备,oracle,数据库,sql)