备库log_archive_dest_2的问题

事情是这样的:
备库的log_archive_dest_2的值和fal_server原先是直接copy主库的(疏忽了,当时没改),但也一样跑起来(主备库的tns是一样的),
这天因为备库开启实时应用发现这个问题。
这个备库报这个东西
ARC5: Archive log rejected (thread 1 sequence 8124) at host 'GZDBDG'
FAL[server, ARC5]: FAL archive failed, see trace file.
‘GZDBDG’是备库的tns
于是就把备库的fal_server改成了GZDB1(主库的tns),把备库的log_archive_dest_2的值改成了GZDB1 LGWR ASYNC,指向主库
重启实时应用后,主库报这个东西
RFS[3]: Assigned to RFS process 26680
RFS[3]: Database mount ID mismatch [0xb2ec8f44:0xb2c1f8a5] (3001847620:2999056549)
RFS[3]: Client instance is standby database instead of primary
RFS[3]: Not using real application clusters
备库不停的报这个东西
PING[ARC2]: Heartbeat failed to connect to standby 'GZDB1'. Error is 16009
有点慌,但看了下主备库有关dataguard进程,和备库的standby redo log的情况一切正常,日志也有提示日志切换过程
RECOVERY_MODE也显示为MANAGED REAL TIME APPLY,备库DATABASE_MODE为MOUNTED-STANDBY,但SWITCHOVER_STATUS为no allowed
但备库出现error有点看不懂。
只好把备库的log_archive_dest_2设为空,重启应用。
这样主备库都无异常日志,一切正常,但SWITCHOVER_STATUS仍为no allowed。
no allowed的原因没查到是为什么,猜测是现在备库MRP0进程还在跑,肯定不能切。按照切换顺序,应该是先把主库设为备库,之后备库MRP0进程关闭,
这样备库的SWITCHOVER_STATUS才会改变状态,不知道是不是这样,没试过。

不过现在的问题是我备库的log_archive_dest_n一个也没设置(location除外),也就是说如果备库变成主库,是找不到备库的。

为什么设了log_archive_dest_n会导致主备库报以上所说的异常呢。我想不太明白,还请高人指教。


高人:

你的log_archive_dest_2设置的应该有问题。
LOG_ARCHIVE_DEST_n = {LOCATION=path_name | SERVICE=service_name, attribute, attribute, ...}
     用于设置主库归档日志路径以及重做日志传输。对于DG环境中此参数设置较为复杂。有关归档问题请参考:Oracle 归档日志
     如果启用了闪回区,对于本地归档则无需再设置。对于该参数可以设置10个可用目标,其中一个为本地归档。也即是可存在9个备用库。
     该参数有众多特性,下面列出几个常用的。
     SERIVCE: 用于指定备用数据库的TNSNAMES描述符,Oralce 会将重做日志传送到这个TNSNAMES指定的备库。
     SYNC: 用于指定使用同步传输方式到备库。即LGWR进程需要等待来自LNS的确认消息后,然后告知客户端事务已提交。
           最高可用性及最大保护模式下,至少有一个备用目标应指定为SYNC。
     ASYNC:与SYNC相反,指定使用异步传输模式,此为默认的传输方法。
     NET_TIMEOUT: 指定LGWR进程等待LNS进程的最大时间数,单位为秒(缺省30)。如果超出该值,则主库放弃备库,继续执行主库上的事务。
     REOPEN:主库遇到备库故障后尝试重新连接备库所需等待的时间,单位为秒(缺省300)。 
     DB_UNIQUE_NAME:主库与备库连接时会发送自己的唯一名称,同时要求备库返回其唯一名称,并结合LOG_ARCHIVE_CONFIG验证其存在性。
     VALID_FOR:定义何时使用(角色相关)LOG_ARCHIVE_DEST_n参数以及应该在哪类重做日志文件上运行。
        可用日志文件类型:online_logfile,standby_logfile, all_logfiles
        可用的角色类型:primary_role, standby_role, all_roles
     主库:log_archive_dest_1='LOCATION=/u01/database/sybo3/arch db_unique_name=oradb valid_for=(ALL_LOGFILES,ALL_ROLES)';
     备库: log_archive_dest_2='SERVICE=oradbdg ASYNC db_unique_name=oradbdg valid_for=(ONLINE_LOGFILES,PRIMARY_ROLE)';  
           log_archive_dest_3='SERVICE=oradbdg2 ASYNC db_unique_name=oradbdg2 valid_for=(ONLINE_LOGFILES,PRIMARY_ROLE)'; 
     如果按上述设置则log_archive_config应设置为log_archive_config='DG_CONFIG=(oradb,oradbdg,oradbdg2)'      
     定义使用闪回区时归档的设置
        log_archive_dest_1='LOCATION=USE_DB_RECOVERY_FILE_DEST db_unique_name=oradb valid_for=(ALL_LOGFILES,ALL_ROLES)'



回复:

谢谢海哥提醒。回去看了相关释义,修改了log_archive_dest_2,加了valid_for参数(valid_for=(ONLINE_LOGFILES,PRIMARY_ROLE)'),使其只在担当主库时有效,不再使用默认,问题解决。

你可能感兴趣的:(oracleDG,oracle,dataguard)