Skip to content

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: 步骤:

  1. 修复原主库的故障
  2. 将原主库置于 mount 状态
  3. 使用 RMAN 从新主库恢复原主库
  4. 配置原主库为新主库的备库
  5. 启动日志应用
  6. 验证 Data Guard 配置

Q4: 如何测试非计划切换流程?

A4: 测试方法:

  • 定期执行非计划切换演练
  • 模拟各种故障场景
  • 测量切换时间和效果
  • 验证应用功能和数据一致性
  • 评估团队响应能力
  • 总结经验教训并改进流程

Q5: 非计划切换过程中遇到归档日志差距如何处理?

A5: 处理方法:

  • 检查归档日志传输状态
  • 尝试从主库或其他备库获取缺失的归档日志
  • 如果无法获取归档日志,考虑使用 RMAN 备份恢复
  • 对于逻辑备库,可能需要重新同步
  • 评估数据丢失的影响并采取相应措施

Q6: 如何优化非计划切换的性能?

A6: 优化策略:

  • 使用最快的网络连接
  • 配置适当的归档日志传输设置
  • 优化备库的日志应用性能
  • 确保备库有足够的资源
  • 提前准备客户端连接切换方案
  • 简化切换流程,减少人工干预

Q7: 非计划切换后如何处理客户端连接?

A7: 处理方法:

  • 使用 Transparent Application Failover (TAF)
  • 配置连接字符串中的故障转移
  • 使用负载均衡器实现自动连接切换
  • 提前准备连接切换方案
  • 测试客户端连接切换过程
  • 及时通知用户连接变更

Q8: 如何确保非计划切换的成功率?

A8: 保障措施:

  • 定期演练切换流程
  • 维护详细的操作手册
  • 确保团队成员熟悉切换流程
  • 建立完善的监控和告警机制
  • 定期检查 Data Guard 配置
  • 准备充分的故障处理方案

Q9: 非计划切换与灾难恢复计划的关系是什么?

A9: 关系:

  • 非计划切换是灾难恢复计划的重要组成部分
  • 灾难恢复计划包含更广泛的内容,如预防措施、响应流程、恢复策略等
  • 非计划切换是灾难发生时的具体执行步骤
  • 灾难恢复计划指导非计划切换的执行
  • 非计划切换的结果是灾难恢复的重要指标

Q10: 如何评估非计划切换的效果?

A10: 评估标准:

  • 切换时间:从故障检测到切换完成的时间
  • 数据丢失:切换过程中丢失的数据量
  • 业务影响:对业务的影响程度和持续时间
  • 系统稳定性:切换后系统的稳定程度
  • 恢复完整性:数据和应用的恢复完整性
  • 团队响应:响应团队的表现和协作效率