DataGuard作为Oracle官方推出的数据库容灾解决方案,通过日志同步机制实现主备库的数据一致性,而所有同步、归档、角色切换等核心功能都依赖一系列参数的控制,正确理解并配置这些参数是搭建稳定容灾环境的基础。

DataGuard参数分类说明
DataGuard相关参数可以按作用范围分为通用参数、主库专属参数、备库专属参数三大类,不同类别的参数需要在对应的数据库角色中设置,错误的参数设置会导致同步中断、容灾失效等问题。
通用核心参数
这类参数无论主库还是备库都需要配置,主要用于定义DataGuard环境的基本标识和通信规则。
- DB_UNIQUE_NAME:数据库的唯一名称,整个DataGuard环境中每个数据库的名称必须唯一,用于区分主备库身份,默认值与DB_NAME一致,搭建容灾环境时必须手动修改。
- LOG_ARCHIVE_CONFIG:配置DataGuard环境的数据库名称列表,用于验证归档日志的发送目标合法性,格式为DG_CONFIG=(主库名称,备库名称)。
- LOG_ARCHIVE_DEST_n:定义归档日志的存储位置和发送规则,n为1到31的数字,其中至少配置一个本地归档路径和一个远程备库同步路径。
- LOG_ARCHIVE_DEST_STATE_n:控制对应LOG_ARCHIVE_DEST_n路径的启用状态,可选值为ENABLE(启用)和DEFER(禁用),默认值为ENABLE。
- FAL_SERVER:定义备库获取缺失归档日志的源端,通常配置为主库的DB_UNIQUE_NAME,当备库出现日志缺口时,会自动向该参数指定的数据库请求缺失日志。
- FAL_CLIENT:定义备库在请求缺失日志时向主库标识自身的名称,通常配置为备库自己的DB_UNIQUE_NAME。
主库专属参数
这类参数仅在主库角色下生效,用于控制日志发送、角色切换相关的规则。
- LOG_ARCHIVE_DEST_n中的远程同步参数:需要配置SERVICE属性指向备库的TNS别名,同时指定SYNC/ASYNC同步模式、AFFIRM/NOAFFIRM确认规则,例如LOG_ARCHIVE_DEST_2='SERVICE=standby_tns SYNC AFFIRM DB_UNIQUE_NAME=standby'
- LOG_ARCHIVE_MAX_PROCESSES:控制归档进程的最大数量,默认值为4,高负载场景下可以适当调大,最高支持30,确保归档日志能够及时生成和发送。
备库专属参数
这类参数仅在备库角色下生效,用于控制日志应用、只读访问相关的规则。
- DB_FILE_NAME_CONVERT:当主备库的数据文件路径不一致时,用于转换主库的数据文件路径为备库对应的路径,格式为'主库路径','备库路径',可以有多个转换对。
- LOG_FILE_NAME_CONVERT:与DB_FILE_NAME_CONVERT作用类似,用于转换主库的在线日志和归档日志文件路径为备库对应的路径。
- STANDBY_FILE_MANAGEMENT:控制主库数据文件增删时备库的同步行为,设置为AUTO时,主库新增数据文件会自动在备库创建对应文件,设置为MANUAL时需要手动在备库操作。
参数配置示例
以下是典型的一主一备DataGuard环境的参数配置示例,主库DB_UNIQUE_NAME为primary,备库为standby,主备库TNS别名分别为primary_tns和standby_tns。
主库参数配置
-- 设置数据库唯一名称 ALTER SYSTEM SET DB_UNIQUE_NAME='primary' SCOPE=SPFILE; -- 配置DataGuard环境数据库列表 ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(primary,standby)' SCOPE=BOTH; -- 配置本地归档路径 ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=/u01/arch/primary VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=primary' SCOPE=BOTH; -- 配置远程备库同步路径,使用同步确认模式 ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=standby_tns SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standby' SCOPE=BOTH; -- 启用两个归档路径 ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_1='ENABLE' SCOPE=BOTH; ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2='ENABLE' SCOPE=BOTH; -- 设置归档进程最大数量 ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=10 SCOPE=BOTH; -- 配置FAL参数 ALTER SYSTEM SET FAL_SERVER='standby' SCOPE=BOTH; ALTER SYSTEM SET FAL_CLIENT='primary' SCOPE=BOTH; -- 提交配置 COMMIT;
备库参数配置
-- 设置数据库唯一名称 ALTER SYSTEM SET DB_UNIQUE_NAME='standby' SCOPE=SPFILE; -- 配置DataGuard环境数据库列表 ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(primary,standby)' SCOPE=BOTH; -- 配置本地归档路径 ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=/u01/arch/standby VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=standby' SCOPE=BOTH; -- 启用本地归档路径 ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_1='ENABLE' SCOPE=BOTH; -- 配置数据文件路径转换,主库路径为/u01/oradata/primary,备库为/u01/oradata/standby ALTER SYSTEM SET DB_FILE_NAME_CONVERT='/u01/oradata/primary','/u01/oradata/standby' SCOPE=SPFILE; -- 配置日志文件路径转换 ALTER SYSTEM SET LOG_FILE_NAME_CONVERT='/u01/oradata/primary','/u01/oradata/standby' SCOPE=SPFILE; -- 设置备库文件管理为自动 ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT='AUTO' SCOPE=BOTH; -- 配置FAL参数 ALTER SYSTEM SET FAL_SERVER='primary' SCOPE=BOTH; ALTER SYSTEM SET FAL_CLIENT='standby' SCOPE=BOTH; -- 提交配置 COMMIT;
参数调优建议
实际生产环境中可以根据业务需求对部分参数进行调优,提升DataGuard环境的性能和可靠性。
- 如果业务对数据一致性要求极高,主库LOG_ARCHIVE_DEST_n的远程同步参数建议使用SYNC AFFIRM模式,确保事务提交前备库已经接收并确认日志,但是会增加主库事务提交的延迟。
- 如果业务对性能要求更高,可以改用ASYNC NOAFFIRM模式,主库事务提交不需要等待备库确认,但是极端场景下可能出现少量数据丢失。
- 当主备库数据文件路径完全一致时,可以不用配置DB_FILE_NAME_CONVERT和LOG_FILE_NAME_CONVERT参数,减少配置复杂度。
- 如果备库需要用于报表查询,可以开启备库的只读应用模式,此时需要保证STANDBY_FILE_MANAGEMENT参数设置为AUTO,避免主库结构变更导致备库同步中断。
常见问题排查
当DataGuard同步出现问题时,可以优先检查以下参数配置:
- 检查主备库的DB_UNIQUE_NAME是否唯一,LOG_ARCHIVE_CONFIG是否包含双方的名称。
- 检查主库LOG_ARCHIVE_DEST_2的SERVICE是否指向正确的备库TNS别名,DB_UNIQUE_NAME是否与备库一致。
- 检查备库FAL_SERVER是否指向主库,主备库的FAL_CLIENT是否与自身DB_UNIQUE_NAME一致。
- 检查主备库的归档路径是否有权限写入,LOG_ARCHIVE_DEST_STATE_n是否都处于ENABLE状态。