欢迎您关注我的公众号【尚雷的驿站】
****************************************************************************
公众号:尚雷的驿站
CSDN :https://blog.csdn.net/shlei5580
墨天轮:https://www.modb.pro/u/2436
PGFans:https://www.pgfans.cn/user/home?userId=4159
****************************************************************************
一、问题描述
Oracle 12C及19C 完成DG后,如果想设置备库延迟应用主库日志,发现和11G之前的版本已有很大区别。
备库无法像11G或10G直接使用delay=xxx语句就能生效。
当在备库执行
alter database recover managed standby database delay 4320 disconnect from session;
会报如下错误:
delay=xxx 语句执行在主库端进行设置:
alter system set log_archive_dest_2='SERVICE="(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.XX.XX)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=xx.xxxx)(INSTANCE_NAME=xx)))" LGWR ASYNC DELAY=4320 REOPEN=60 MAX_FAILURE=10 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME="xx"' sid='*';
此时即使主库设置delay=xxx ,备库执行 alter database recover managed standby database disconnect from session;语句,备库alert日志仍然未出现Delay信息,无法达到延迟应用的目的。
当主库切换日志时,发现备库日志会报
会发现当主库切换日志时,备库仍然会是real time apply的模式,无法达到延迟应用日志的目的。
二、原因分析
该原因是从Oracle 12开始,如果要不使用real time apply,需要加using archived log,using current logfile已经过期作废,不带using语句,在11g中,默认是不使用real time apply,而在12c中是默认使用real time apply。
三、解决办法
所以要想在12C之后的DG备库设置延迟应用日志,可以采用如下方法:
主库:
alter system set log_archive_dest_2='SERVICE="(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.XX.XX)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=xx.xxxx)(INSTANCE_NAME=xx)))" LGWR ASYNC DELAY=4320 REOPEN=60 MAX_FAILURE=10 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME="xx"' sid='*';
备库:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING ARCHIVED LOGFILE DISCONNECT;
此时,在主库切换日志,备库alert日志就会出现 Delay 多长时间的信息,备库达到延迟应用效果。