主库必须启用归档模式和FORCE LOGGING,否则DG同步失败;RMAN DUPLICATE创建备库时须跳过控制文件并单独生成密码文件;DB_UNIQUE_NAME与LOG_ARCHIVE_CONFIG需双向严格配对。

主库必须启用强制日志和归档,否则ALTER DATABASE FORCE LOGGING会失败
物理备库依赖重做日志的完整性和连续性,如果主库没开强制日志(FORCE LOGGING),某些NOLOGGING操作(如INSERT /*+ APPEND */)产生的块变更不会写入redo,导致备库数据不一致。这不是“建议”,是硬性前提。
常见错误现象:ORA-01275: automatic standby file management cannot be enabled when database is not in ARCHIVELOG mode 或备库启动后MRP进程无法应用日志。
- 先确认归档状态:
ARCHIVE LOG LIST,若显示Database log mode: No Archive Mode,必须停库重启到MOUNT再开启:ALTER DATABASE ARCHIVELOG - 强制日志启用后,检查:
SELECT FORCE_LOGGING FROM V$DATABASE;返回YES才算生效 - 归档路径必须可写且空间充足,
log_archive_dest_1推荐设为本地目录,log_archive_dest_2指向备库(使用service别名)
DB_UNIQUE_NAME和LOG_ARCHIVE_CONFIG必须严格配对
这是主备识别和日志传输的“身份证”。哪怕只差一个字符,LNSn进程就发不出日志,ARCn也不会尝试推送。
典型错误:主库DB_UNIQUE_NAME=ORCL_PRIM,但LOG_ARCHIVE_CONFIG='DG_CONFIG=(ORCL_PRIM,ORCL_STBY)'里写成ORCL_STANDBY;或者备库DB_UNIQUE_NAME没在主库的DG_CONFIG列表中。
- 主库执行:
SHOW PARAMETER db_unique_name和SHOW PARAMETER log_archive_config,确保两者值一致且包含所有备库名 - 备库同理检查,并确认
log_archive_config也包含主库名(双向校验) -
FAL_SERVER必须指向对方的TNS别名(不是IP),且该别名在tnsnames.ora中定义正确,tnsping STANDBY_SERVICE必须通
备库创建必须用RMAN DUPLICATE,不能直接拷贝文件
手动cp数据文件+控制文件会导致SCN、checkpoint信息错乱,备库启动后RECOVER MANAGED STANDBY DATABASE会报ORA-00283或ORA-1056——这是最常被跳过的坑。
场景差异:如果是冷备环境(主库可停机),RMAN DUPLICATE TARGET DATABASE FOR STANDBY是最稳妥方式;热备则必须配合BACKUP AS COPY + SWITCH DATABASE TO COPY流程。
- 主库提前配置好
db_file_name_convert和log_file_name_convert,避免路径不一致导致CREATE STANDBY CONTROLFILE失败 - RMAN连接时用
CONNECT TARGET sys/password@PRIMARY+CONNECT AUXILIARY sys/password@STANDBY,不要省略AUXILIARY - 备库启动后首次
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT前,务必确认V$ARCHIVED_LOG中已有从主库传来的归档
SYNC vs ASYNC传输选型直接影响RPO和主库TPS
别默认选SYNC。金融核心系统确实需要零丢失,但普通业务用SYNC可能让主库事务响应时间翻倍——因为每个commit都得等备库写完standby redo log并返回ACK。
性能影响实测:同等硬件下,LGWR SYNC比LGWR ASYNC吞吐量下降30%~40%,延迟波动明显增大。而ASYNC模式下,网络抖动或备库短暂不可用,主库完全不受影响。
- 生产环境首选
LGWR ASYNC,通过log_archive_dest_2='SERVICE=STANDBY LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ORCL_STBY'显式声明 - 若真要
SYNC,必须配NET_TIMEOUT=30(单位秒),防止网络瞬断导致主库挂起;同时备库standby_redo_log组数至少比主库多1组 - 验证传输状态看
V$DATAGUARD_STATS里的transport lag和apply lag,而不是只盯STATUS字段是否VALID
tnsnames.ora里一个空格、listener.ora里没reload、或者备库standby_file_management=AUTO但忘了建对应目录——这些细节卡住同步,比参数逻辑更频繁。


















