#保护模式切换
YashanDB高可用架构中提供了三种保护模式:
最大性能模式(MAXIMIZE PERFORMANCE),数据库建库后默认为该模式
最大可用模式(MAXIMIZE AVAILABILITY)
最大保护模式(MAXIMIZE PROTECTION)
每个节点实例上均存在保护模式设置且支持独立切换,但建议同一个环境中所有节点的保护模式保持一致。在主备场景中,主库的保护模式会通过心跳同步到备库,当各节点的保护模式配置不完全一致时,整个数据库环境始终以主库的保护模式为准。
通过查询V$DATABASE视图可以获取当前的保护模式信息,视图中的PROTECTION_MODE字段表示当前节点设置的保护模式,PROTECTION_LEVEL字段表示实际生效的保护模式和级别(redo日志的同步状态)。
切换保护模式需遵循如下规则:
- 分布式部署中不建议切换保护模式,如需切换只能通过直连MN或DN节点操作。
- 切换保护模式需要在数据库处于OPEN或MOUNT状态时操作。
- 最大可用或最大保护模式下,主库事务提交需要等待redo同步至相应备库(MAJORITY或自定义同步备)。因此,在数据库OPEN状态下切换保护模式时也必须保证主库redo已同步至相应备库,否则将切换失败。建议通过先切换至最大可用进行过渡,等待redo同步完成(即V$DATABASE的PROTECTION_LEVEL变为MAXIMUM AVAILABILITY)再切换至最终的目标保护模式。
示例(单机、分布式部署)
-- 切换前的保护模式
SELECT PROTECTION_MODE, PROTECTION_LEVEL FROM V$DATABASE;
PROTECTION_MODE PROTECTION_LEVEL
--------------------------------- ---------------------------------
MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY
-- 切换保护模式(分布式部署下需直连MN或DN节点)
ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE;
-- 切换后的保护模式
SELECT PROTECTION_MODE, PROTECTION_LEVEL FROM V$DATABASE;
PROTECTION_MODE PROTECTION_LEVEL
--------------------------------- ---------------------------------
MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE