跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

Oracle 11g容灾方案中如何设置延迟同步_配置DELAY参数防止人为误操作

Oracle 11g物理备库延迟同步需在备库显式启用,核心命令是ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DELAY n DISCONNECT;主库LOG_ARCHIVE_DEST_n的DELAY参数仅在备库未启实时应用时生效,否则被忽略。 oracle 11g 物理备库的延迟同步不是“开了就自动生效”的功能,它必须在日志应用阶段显式启用,且主库的
log_archive_dest_n
中配置的
delay
参数仅在特定条件下起作用——比如备库未开启实时应用(
using current logfile
)时才被读取;一旦启用了实时应用,该参数会被忽略。 ALTER DATABASE RECOVER 命令里的 delay 参数必须显式指定 延迟同步的核心控制点在备库的恢复命令中,而不是主库归档路径里写个
DELAY=60
就完事。很多 DBA 在主库改了
LOG_ARCHIVE_DEST_2
后发现延迟没生效,就是因为备库仍在用
USING CURRENT LOGFILE
模式实时拉日志。
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DELAY 60 DISCONNECT FROM SESSION;
—— 这才是让备库真正延迟 60 分钟应用日志的命令 如果之前已启动过实时恢复,需先执行
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
再重发带
DELAY
的命令
DELAY
单位是分钟,不能写成秒或小时;值为 0 或省略即表示无延迟 该命令只影响当前会话启动的 MRP 进程,重启数据库后需重新执行(除非封装进启动脚本) LOG_ARCHIVE_DEST_n 的 DELAY=xx 是静态配置,但有前提条件 主库上通过
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='... DELAY=120 ...'
设置的延迟,本质是向备库“建议”一个延迟值,但它只在以下场景生效: 备库处于 MOUNT 状态、未启动日志应用(即没运行 MRP)时,首次执行
RECOVER MANAGED STANDBY DATABASE
且未显式指定
DELAY
,系统会自动读取该值 若备库已开启
USING CURRENT LOGFILE
,则此参数完全被跳过,alert 日志里会出现类似
DELAY attribute ignored because real-time apply is enabled
的提示
DELAY
必须跟在
SERVICE=xxx
或
LOCATION=xxx
后面,且不能与
SYNC
同时出现(物理 DG 不支持同步+延迟) 延迟同步下如何验证和切换回实时应用 延迟生效后,不能只看
ARCHIVED_THREAD#
和
APPLIED_THREAD#
是否一致,要确认实际延迟量是否符合预期。 oracle知识库 oracle知识库下载 下载 查当前延迟状态:
SELECT DELAY_MINS, APPLY_DELAY FROM V$ARCHIVE_DEST_STATUS WHERE DEST_ID = 2;
(注意:该视图显示的是配置值,不是实时差值) 更可靠的方式是比对主库
SELECT FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY FIRST_TIME DESC FETCH FIRST 3 ROWS ONLY;
和备库
V$ARCHIVED_LOG
中相同
SEQUENCE#
的
APPLIED
状态及时间戳 要取消延迟、切回实时应用,执行:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE NODELAY;
(不是
NODELAY=0
,语法错误) 如果执行后仍不生效,检查是否遗漏了
CANCEL
步骤,或备库是否卡在某个中断日志上(如
ORA-00317
文件类型不匹配) 真正容易被忽略的是:延迟同步无法防御跨库误操作(比如通过 DBLINK 从主库误删备库数据),也不能替代备份。它只对本地 SQL 误执行、误 truncate 表这类场景有效,且前提是延迟窗口内能及时发现并干预——所以延迟时间不能设太长,否则丢失的数据量不可控;也不能设太短,否则起不到拦截作用。生产环境常见折中值是 30~120 分钟,具体得结合业务变更频率和运维响应能力来定。

相关文章