Data Guard 的三种保护模式
官方文档链接 http://docs.oracle.com/cd/E11882_01/server.112/e41134/protection.htm#SBYDB02000
最大可用模式(Maximum Availability)
- 这种保护模式在不影响主库可用性的前提下提供最高水平的数据保护
- 在主库需要完成两件事,事务才会被提交
- 恢复事务所需要的 redo 数据写入在线日志文件(online redo log)
- 恢复事务所需要的 redo 数据写入同步备库(synchronized standby database)的备用日志文件(standby redo log),如果配置了多个备库,需要至少写到一个备库上
- 如果主库不能将 redo 数据写入至少一个备库,则主库就像运行在最大性能模式下以保护主库的可用性,直到可以将 redo 数据流写入备库
- 这种保护模式可以确保数据零丢失,除了某些双故障的情况,例如备库发生故障之后主库也发生故障
最大性能模式(Maximum Performance)
- 默认的保护模式
- 这种保护模式在不影响主库性能的前提下提供最高水平的数据保护
- 事务生成的 redo 数据写入在线日志后事务立即提交;redo 数据也会写到一到多个备库上,相对于事务提交它是异步完成的,所以主库的性能不会被 redo 数据写入备库的延迟所影响
- 这种保护模式提供的数据保护略逊于最大可用模式,但是对主库性能产生的影响小
最大保护模式(Maximum Protection)
- 这种保护模式确保主库发生故障时不会有数据丢失
- 在主库需要完成两件事,事务才会被提交
- 恢复事务所需要的 redo 数据写入在线日志文件(online redo log)
- 恢复事务所需要的 redo 数据写入同步备库(synchronized standby database)的备用日志文件(standby redo log),如果配置了多个备库,需要至少写到一个备库上
- 要确保数据不会丢失,如果主库不能将 redo 数据流写入至少一个备库,主库会 shutdown,而不是继续处理事务
- 因为最大保护模式更注重数据的保护,Oracle 建议至少配置两个备库来保护运行在最大保护模式下的主库,这样当其中一个备库发生故障时不会导致主库 shutdown
设置主库的数据保护模式
- 1、根据需要选择一种保护模式
- 2、确保至少一个备库满足 redo 传输条件
- 和备库相关的 LOG_ARCHIVE_DEST_n 参数中需要包含下列 redo 传输属性,不同的保护模式的设置不同
- 备库必须要有备用 redo
- 3、确保已经在主库和每一个备库将数据库初始化参数 DB_UNIQUE_NAME 设置为一个唯一值
- 4、确保已经在主库和每一个备库定义了数据库初始化参数 LOG_ARCHIVE_ONFIG,该参数包含主库和每一个备库的 DB_UNIQUE_NAME
- 设置示例
SQL> ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(CHICAGO,BOSTON)';
- 5、设置数据保护模式
在主库执行以下语句
SQL> ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE {AVAILABILITY | PERFORMANCE | PROTECTION};
- 只有当前的数据保护模式是 MAXIMIZE AVAILABILITY 并且至少有一个同步物理备库时,才可以将一个 open 的数据库的数据保护模式设置为 MAXIMIZE PROTECTION
- 6、确认数据运行在新的保护模式下
在主库执行以下查询
SQL> SELECT PROTECTION_MODE FROM V$DATABASE;