外观
Oracle 非计划切换
概念与特点
非计划切换定义
- 非计划切换(Unplanned Switchover):
- 主数据库发生故障且无法快速恢复时,将备数据库转换为主数据库的过程
- 也称为故障切换(Failover)
- 是 Data Guard 环境中的灾难恢复操作
与计划切换的区别
| 特性 | 计划切换 | 非计划切换 |
|---|---|---|
| 触发原因 | 计划性维护 | 主数据库故障 |
| 准备工作 | 充分准备 | 紧急响应 |
| 数据一致性 | 完全一致 | 可能有数据丢失 |
| 操作复杂度 | 较低 | 较高 |
| 回切流程 | 简单 | 复杂 |
| 影响范围 | 可控 | 可能较大 |
非计划切换类型
零数据丢失切换:
- 适用于同步模式的物理备库
- 确保零数据丢失
- 需要主库和备库之间的网络连接正常
有数据丢失切换:
- 适用于异步模式的物理备库
- 可能会丢失部分未传输到备库的数据
- 适用于网络延迟较大的场景
逻辑备库切换:
- 适用于逻辑备库
- 切换过程与物理备库有所不同
- 支持更灵活的数据复制策略
触发条件
主数据库故障
硬件故障:
- 服务器硬件故障
- 存储系统故障
- 网络设备故障
软件故障:
- 操作系统崩溃
- 数据库实例故障
- 数据库损坏
人为故障:
- 误操作导致主库不可用
- 安全事件导致主库损坏
- 配置错误导致主库无法启动
自然灾害:
- 地震、洪水等自然灾害导致数据中心不可用
- 电力中断导致主库停机
故障评估
故障检测:
- 通过监控系统检测主库状态
- 验证故障的真实性和严重程度
- 确认故障是否可以快速恢复
恢复时间评估:
- 评估主库恢复所需的时间
- 与业务 RTO(恢复时间目标)比较
- 决定是否需要执行非计划切换
数据影响评估:
- 评估可能的数据丢失范围
- 分析业务影响程度
- 制定数据恢复策略
准备工作
环境准备
Data Guard 配置检查:
- 验证备库状态和配置
- 检查归档日志传输状态
- 确认备库的应用状态
网络配置:
- 确保备库网络连接正常
- 检查客户端连接配置
- 准备网络切换方案
存储检查:
- 验证备库存储空间充足
- 检查存储性能状态
- 确认备份状态
人员准备
响应团队:
- DBA 团队成员
- 系统管理员
- 网络工程师
- 应用开发人员
- 业务代表
职责分配:
- 切换操作负责人
- 故障诊断人员
- 网络配置人员
- 应用验证人员
- 沟通协调人员
文档准备
操作手册:
- 详细的非计划切换步骤
- 故障处理流程
- 回切操作指南
配置文档:
- Data Guard 配置信息
- 网络配置信息
- 存储配置信息
应急联系方式:
- 团队成员联系信息
- 外部支持联系方式
- 管理层联系信息
执行流程
1. 故障确认与评估
确认主库故障:
- 尝试连接主库验证状态
- 检查主库服务器状态
- 分析故障日志
评估故障严重程度:
- 确定故障类型和影响范围
- 评估主库恢复可能性和时间
- 决定是否执行非计划切换
通知相关方:
- 通知响应团队
- 通知业务部门
- 通知管理层
2. 备库状态检查
物理备库检查:
sql-- 检查备库状态 SELECT DATABASE_ROLE, OPEN_MODE, PROTECTION_MODE FROM V$DATABASE; -- 检查应用状态 SELECT SEQUENCE#, APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE# DESC; -- 检查差距 SELECT * FROM V$ARCHIVE_GAP;逻辑备库检查:
sql-- 检查逻辑备库状态 SELECT DATABASE_ROLE, OPEN_MODE FROM V$DATABASE; -- 检查应用状态 SELECT APPLIED_TIME, LATEST_TIME FROM DBA_LOGSTDBY_PROGRESS; -- 检查应用错误 SELECT * FROM DBA_LOGSTDBY_EVENTS ORDER BY TIMESTAMP DESC;网络连接检查:
bash# 检查监听器状态 lsnrctl status # 测试网络连接 tnsping standby_db
3. 执行非计划切换
物理备库切换
零数据丢失切换:
sql-- 验证备库状态 SELECT DATABASE_ROLE, OPEN_MODE, PROTECTION_MODE FROM V$DATABASE; -- 执行故障切换 ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH FORCE; -- 将备库转换为主库 ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY; -- 打开数据库 ALTER DATABASE OPEN;有数据丢失切换:
sql-- 执行故障切换(允许数据丢失) ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH FORCE; -- 将备库转换为主库 ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY; -- 打开数据库 ALTER DATABASE OPEN;
逻辑备库切换
- 逻辑备库切换:sql
-- 停止 SQL 应用 ALTER DATABASE STOP LOGICAL STANDBY APPLY; -- 执行故障切换 ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY; -- 打开数据库 ALTER DATABASE OPEN; -- 启用日志归档 ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
4. 客户端连接切换
连接字符串更新:
- 更新 tnsnames.ora 文件
- 更新应用配置文件
- 更新负载均衡配置
连接测试:
bash# 测试新主库连接 sqlplus sys/password@new_primary as sysdba # 测试应用连接 # 执行应用连接测试脚本流量切换:
- 切换 DNS 记录
- 调整负载均衡器配置
- 通知用户连接新的数据库地址
故障处理
常见故障
备库无法启动:
- 检查备库状态和日志
- 分析启动失败原因
- 执行相应的修复操作
归档日志差距:
- 检查归档日志传输状态
- 手动传输缺失的归档日志
- 考虑使用 RMAN 备份恢复
网络连接问题:
- 检查网络配置
- 测试网络连通性
- 修复网络故障
存储空间不足:
- 检查备库存储空间
- 清理不必要的文件
- 扩展存储空间
故障处理策略
分级响应:
- 根据故障严重程度采取不同的响应策略
- 建立故障升级机制
- 确保快速有效地处理故障
回退方案:
- 制定详细的回退计划
- 准备必要的回退脚本
- 在切换失败时执行回退操作
外部支持:
- 当遇到无法解决的问题时,及时寻求外部支持
- 联系 Oracle 技术支持
- 咨询专业顾问
验证与后续操作
切换后验证
数据库状态验证:
sql-- 验证新主库状态 SELECT DATABASE_ROLE, OPEN_MODE, PROTECTION_MODE FROM V$DATABASE; -- 检查实例状态 SELECT INSTANCE_NAME, STATUS FROM V$INSTANCE; -- 检查服务状态 SELECT NAME, STATUS FROM V$SERVICES;应用验证:
- 执行应用功能测试
- 验证业务流程正常
- 检查数据一致性
性能验证:
- 监控数据库性能
- 检查资源使用情况
- 验证系统响应时间
后续操作
备库重建:
- 重建原主库作为新的备库
- 配置 Data Guard 关系
- 验证归档日志传输
配置更新:
- 更新 Data Guard 配置
- 更新监控系统配置
- 更新备份策略
文档更新:
- 更新 Data Guard 配置文档
- 记录切换操作过程
- 总结经验教训
回切操作
回切准备:
- 验证原主库恢复状态
- 准备回切计划
- 通知相关方
回切执行:
- 执行计划切换将角色换回
- 验证回切结果
- 切换客户端连接
回切后验证:
- 验证数据库状态
- 验证应用功能
- 验证 Data Guard 配置
最佳实践
前期准备
定期演练:
- 定期执行非计划切换演练
- 测试故障处理流程
- 评估切换时间和效果
监控增强:
- 建立完善的监控系统
- 设置合理的告警阈值
- 实现自动故障检测
文档完善:
- 维护详细的操作手册
- 及时更新配置文档
- 建立知识库
执行过程
快速响应:
- 建立快速响应机制
- 明确响应流程和职责
- 确保团队成员快速到位
规范操作:
- 严格按照操作手册执行
- 记录每一步操作
- 验证每一步操作结果
有效沟通:
- 建立清晰的沟通机制
- 及时通报切换进展
- 确保信息传递准确
后续管理
状态监控:
- 加强切换后系统监控
- 密切关注数据库状态
- 及时处理出现的问题
定期检查:
- 定期检查 Data Guard 配置
- 验证备库状态
- 测试切换流程
持续改进:
- 分析切换过程中的问题
- 提出改进建议
- 优化切换流程
版本差异
Oracle 11g 非计划切换
特性:
- 基本的非计划切换功能
- 有限的自动化能力
- 传统的命令行操作
命令:
sql-- 11g 故障切换命令 ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH; ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY; ALTER DATABASE OPEN;
Oracle 12c 非计划切换
特性:
- 增强的非计划切换功能
- 支持零数据丢失切换
- 改进的命令和选项
命令:
sql-- 12c 故障切换命令 ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH FORCE; ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY; ALTER DATABASE OPEN;
Oracle 19c 非计划切换
特性:
- 自动化非计划切换能力
- 增强的故障检测
- 改进的切换性能
命令:
sql-- 19c 故障切换命令 ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH FORCE; ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY; ALTER DATABASE OPEN;
Oracle 21c 非计划切换
特性:
- 智能故障检测和切换
- 增强的零数据丢失能力
- 自动化回切操作
命令:
sql-- 21c 故障切换命令 ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH FORCE; ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY; ALTER DATABASE OPEN;
常见问题(FAQ)
Q1: 如何判断是否需要执行非计划切换?
A1: 考虑以下因素:
- 主库故障严重程度:主库是否完全不可用
- 恢复时间评估:主库恢复所需时间是否超过业务 RTO
- 备库状态:备库是否正常,是否有足够的归档日志
- 业务影响:故障对业务的影响程度
- 数据丢失风险:执行切换可能导致的数据丢失范围
Q2: 如何最小化非计划切换的数据丢失?
A2: 措施:
- 使用最高级别的保护模式(Maximum Availability 或 Maximum Protection)
- 确保归档日志及时传输和应用
- 配置快速归档日志传输
- 定期检查备库状态和归档日志差距
- 实施有效的监控和告警机制
Q3: 非计划切换后如何重建备库?
A3: 步骤:
- 修复原主库的故障
- 将原主库置于 mount 状态
- 使用 RMAN 从新主库恢复原主库
- 配置原主库为新主库的备库
- 启动日志应用
- 验证 Data Guard 配置
Q4: 如何测试非计划切换流程?
A4: 测试方法:
- 定期执行非计划切换演练
- 模拟各种故障场景
- 测量切换时间和效果
- 验证应用功能和数据一致性
- 评估团队响应能力
- 总结经验教训并改进流程
Q5: 非计划切换过程中遇到归档日志差距如何处理?
A5: 处理方法:
- 检查归档日志传输状态
- 尝试从主库或其他备库获取缺失的归档日志
- 如果无法获取归档日志,考虑使用 RMAN 备份恢复
- 对于逻辑备库,可能需要重新同步
- 评估数据丢失的影响并采取相应措施
Q6: 如何优化非计划切换的性能?
A6: 优化策略:
- 使用最快的网络连接
- 配置适当的归档日志传输设置
- 优化备库的日志应用性能
- 确保备库有足够的资源
- 提前准备客户端连接切换方案
- 简化切换流程,减少人工干预
Q7: 非计划切换后如何处理客户端连接?
A7: 处理方法:
- 使用 Transparent Application Failover (TAF)
- 配置连接字符串中的故障转移
- 使用负载均衡器实现自动连接切换
- 提前准备连接切换方案
- 测试客户端连接切换过程
- 及时通知用户连接变更
Q8: 如何确保非计划切换的成功率?
A8: 保障措施:
- 定期演练切换流程
- 维护详细的操作手册
- 确保团队成员熟悉切换流程
- 建立完善的监控和告警机制
- 定期检查 Data Guard 配置
- 准备充分的故障处理方案
Q9: 非计划切换与灾难恢复计划的关系是什么?
A9: 关系:
- 非计划切换是灾难恢复计划的重要组成部分
- 灾难恢复计划包含更广泛的内容,如预防措施、响应流程、恢复策略等
- 非计划切换是灾难发生时的具体执行步骤
- 灾难恢复计划指导非计划切换的执行
- 非计划切换的结果是灾难恢复的重要指标
Q10: 如何评估非计划切换的效果?
A10: 评估标准:
- 切换时间:从故障检测到切换完成的时间
- 数据丢失:切换过程中丢失的数据量
- 业务影响:对业务的影响程度和持续时间
- 系统稳定性:切换后系统的稳定程度
- 恢复完整性:数据和应用的恢复完整性
- 团队响应:响应团队的表现和协作效率
