外观
切换演练与验证
概述
切换演练是指在测试环境或生产环境中模拟主备切换的过程,验证切换流程的正确性和可靠性。切换演练是保证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>.log3. 演练后验证
执行以下命令,验证自动切换演练的结果:
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 19c | Oracle 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在切换演练方面有显著增强,包括提高切换速度、增强自动验证、优化云集成等功能,为切换演练提供了更好的支持。
