自学内容网 自学内容网

Data Guard 三种保护模式介绍

基本介绍

Oracle Data Guard 提供了三种不同的数据保护模式,每种模式在数据保护级别和性能之间提供了不同的平衡。

1. 最大性能模式 (Maximum Performance)

  • 特点:
    • 主库性能最大化。
    • 主备库之间数据异步传输。
    • 主库日志归档后才会传输到备库。
    • 事务可以随时提交,但主库的 redo 数据需要至少写入一个 standby 数据库(不同步)。
  • 优点:
    • 避免了从库对主数据库的性能和可用性影响。
  • 缺点:
    • 如果与主库提交的事务相关的恢复数据没有发送到从库,这些事务数据将被丢失,不能保证数据无损失。

2. 最高可用模式 (Maximum Availability)

  • 特点:
    • 正常情况下,主备库之间是同步的。
    • 当网络或备库出现故障时,不会影响主库的宕机。
    • 主库会自动切换为最大性能模式,等待备库可用时,再将归档传输到备库做恢复。
  • 优点:
    • 在没有问题出现的情况下保证从库没有数据丢失,是一种折中的方法。
  • 缺点:
    • 在正常运行的过程中,主库的性能受到诸多因素的影响。

3. 最大保护模式 (Maximum Protection)

  • 特点:
    • 主备库之间数据是同步的。
    • 主库提交 commit 的同时,备库会做相应的恢复。
    • 最大限度保证了数据的完整性,不允许数据的丢失。
  • 优点:
    • 该模式可以保证从库没有数据丢失。
  • 缺点:
    • 主库找不到合适的从库写入时,主库会自动关闭,防止无保护的数据出现。
    • 对网络等客观条件要求非常高,主库的性能会受到非常大的影响。

注意:最大保护模式和最高可用模式需要至少一个 standby 数据库 redo 数据被同步写入。

三种保护模式的特点

1. 最大保护模式

  • 数据保护能力:提供最高级别的数据保护能力。
  • 重做日志同步:重做日志在至少一个物理从库数据库后,主库的事务才能够提交。
  • 主库行为:主库找不到合适的从库写入时,主库会自动关闭,防止无保护的数据出现。
  • 优点:可以保证从库没有数据丢失。
  • 缺点:主库的自动关闭会影响到主库的可用性,同时需要从库恢复后才能提交,对网络等客观条件要求非常高,主库的性能会受到非常大的影响。

2. 最高可用模式

  • 数据保护能力:提供仅次于“最大保护模式”的数据保护能力。
  • 重做日志同步:重做日志在至少一个物理从库数据库后,主库的事务才能够提交。
  • 主库行为:主库找不到合适的从库写入时,主库不会关闭,而是临时降低到“最大性能模式”,直到问题得到处理。
  • 优点:可以在没有问题出现的情况下保证从库没有数据丢失,是一种折中的方法。
  • 缺点:在正常运行的过程中,主库的性能受到诸多因素的影响。

3. 最大性能模式

  • 默认模式:提供主数据库的最高可用性。
  • 主库行为:保证主库运行过程中不受从库的影响,主库事务正常提交,不因从库的任何问题影响到主库的运行。
  • 优点:避免了从库对主数据库的性能和可用性影响。
  • 缺点:如果与主库提交的事务相关的恢复数据没有发送到从库,这些事务数据将被丢失,不能保证数据无损失。

日志传输方式

两种日志传输方式

  1. ARC 进程传输日志
    • 主库:日志先写入在线重做日志,当在线重做日志满后(或人为切换),ARC0 进程归档该日志至主库本地归档目录,归档完成后,ARC1 马上将该归档日志传输到备库。
    • 备库:RFS 进程接收日志,如果备库有 Standby 重做日志,则把日志复制到 Standby 重做日志,接着把 Standby 重做日志归档至备库本地归档目录,最后应用归档日志;如果没有配置 Standby 重做日志,RFS 进程接收日志后,直接把它放到备库的归档目录下,再应用该日志。
  2. LGWR 进程传输日志
    • 主库:只要有新的重做日志产生,LGWR 进程将触发 LNSn 进程把新生成的日志传输到备库。
    • 备库:RFS 进程接收到日志后,将其写入 Standby 重做日志,如果备库开启了实时应用,就立即做日志应用,如果没有开启,则等 Standby 重做日志归档后再应用。
    • 区别SYNC 是在 redo 还在内存时,LNSn 进程就开始传输;而 ASYNC 是在 redo 缓冲到 online redo log 后,LNSn 才开始传输。

从上面可以得出,从同步的实时性来看,LGWR(SYNC) > LGWR(ASYNC) > ARCH

三种保护模式参数配置

  • 最大性能:
    • LGWR ASYNC NOAFFIRM
  • 最大保护,最高可用:
    • LGWR SYNC AFFIRM

三种保护模式在出现灾难时数据丢失的风险、重做传输机制、是否需要 standby redo log 磁盘写入的区别

  • 最大保护:
    • 零数据丢失:LGWR SYNC YES AFFIRM
  • 最大可用:
    • 零数据丢失:LGWR SYNC YES AFFIRM
  • 最大性能:
    • 最小数据丢失 - 通常为几秒:LGWR ASYNCARCH 可没有,但推荐有 AFFIRMNOAFFIRM

AFFIRM:表示主数据库上的 REDO LOG 只有被写入到从数据库的 standby log 才算有效。

备库应用主库日志时有无 using current logfile 选项的区别

  • 无 using current logfile:主库切换日志后,备库才从归档文件挖掘出变化,然后应用到库文件中。
  • 有 using current logfile:备库根据接收到的 redo 信息,实时应用到备库上,即便是最大性能模式。

三种保护模式转换

如何查看数据库的主备、保护模式:

主库:

SQL> select name,open_mode,database_role,protection_mode,protection_level from v$database;

NAME      OPEN_MODE            DATABASE_ROLE    PROTECTION_MODE       PROTECTION_LEVEL
--------- -------------------- ---------------- --------------------  -------------------
ADGDB     READ WRITE           PRIMARY          MAXIMUM PERFORMANCE   MAXIMUM PERFORMANCE

备库:

SQL> select name,open_mode,database_role,protection_mode,protection_level from v$database;

NAME      OPEN_MODE             DATABASE_ROLE     PROTECTION_MODE       PROTECTION_LEVEL
--------- --------------------  ----------------  --------------------  -------------------
ADGDB     READ ONLY WITH APPLY  PHYSICAL STANDBY  MAXIMUM PERFORMANCE   MAXIMUM PERFORMANCE

转换为最高可用模式,在备库和主库上执行:

alter database set standby database to maximize availability;

转换为最大性能模式,在备库和主库上执行:

alter database set standby database to maximize performance;

转换为最大保护模式,在备库和主库上执行:

alter database set standby database to maximize protection;

例子:将DataGuard从默认的最大性能模式切换为最高可用模式

(1)备库

查询备库的保护模式:

SQL> select name,db_unique_name,open_mode,database_role,protection_mode,protection_level from v$database;

NAME      DB_UNIQUE_NAME      OPEN_MODE             DATABASE_ROLE     PROTECTION_MODE       PROTECTION_LEVEL
--------- ------------------  --------------------  ----------------  --------------------  -------------------
ADGDB     adgdbstandby        READ ONLY WITH APPLY  PHYSICAL STANDBY  MAXIMUM PERFORMANCE   MAXIMUM PERFORMANCE

修改备库的保护模式:

SQL> alter database set standby database to maximize availability;

Database altered.

再次查看备库的Dataguard

SQL> select name,open_mode,database_role,protection_mode,protection_level from v$database;

NAME      DB_UNIQUE_NAME     OPEN_MODE             DATABASE_ROLE     PROTECTION_MODE       PROTECTION_LEVEL

--------- ------------------ --------------------  ----------------  --------------------  --------------------

ADGDB     adgdbstandby       READ ONLY WITH APPLY  PHYSICAL STANDBY  MAXIMUM AVAILABILITY  MAXIMUM AVAILABILITY
(2)主库

查询主 库的保护模式:

SQL> select name,db_unique_name,open_mode,database_role,protection_mode,protection_level from v$database;

NAME      DB_UNIQUE_NAME      OPEN_MODE             DATABASE_ROLE     PROTECTION_MODE       PROTECTION_LEVEL
--------- ------------------  --------------------  ----------------  --------------------  -------------------
ADGDB     adgdb        READ ONLY WITH APPLY  PHYSICAL STANDBY  MAXIMUM PERFORMANCE   MAXIMUM PERFORMANCE

修改主库的保护模式:

SQL> alter database set standby database to maximize availability;

Database altered.

再次确认,DataGuard的保护模式已经变为了maximum availability:

SQL> select name,open_mode,database_role,protection_mode,protection_level from v$database;

NAME      DB_UNIQUE_NAME    OPEN_MODE    DATABASE_ROLE  PROTECTION_MODE       PROTECTION_LEVEL

--------- ----------------- -----------  -------------  --------------------  --------------------

ADGDB     adgdb             READ WRITE   PRIMARY        MAXIMUM AVAILABILITY  MAXIMUM AVAILABILITY

原文地址:https://blog.csdn.net/u010674953/article/details/144107640

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!