Data Guard 保护模式(Data Guard Protection Modes) 对于 Data Guard 而言,其生存逻辑非常简单,由于它提供了三种数据保护的模式,我们又亲切的叫它:有三模: 最大保护(Maximum protection): 这种模式能够确保绝无数据丢失。要实现这一步当然是有代价的,它要求所有的事务在提交前其 redo 不仅 被写入到本地的 online redo log,还要同时提交到 standby 数据库的 standby redo log,并确认 redo 数据至少在一 个 standby 数据库可用(如果有多个的话),然后才会在 primary 数据库上提交。如果出现了什么故障导致 standby 数据库不可用的话,primary 数据库会被 shutdown。 最高性能(Maximum performance): 这种模式提供在不影响 primary 数据库性能前提下最高级别的数据保护策略。事务可以随时提交,当前 primary 数据库的 redo 数据也需要至少写入一个 standby 数据库,不过这种写入可以是不同步的。 如果网络条件理想的话,这种模式能够提供类似最高可用性的数据保护而仅对 primary 数据库有轻微的性能 影响。 最高可用性(Maximum availability): 这种模式提供在不影响 primary 数据库可用前提下最高级别的数据保护策略。其实现方式与最大保护模式类 似,也是要求所有事务在提交前必须保障 redo 数据至少在一个 standby 数据库可用,不过与之不同的是,如果 出现故障导入无法同时写入 standby 数据库 redo log,primary 数据库并不会 shutdown,而是自动转为最高性能 模式,等 standby 数据库恢复正常之后,它又会再自动转换成最高可用性模式。
首先需要搞明白oracle执行方式。如执行一条数据操作后,比如插入数据行,oracle不会在数据库中立即执行的。而是把你的这条sql语句写到日志里(可理解成redo log),然后再传一份log给备库。
启用data guard后,这三种模式实际上就是当redo log没法传到备库会怎样。
最大保护,就是发现当redo log没法传到至少一个备库时,主库上就不执行这条命令。这种模式性能最低,但最安全。
最大性能,就是不管redo log能不能传到至少一个备库,主库都会执行这条命令。这种模式性能最高,但最不安全。
最大可用,当 redo log可以传到至少一个备库时,和最大保护模式相同。但如果不能传到至少一个备库是,就自动转到最大性能模式既执行这条命令。这种模式性能和安全性取中间。
最大保护及最高可用性需要至少一个 standby 数据库 redo 数据被同步写入。三种模式都需要指定LOG_ARCHIVE_DEST_n 初始化参数