前言---何为DG?
Oracle DataGuard 是 Oracle 数据库提供的一种高可用性和灾难恢复解决方案,旨在通过创建和维护一个或多个备用数据库(Standby Database)来保护主数据库(Primary Database)的数据完整性,并确保业务连续性。
DataGuard 核心特点
1、数据冗余与同步
主数据库的事务日志(Redo Log) 实时或近实时传输到备用数据库,确保数据同步。
支持物理备用库(逐块复制)和逻辑备用库(SQL语句重放)两种模式
2、自动故障切换(Failover)
DataGuard 三大保护模式
1、最大保护模式(Maximum Protection)
级别:确保主库不会发生数据丢失
特点:主库事务提交前,必须确保至少一个备库已同步其redo数据。若所有备库不可用,主库将停止运行(数据零丢失)
数据同步方式:SYNC(同步传输)
性能影响:高(对网络稳定性要求高)
故障切换:自动或手动,自动需配置Fast-Start Failover(FSFO)
2、最大可用模式(Maximum Availability)
级别:提供最高级别的数据保护,不会影响主库的可用性
特点:在主库事务数据未写入本地redo或至少一个远程备库redo之前,不会提交事务。如所有备库均无法写入,会自动降级成最大性能模式。若故障解决后,会自动将最大性能模式转为最 大保护模式
数据同步方式:SYNC(同步传输)
性能影响:低
故障切换:自动或手动,自动需配置Fast-Start Failover(FSFO)
3、最大性能模式(Maximum Performance)
级别:DG默认保护级别
特点:主库产生事务即可写入主库redo,事务立即提交,无需校验备库redo是否写入
数据同步方式:ASYNC(异步传输)
性能影响:低
故障切换:自动或手动,自动需配置Fast-Start Failover(FSFO)
DataGuard 传输方式
同步传输--SYNC
1、触发条件
主库事务提交时,须等待备库确认redo已持久化到磁盘,主库才能提交事务。
2、核心步骤
1. 主库生成重做日志
2. LGWR进程将日志同步发送到多个备库
3. 备库RFS进程接收日志并写入备库Standby Redo Log(重做日志)
4. 备库MRP进程应用日志完成后,主库事务才可提交
3、优势
数据实时同步到备库,缩短故障恢复时间(RTO)
4、模式关联
通常用于最大保护模式或最大可用模式,确保数据零丢失
5、模式切换
若备库不可用,主库在最大保护模式下会停止运行。在最大可用模式下会降级为异步传输(最大性能模式)
6、运行原理
异步传输--ASYNC
1、触发条件
主库事务提交时,无须等待备库确认,即可提交事务。待归档后传输到备库。
2、核心步骤
1. 主库生成重做日志
2. LNS进程将日志发送到多个备库
3. 备库RFS进程接收日志并写入备库Standby Redo Log(重做日志)
4. 备库MRP进程应用日志完成后,主库事务才可提交
3、优势
可实现延迟同步,降低主库错误执行导致从库数据一并更新。同时避免主库长时间阻塞
4、模式关联
用于最大性能模式,优先保障主库性能。
5、运行原理
DataGuard 核心进程
1、ARC进程
1. 归档本地重做日志
当主库一组重做日志写满后,ARC进程会将当前日志组的重做数据进行归档,确保事务操作的持久化存储。
2. 数据保护模式
在最大性能模式下,ARC进程负责将归档日志异步传输到备库
3. 相关参数
LOG_ARCHIVE_FORMAT 定义归档日志文件名格式(如 arch_%t_%s_%r.arc)。
LOG_ARCHIVE_DEST_n 指定归档日志传输目标(备库地址)及传输模式(ASYNC/SYNC)。
LOG_ARCHIVE_MAX_PROCESSES 控制 ARCH 进程数量(默认 2-30),需根据日志生成频率调整
复制
2、LGWR进程
1. 触发日志传输
在最大保护和最大可用模式下,LWGR进程传输redo到备库,备库MRP进程实时应用
2. 数据保护模式
1. 最大保护模式下:必须使用LGWR同步传输,主库事务提交需等待备库确认
2. 最大可用模式下:默认使用LGWR同步传输,若备库故障则自动降级为异步(ASYNC)
3、MRP进程
1、应用重做日志
MRP线程持续解析并应用从主数据库接收的重做日志(Redo Log),将主库的数据变更(如DML、DDL等操作)同步到备用数据库,确保主备数据的一致性。这一过程是同步或异步进行 的,具体取决于Data Guard的保护模式配置(最大可用性、最大性能等)。
2、维持实时/近实时同步
在实时应用模式(Real-Time Apply)下,MRP直接应用主库生成的在线重做日志(无需等待归档),实现秒级延迟的同步。在非实时模式(延迟同步)下,MRP按顺序应用已归档的日志文 件,保持备用库与主库的最终一致性
4、RFS进程
1、接收主库传输的重做日志
RFS进程运行在备库端,负责接收主库通过LNS(Log Network Server)进程或ARCH归档进程发送的重做日志(包括在线日志和归档日志),并将日志写入备库的本地存储(如Standby Redo Logs或归档目录)。
2、支持实时日志传输
当主库使用LGWR + LNS进程传输日志时,RFS会直接将接收到的在线重做日志写入备库的Standby Redo Logs,实现实时同步。
若使用ARCH进程传输日志,RFS则接收已归档的日志文件,适用于非实时同步场景。
3、保障日志完整性
RFS在接收日志时,会验证日志的连续性(如SCN顺序)和完整性,避免因网络中断或主库故障导致日志缺失,从而确保备库数据恢复的可靠性。
5、LNS进程
1、发送日志
LGWR Network Server process进程,DG可以使用ARCn、LGWR来传输日志,但它们都是把日志发送给本地的LNSn(如果是多个目标备库,那么会启动相应数量的LNSn进程,同时发 送数据)进程,然后备库的RFS进程接收数据,接收到的数据可以存储在备库的备用Redo日志文件中或备库的归档日志中,然后再应用到备库。
2、日志切换
主库执行(alter system switch logfile),就会触发LNSn进程。
3、区别
若在Oracle 10g中采用LGWR传输日志的时候,则进程表现为LNSn,但在Oracle 11g中,若采用LGWR ASYNC(异步方式)来传输日志的时候,则进程表现为nsa,若采用LGWR SYNC (同步方式)来传输日志的话,则进程表现为nss。且通过视图GV$MANAGED_STANDBY查询的结果不尽相同。
DataGuard 核心参数
注意:该参数用于异步(ASYNC)搭建时使用,不要求延迟同步、实时同步及故障转移等。主库均可使用该参数即可#DG Parameter
*.db_name='master'
*.db_unique_name='master'
*.log_archive_config='dg_config=(master,slave)'
*.log_archive_dest_1='location=/u01/db/arch valid_for=(all_logfiles,all_roles) db_unique_name=master'
*.log_archive_dest_2='service=slave valid_for=(all_logfiles,all_roles) db_unique_name=slave'
*.log_archive_dest_state_1='enable'
*.log_archive_dest_state_2='enable'
*.fal_server='slave'
*.fal_client='master'
*.db_file_name_convert='/u01/db/10.2.0/oradata/master','/u01/db/10.2.0/oradata/master'
*.log_file_name_convert='/u01/db/10.2.0/oradata/master','/u01/db/10.2.0/oradata/master'
*.undo_management='auto'
*.standby_file_management='auto'
复制
DataGuard 10G 和 19C 的区别
特性 | Oracle 10G DG | Oracle 19C DG |
---|---|---|
Active Data Guard | 仅支持物理备库只读查询,需手动切换读写模式 | 支持物理备库实时读写(如在线查询、报表),且可自动修复逻辑损坏(通过 DBMS_REPAIR) |
Far Sync实例 | 不支持 | 支持(12c引入),实现零数据丢失(Zero Data Loss)的异步传输,增强异地容灾 |
多租户支持 | 无 | 全面支持多租户(CDB/PDB架构),可针对单个PDB配置DG,灵活性更高 |
逻辑备库 | 功能有限,易因数据类型不兼容中断 | 增强逻辑备库兼容性(如支持JSON、XML类型),支持并行应用重做日志 |