背景介绍
日常的数据库运维过程中,我们常常会遇到DG GAP同步异常的场景。解决的思路主要有:
- 数据量小的情况下,可以使用rman dumplicate重建备库;
- 数据量大的情况下,可以使用rman基于scn进行增量备份恢复备库。
实验环境
类型 | 主库 | 从库 |
---|---|---|
操作系统 | redhat 7.6 | redhat 7.6 |
数据库版本 | 19c | 19c |
主机名 | cct2 | cct1 |
主从配置
首先配置一套基于DG实现主从同步的数据库。
可参考笔者谁说Oracle ADG很难?出来挨打~文档进行ADG搭建。
模拟故障
保证主从搭建正常的情况下,开始下边模拟故障场景。
# 从库使用root用户停止网卡,使网络中断。
[root@cct1 ~]$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:8b:ac:5b brd ff:ff:ff:ff:ff:ff
inet 192.168.56.22/24 brd 192.168.56.255 scope global noprefixroute enp0s3
valid_lft forever preferred_lft forever
inet6 fe80::d127:7cba:59f8:3f1e/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:95:69:b5 brd ff:ff:ff:ff:ff:ff
# down掉网卡,此时主库LNS进程无法将redo日志传输到备库中
[root@cct1 ~]$ ifdown enp0s3
# 主库切换日志
SQL> alter system swtich logfile;
SQL> /
SQL> /
SQL> /
# 获取主库归档路径
SQL> show parameter log_archive_dest_1
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------------------------------------------------------------------
log_archive_dest_1 string LOCATION=/u01/app/arch VALID_FOR(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=cctde
# 删除主库归档
[oracle@cct2 ~]$ cd /u01/app/arch
[oracle@cct2 ~]$ rm -f *
故障定位
查看备库当前同步进程的状态,可看出RFS缺少接收进程。
查看备库的日志,获取到错误信息,可看出从库无法ping通主库。