Skip to content

切换演练与验证

概述

切换演练是指在测试环境或生产环境中模拟主备切换的过程,验证切换流程的正确性和可靠性。切换演练是保证Oracle数据库高可用性的重要环节,可以发现切换流程中的问题,提高管理员的切换经验,确保在实际故障发生时能够快速、可靠地进行切换。切换演练包括计划内切换演练和计划外切换演练,需要严格按照演练计划执行,并进行全面的验证。

切换演练类型

1. 计划内切换演练

计划内切换演练是指在主库和备库都处于正常状态时,执行Switchover切换的演练。计划内切换演练的数据零丢失,切换过程可控,主要用于验证计划内维护活动的切换流程。

2. 计划外切换演练

计划外切换演练是指模拟主库故障时,执行Failover切换的演练。计划外切换演练可能会丢失少量数据,切换过程需要谨慎执行,主要用于验证故障恢复流程。

3. 自动切换演练

自动切换演练是指模拟主库故障时,验证Fast-Start Failover自动切换的演练。自动切换演练无需人工干预,主要用于验证Fast-Start Failover配置的正确性和可靠性。

切换演练计划

1. 演练前准备

在执行切换演练之前,需要制定详细的演练计划,包括:

  • 演练目标:明确演练的目的和预期效果
  • 演练范围:确定演练涉及的数据库、应用和团队
  • 演练时间:选择业务低峰期进行演练,减少对业务的影响
  • 演练步骤:详细的切换步骤、命令和预期输出
  • 回滚计划:演练失败时的回滚步骤和命令
  • 验证方法:切换后的验证步骤和方法
  • 团队分工:明确每个团队成员的职责和任务
  • 沟通计划:演练过程中的沟通方式和频率

2. 演练文档准备

  • Data Guard配置文档:包括主库和备库的配置信息、网络配置、参数设置等
  • 切换流程文档:详细的切换步骤、命令和预期输出
  • 回滚计划文档:演练失败时的回滚步骤和命令
  • 测试用例文档:切换后的验证测试用例
  • 演练报告模板:演练结束后的报告模板

计划内切换演练流程

1. 演练前验证

在执行计划内切换演练之前,需要进行以下验证:

  • 验证主库和备库的状态
  • 检查Data Guard配置的完整性
  • 确保所有Redo日志都已传输到备库
  • 备份主库和备库的数据库
  • 通知相关团队,确保业务影响最小化

2. 执行切换演练

按照计划内切换流程执行切换演练:

步骤1:将主库转换为备库

在主库上执行以下命令,将主库转换为备库:

sql
-- 验证主库可以切换
SELECT SWITCHOVER_STATUS FROM V$DATABASE;

-- 如果有活动会话,终止所有会话
ALTER SYSTEM ENABLE RESTRICTED SESSION;

-- 将主库转换为备库
ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;

-- 关闭并重启原主库
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;

-- 启动Redo应用
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;

步骤2:将备库转换为主库

在备库上执行以下命令,将备库转换为主库:

sql
-- 验证备库可以切换
SELECT SWITCHOVER_STATUS FROM V$DATABASE;

-- 将备库转换为主库
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;

-- 打开新主库
ALTER DATABASE OPEN;

-- 启用所有会话
ALTER SYSTEM DISABLE RESTRICTED SESSION;

3. 演练后验证

执行以下命令,验证切换演练的结果:

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 PROCESS, STATUS, THREAD#, SEQUENCE#, BLOCK# FROM V$MANAGED_STANDBY;
SELECT NAME, VALUE FROM V$DATAGUARD_STATS WHERE NAME IN ('transport lag', 'apply lag');

-- 验证应用连接
-- 使用SQL*Plus或应用程序测试连接到新主库

4. 演练后恢复

切换演练完成后,需要将主库和备库恢复到原来的角色:

  • 执行回切操作,将主库和备库恢复到原来的角色
  • 验证回切后的Data Guard配置
  • 更新演练文档,记录演练过程中的问题和解决方法

计划外切换演练流程

1. 演练前准备

在执行计划外切换演练之前,需要进行以下准备:

  • 模拟主库故障的方法和工具
  • 备库的状态验证
  • 数据备份
  • 通知相关团队

2. 执行切换演练

按照计划外切换流程执行切换演练:

步骤1:模拟主库故障

使用以下方法模拟主库故障:

bash
# 方法1:关闭主库实例
sqlplus / as sysdba <<EOF
SHUTDOWN ABORT;
EOF

# 方法2:断开主库网络连接
ifconfig eth0 down

# 方法3:终止主库服务器进程
kill -9 <ora_pmon_process_id>

步骤2:执行Failover切换

在备库上执行以下命令,执行Failover切换:

sql
-- 检查备库状态
SELECT DB_UNIQUE_NAME, DATABASE_ROLE, OPEN_MODE FROM V$DATABASE;
SELECT PROCESS, STATUS, THREAD#, SEQUENCE#, BLOCK# FROM V$MANAGED_STANDBY;

-- 尝试应用所有可用的Redo日志
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH;

-- 如果上述命令失败,使用FORCING选项
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH FORCE;

-- 将备库转换为主库
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;

-- 如果上述命令失败,使用Failover命令
ALTER DATABASE FAILOVER TO <db_unique_name>;

-- 打开新主库
ALTER DATABASE OPEN;

3. 演练后验证

执行以下命令,验证计划外切换演练的结果:

sql
-- 验证新主库状态
SELECT DB_UNIQUE_NAME, DATABASE_ROLE, OPEN_MODE FROM V$DATABASE;

-- 验证应用连接
-- 使用SQL*Plus或应用程序测试连接到新主库

-- 验证数据一致性
-- 检查关键业务数据的一致性

4. 演练后恢复

计划外切换演练完成后,需要进行以下恢复工作:

  • 恢复模拟故障的主库
  • 重新配置Data Guard,将原主库作为新备库添加到配置中
  • 验证新的Data Guard配置
  • 更新演练文档,记录演练过程中的问题和解决方法

自动切换演练流程

1. 演练前准备

在执行自动切换演练之前,需要进行以下准备:

  • 验证Fast-Start Failover配置
  • 确保Observer正在运行
  • 模拟主库故障的方法和工具
  • 通知相关团队

2. 执行切换演练

按照自动切换流程执行切换演练:

步骤1:验证Fast-Start Failover配置

sql
DGMGRL> SHOW CONFIGURATION;
DGMGRL> SHOW FAST_START FAILOVER;
DGMGRL> SHOW OBSERVER;

步骤2:模拟主库故障

使用以下方法模拟主库故障:

bash
# 方法1:关闭主库实例
sqlplus / as sysdba <<EOF
SHUTDOWN ABORT;
EOF

# 方法2:断开主库网络连接
ifconfig eth0 down

步骤3:监控自动切换过程

监控Observer日志和备库告警日志,了解自动切换的过程:

bash
# 查看Observer日志
tail -f observer.log

# 查看备库告警日志
tail -f $ORACLE_BASE/diag/rdbms/<dbname>/<instance_name>/trace/alert_<instance_name>.log

3. 演练后验证

执行以下命令,验证自动切换演练的结果:

sql
-- 验证新主库状态
DGMGRL> SHOW CONFIGURATION;
DGMGRL> SHOW DATABASE <new_primary_db_unique_name>;

-- 验证应用连接
-- 使用SQL*Plus或应用程序测试连接到新主库

-- 验证Fast-Start Failover配置
DGMGRL> SHOW FAST_START FAILOVER;

4. 演练后恢复

自动切换演练完成后,需要进行以下恢复工作:

  • 恢复模拟故障的主库
  • 重新配置Fast-Start Failover
  • 验证Fast-Start Failover配置
  • 更新演练文档,记录演练过程中的问题和解决方法

切换演练验证方法

1. 数据库验证

  • 状态验证:检查数据库角色、状态和打开模式
  • 配置验证:检查Data Guard配置的完整性
  • Redo传输验证:检查Redo日志的传输状态
  • Redo应用验证:检查Redo日志的应用状态
  • 数据一致性验证:检查主库和备库的数据一致性

2. 应用验证

  • 连接验证:测试应用程序是否可以正常连接到新主库
  • 功能验证:测试应用程序的核心业务功能
  • 性能验证:测试应用程序的性能指标
  • 并发验证:测试应用程序的并发处理能力

3. 架构验证

  • 网络验证:检查数据库网络连接的可用性
  • 存储验证:检查数据库存储的可用性和性能
  • 备份验证:检查数据库备份的可用性和完整性
  • 监控验证:检查数据库监控系统的可用性和准确性

版本差异

Oracle 19c vs 21c切换演练差异

特性Oracle 19cOracle 21c
切换速度一般显著提升,优化了切换流程
自动验证基础自动验证增强自动验证,减少手动验证步骤
演练工具基础演练工具增强演练工具,提供更详细的演练报告
云集成基础云集成增强云集成,支持与OCI、AWS、Azure等云平台的切换演练
监控能力基础监控能力增强监控能力,提供更详细的演练状态和性能指标

最佳实践

1. 演练计划

  • 定期执行演练:至少每季度执行一次计划内切换演练,每年执行一次计划外切换演练
  • 选择合适的时间窗口:选择业务低峰期进行演练,减少对业务的影响
  • 制定详细的演练计划:包括演练目标、步骤、回滚计划和验证方法
  • 通知相关团队:提前通知业务团队、应用团队、运维团队等,确保业务影响最小化

2. 演练执行

  • 严格按照演练计划执行:不要跳过任何步骤,确保每个步骤的执行结果符合预期
  • 详细记录演练过程:记录每个步骤的执行命令、输出和时间,以便后续分析
  • 实时监控演练状态:监控主库、备库和Observer的状态,及时发现和解决问题
  • 保持沟通:演练过程中保持与相关团队的沟通,确保信息同步
  • 准备回滚计划:在演练过程中,如果出现问题,立即执行回滚计划

3. 演练验证

  • 全面验证演练结果:验证数据库状态、应用连接、数据一致性等
  • 测试业务功能:测试应用程序的核心业务功能,确保业务正常运行
  • 验证性能指标:监控数据库和应用程序的性能指标,确保性能正常
  • 记录验证结果:详细记录验证结果,包括成功和失败的测试用例

4. 演练后总结

  • 召开演练总结会议:与相关团队一起总结演练过程中的问题和经验
  • 更新演练文档:根据演练过程中的问题和经验,更新演练文档
  • 优化切换流程:根据演练结果,优化切换流程和配置
  • 培训团队成员:根据演练过程中的问题,培训团队成员,提高切换经验

常见问题及解决方法

1. 演练过程中切换命令执行失败

症状:执行切换命令时,命令失败,提示错误信息

解决方法

  • 查看告警日志,定位具体的错误原因
  • 检查主库和备库的状态,确保状态正常
  • 验证Data Guard配置,确保配置完整
  • 执行回滚操作,恢复到演练前的状态
  • 调整演练计划,修复问题后重新执行演练

2. 演练后应用无法连接

症状:演练后,应用程序无法连接到新主库

解决方法

  • 检查新主库的监听器状态
  • 验证客户端的tnsnames.ora配置是否正确
  • 检查新主库的VIP状态
  • 测试数据库连接,验证连接字符串是否正确
  • 检查新主库的会话限制,确保没有启用RESTRICTED SESSION

3. 演练后数据不一致

症状:演练后,新主库和新备库的数据不一致

解决方法

  • 使用DBMS_COMPARISON包验证数据一致性
  • 修复不一致的数据
  • 重新配置Data Guard,确保Redo日志正常传输和应用
  • 调整演练计划,修复数据一致性问题

总结

切换演练是保证Oracle数据库高可用性的重要环节,可以验证切换流程的正确性和可靠性,提高管理员的切换经验,确保在实际故障发生时能够快速、可靠地进行切换。切换演练包括计划内切换演练、计划外切换演练和自动切换演练,需要制定详细的演练计划,严格按照计划执行,并进行全面的验证。通过定期执行切换演练、实时监控演练状态、全面验证演练结果和总结演练经验,可以提高Oracle数据库的高可用性和可靠性。Oracle 21c相比19c在切换演练方面有显著增强,包括提高切换速度、增强自动验证、优化云集成等功能,为切换演练提供了更好的支持。