DataGuard的三种保护模式
(一)三种保护模式介绍
1.最大性能模式
这种模式保证数据库主库性能最大化,主备库之间数据是异步传输的。即,主库日志归档以后才会传输到备库,在备库上使用归档日志文件做恢复操作。
这种模式提供在不影响primary数据库性能前提下最高级别的数据保护策略。事物可以随时提交,当前primary数据库的redo数据也需要至少写入一个standby数据库,不过这种写入是不同步的。
2.最高可用模式
这种模式和“最大保护”模式差不多,正常情况下,主备库之间是同步的。当网络或备库出现故障时,不会影响到主库的宕机,主库会自动切换为“ 最大性能”模式,等待备库可用时,将归档传输到备库做恢复。
可以把最高可用模式理解为“最大保护”模式和“最大性能”模式的中间体。
这种模式提供在不影响primary数据库可用前提下最高级别的数据保护策略。其实现方式与最大保护模式类似,也是要求所有事物在提交前必须保障redo数据至少在一个standby数据库可用,不过与之不同的是,如果出现故障导致无法同时写入stangby数据库redo log,primary数据库并不会shutdown,而是自动转为最高性能模式,等standby数据库恢复正常之后,又自动转换为最高可用模式。
3.最大保护模式
这种模式主备之间数据是同步的。即主库提交commit的同时,备库会做相应的恢复。最大限度保证了数据的完整性,不允许数据的丢失。
如果主备库之间网络,或者备库出现问题会直接影响主库操作,导致主库宕机。这种模式能够确保绝无数据丢失。要实现这一步当然是有代价的,他要求所有的事物在提交前期redo不仅被写入本地的online redo log,还要同时提交到standby数据库的standby redo log,并确认redo数据至少在一个standby数据库可用(如果有多个数据库),然后才在primary数据库上提交。如果出现故障导致standby数据库不可用,那么primary数据库也会被shutdown。
注意:
最大保护模式和最高可用模式需要至少一个standby数据库redo数据被同步写入。
(二)三种保护模式参数配置
最大性能:
LGWR ASYNC NOAFFIRM
最大保护,最高可用:
LGWR SYNC AFFIRM
(三)三种保护模式转换
如何查看数据库的主备、保护模式:
主库:
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
1.转换为最高可用模式,在备库和主库上执行:
alter database set standby database to maximize availability;
2.转换为最大性能模式,在备库和主库上执行:
alter database set standby database to maximize performance;
3.转换为最大保护模式,在备库和主库上执行:
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,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 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 WRITE PRIMARY MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE
修改主库的保护模式:
SQL> alter database set standby database to maximize availability; Database altered.
再次确认,DataGuard的保护模式已经变为了maximum availability:
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 WRITE PRIMARY MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY
【完】
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?