外观
Data Guard主备切换
概述
Data Guard主备切换是指将Data Guard配置中的主数据库转换为备数据库,同时将备数据库转换为主数据库的过程。主备切换是保证Data Guard高可用性的关键操作,用于计划内的维护活动(如软件升级、硬件维护等)或计划外的故障恢复。Data Guard支持两种切换类型:Switchover和Failover。
切换类型
1. Switchover
Switchover是一种计划内的主备切换,用于计划内的维护活动。Switchover的特点:
- 切换过程可控,数据零丢失
- 主库和备库都处于正常状态
- 可以双向切换,主库变为备库,备库变为主库
- 切换后可以快速回切
2. Failover
Failover是一种计划外的主备切换,用于主库故障时的应急恢复。Failover的特点:
- 主库处于故障状态,无法正常运行
- 备库接管主库角色,继续提供服务
- 可能会丢失少量数据(取决于Data Guard配置)
- 切换后需要重新配置Data Guard,才能进行回切
Switchover切换流程
1. 切换前准备
在执行Switchover之前,需要进行以下准备工作:
- 验证主库和备库的状态
- 检查Data Guard配置的完整性
- 确保所有Redo日志都已传输到备库
- 备份主库和备库的数据库
- 通知相关团队,确保业务影响最小化
2. 执行Switchover
步骤1:验证主库可以切换
在主库上执行以下命令,验证主库是否可以切换:
sql
SELECT SWITCHOVER_STATUS FROM V$DATABASE;
-- 输出应为:TO STANDBY或SESSIONS ACTIVE如果输出为SESSIONS ACTIVE,需要终止所有活动会话或使用WITH SESSION SHUTDOWN选项。
步骤2:将主库转换为备库
在主库上执行以下命令,将主库转换为备库:
sql
ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;步骤3:关闭并重启原主库
sql
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;步骤4:验证备库可以切换
在备库上执行以下命令,验证备库是否可以切换:
sql
SELECT SWITCHOVER_STATUS FROM V$DATABASE;
-- 输出应为:TO PRIMARY或SESSIONS ACTIVE步骤5:将备库转换为主库
在备库上执行以下命令,将备库转换为主库:
sql
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;步骤6:打开新主库
sql
ALTER DATABASE OPEN;步骤7:启动新备库的Redo应用
在新备库上执行以下命令,启动Redo应用:
sql
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;3. 切换后验证
执行以下命令,验证Switchover后的Data Guard配置:
sql
-- 在新主库上
SELECT DB_UNIQUE_NAME, DATABASE_ROLE, OPEN_MODE FROM V$DATABASE;
SELECT DEST_ID, DEST_NAME, STATUS, ERROR FROM V$ARCHIVE_DEST WHERE TARGET='STANDBY';
-- 在新备库上
SELECT DB_UNIQUE_NAME, DATABASE_ROLE, OPEN_MODE FROM V$DATABASE;
SELECT NAME, VALUE FROM V$DATAGUARD_STATS WHERE NAME IN ('transport lag', 'apply lag');Failover切换流程
1. 切换前准备
在执行Failover之前,需要进行以下准备工作:
- 确认主库已无法恢复
- 检查备库的Redo应用状态
- 确保备库已应用所有可用的Redo日志
- 备份备库的数据库
2. 执行Failover
步骤1:验证主库故障
确认主库已无法恢复,无法通过正常方式连接。
步骤2:在备库上检查Redo应用状态
sql
SELECT PROCESS, STATUS, THREAD#, SEQUENCE#, BLOCK# FROM V$MANAGED_STANDBY;
SELECT APPLIED_SCN FROM V$DATAGUARD_STATS;步骤3:尝试应用所有可用的Redo日志
sql
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH;如果上述命令失败,可以使用FORCING选项:
sql
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH FORCE;步骤4:将备库转换为主库
sql
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;如果上述命令失败,使用Failover命令:
sql
ALTER DATABASE FAILOVER TO <db_unique_name>;步骤5:打开新主库
sql
ALTER DATABASE OPEN;3. 切换后恢复
Failover后,需要进行以下恢复工作:
- 重新配置Data Guard,将原主库作为新备库添加到配置中
- 重建Data Guard配置,确保数据同步
- 测试新的Data Guard配置
版本差异
Oracle 19c vs 21c Data Guard切换差异
| 特性 | Oracle 19c | Oracle 21c |
|---|---|---|
| Switchover速度 | 一般 | 显著提升,优化了切换流程 |
| Failover速度 | 一般 | 显著提升,优化了故障检测和恢复流程 |
| 自动切换 | 支持Fast-Start Failover | 增强Fast-Start Failover,支持更多场景 |
| 零数据丢失 | 支持 | 增强零数据丢失,优化了Redo传输和应用 |
| 云集成 | 基础云集成 | 增强云集成,支持与OCI、AWS、Azure等云平台的切换 |
| 监控能力 | 基础监控能力 | 增强监控能力,提供更详细的切换状态和性能指标 |
| 自动诊断 | 基础自动诊断 | 增强自动诊断和修复能力,简化切换过程 |
最佳实践
1. 切换前准备
- 制定详细的切换计划:包括切换步骤、时间窗口、人员分工、回滚计划等
- 进行充分的测试:在测试环境中多次测试切换流程,确保切换顺利
- 备份数据库:在切换前备份主库和备库的数据库,以便出现问题时可以快速恢复
- 检查Data Guard配置:确保Data Guard配置完整,没有任何警告或错误
- 通知相关团队:提前通知业务团队、应用团队、运维团队等,确保业务影响最小化
2. 切换过程
- 选择合适的时间窗口:选择业务低峰期进行切换,减少对业务的影响
- 监控切换过程:实时监控切换过程,及时发现和解决问题
- 记录切换日志:详细记录切换过程中的每一步操作和输出,以便后续分析
- 保持沟通:切换过程中保持与相关团队的沟通,确保信息同步
- 准备回滚计划:制定详细的回滚计划,以便在切换失败时可以快速回滚
3. 切换后验证
- 验证Data Guard配置:检查新主库和新备库的状态,确保Data Guard配置正常
- 验证数据一致性:检查新主库和新备库的数据一致性,确保数据没有丢失
- 验证应用连接:测试应用程序是否可以正常连接到新主库
- 验证性能:监控新主库的性能,确保性能正常
- 更新文档:及时更新Data Guard配置文档,包括新的主库和备库信息
4. 日常维护
- 定期测试切换流程:至少每季度在测试环境中测试一次切换流程,每年在生产环境中测试一次
- 监控Data Guard状态:定期监控Data Guard的状态,包括Redo传输状态、应用状态、延迟等
- 更新软件版本:及时更新Oracle和Data Guard的软件版本,修复已知的bug和漏洞
- 优化配置:根据业务需求和系统负载,优化Data Guard配置,提高切换性能
故障处理
常见切换故障及解决方法
- Switchover命令执行失败
症状:执行ALTER DATABASE COMMIT TO SWITCHOVER TO STANDBY命令失败,提示错误信息
解决方法:
- 检查主库和备库的状态,确保都处于正常状态
- 检查Data Guard配置,确保配置完整
- 查看告警日志,定位具体的错误原因
- 尝试使用
WITH SESSION SHUTDOWN选项
- Redo日志应用失败
症状:备库无法应用Redo日志,提示错误信息
解决方法:
- 检查Redo日志的完整性
- 验证主库和备库的Oracle版本是否兼容
- 查看备库的告警日志,定位具体的错误原因
- 尝试重新启动Redo应用进程
- 切换后应用无法连接
症状:切换后,应用程序无法连接到新主库
解决方法:
- 检查新主库的监听器状态
- 验证客户端的tnsnames.ora配置是否正确
- 检查新主库的VIP状态
- 测试数据库连接,验证连接字符串是否正确
常见问题(FAQ)
Q: Switchover和Failover有什么区别?
A: Switchover是计划内的主备切换,用于计划内的维护活动,数据零丢失,主库和备库都处于正常状态;Failover是计划外的主备切换,用于主库故障时的应急恢复,主库处于故障状态,可能会丢失少量数据。
Q: 如何选择合适的切换类型?
A: 对于计划内的维护活动,如软件升级、硬件维护等,应使用Switchover;对于主库故障时的应急恢复,应使用Failover。
Q: Switchover会导致数据丢失吗?
A: 正常情况下,Switchover不会导致数据丢失,因为Switchover是在主库和备库都处于正常状态时执行的,所有Redo日志都会被传输到备库并应用。
Q: Failover会导致数据丢失吗?
A: Failover可能会导致少量数据丢失,取决于Data Guard的配置。如果使用SYNC传输模式和Real-Time Apply,数据丢失的风险最小;如果使用ASYNC传输模式,可能会丢失少量未传输到备库的Redo日志。
Q: 如何提高Data Guard切换的速度?
A: 可以通过以下方式提高Data Guard切换的速度:
- 使用高速存储设备,提高Redo日志的读写性能
- 使用高速网络连接,提高Redo日志的传输速度
- 优化Oracle参数,如LOG_BUFFER、DBWR_IO_SLAVES等
- 配置合适的Redo传输模式和应用模式
- 定期维护Data Guard配置,确保配置最优
Q: 切换后如何重新配置Data Guard?
A: 切换后,需要重新配置Data Guard,以便进行后续的切换。具体步骤:
- 将原主库作为新备库添加到Data Guard配置中
- 配置Redo日志传输路径
- 启动Redo应用进程
- 验证Data Guard配置的完整性
总结
Data Guard主备切换是保证Data Guard高可用性的关键操作,支持Switchover和Failover两种切换类型。Switchover用于计划内的维护活动,数据零丢失;Failover用于主库故障时的应急恢复,可能会丢失少量数据。在执行切换之前,需要进行充分的准备工作,包括制定详细的切换计划、进行充分的测试、备份数据库等。切换过程中需要实时监控,及时发现和解决问题。切换后需要进行全面的验证,确保Data Guard配置正常,数据一致性,应用连接正常。通过定期测试切换流程、监控Data Guard状态、更新软件版本等日常维护工作,可以提高Data Guard切换的可靠性和性能。Oracle 21c相比19c在Data Guard切换方面有显著增强,包括提高切换速度、增强自动诊断和修复能力、优化云集成等功能。
