错误背景:
今天早上一早突然发现数据库DG告警邮件。延时达到了一千多分钟。赶紧上去查看了下啥情况。

select sequence# "日志序列",DEST_ID "路径ID",name "备库名", applied "是否应用到备库",
to_char(FIRST_TIME,'yyyy-mm-dd hh24:mi:ss') "日志开始时间",
to_char(COMPLETION_TIME,'yyyy-mm-dd hh24:mi:ss') "日志完成时间"
  from v$archived_log
 where sequence# > (select max(sequence#) - 80 seq from v$archived_log) and DEST_ID !=1;

一查发现从昨天下午两点开始就目标库都没有归档。因为及时发现归档还没被删除,所以找出错误立马解决还是可以继续同步的。根据时间判断应该是昨天下午有什么误操作的原因。因为归档都没投递到备库去,应该是DG节点或者远程归档路径设置错了。看下远程归档报错什么。

  select dest_id,dest_name,error from v$archive_dest WHERE DEST_ID<=3 ;
报错:ORA-16057: Data Guard 配置中没有服务器。

再检查节点配置信息

show parameter log_archive_config 
log_archive_config                   string      dg_config=(zhanky_s,zhanky_ss)

发现果然,把主节点zhanky_p踢出去了。搞彪了,本来要删除zhanky_s,然后搞错了。赶快及时修改回来。

Alter system set log_archive_config='dg_config=(zhanky_p,zhanky_ss)' scope=both;
---下面两条命令是为了快速触发,重新加载参数
alter system set log_archive_dest_state_3=defer scope=both;
alter system set log_archive_dest_state_3=enable scope=both;

改完后发现,还是有问题。想起来zhanky_ss也需要改,然后两边都改完后就恢复正常了。有惊无险,修改数据库一定要谨慎。即使文档再详细也要注意参数。