本文档详细介绍Oracle DataGuard切换的操作步骤和最佳实践,风哥教程参考Oracle官方文档High Availability部分。更多视频教程www.fgedu.net.cn
Part01-基础概念与理论知识
1.1 切换概述
DataGuard切换(Switchover)是一种计划内的角色转换操作,将主数据库转换为备用数据库,将备用数据库转换为主数据库。学习交流加群风哥微信: itpux-com
切换的特点:
- 计划内操作,无数据丢失
- 主备数据库角色互换
- 可以回滚操作
- 用于维护、升级等场景
1.2 切换工作原理
切换的工作原理如下:
- 主数据库将所有重做日志传输到备用数据库
- 备用数据库应用所有接收到的重做日志
- 主数据库转换为备用角色
- 备用数据库转换为主角色
- 新的主数据库开始接受客户端连接
1.3 切换与故障转移的区别
| 特性 | 切换(Switchover) | 故障转移(Failover) |
|---|---|---|
| 触发方式 | 计划内操作 | 主数据库故障时 |
| 数据丢失 | 无 | 可能有(取决于保护模式) |
| 可回滚性 | 可以 | 不可以 |
| 操作复杂度 | 低 | 中 |
Part02-生产环境规划与建议
2.1 切换前准备
切换前的准备工作:
- 检查主备数据库状态,确保同步正常
- 备份主数据库,以防万一
- 通知相关人员,安排维护窗口
- 测试应用程序连接新主数据库的能力
- 准备回滚计划
2.2 切换时间窗口
切换的时间窗口考虑:
- 选择业务低峰期进行切换
- 预留足够的时间进行切换和验证
- 提前通知用户,减少业务影响
- 准备应急方案,应对可能的问题
2.3 回滚计划
回滚计划:
- 记录切换前的状态
- 准备回滚脚本
- 确定回滚条件
- 测试回滚流程
Part03-生产环境项目实施方案
切换的实施步骤:
- 检查主备数据库状态
- 验证备用数据库已应用所有重做日志
- 执行切换操作
- 验证新主数据库状态
- 配置客户端连接
- 监控系统状态
Part04-生产案例与实战讲解
4.1 使用DataGuard Broker执行切换
dgmgrl sys/password@PRIMARY
# 输出日志
DGMGRL for Linux: Release 19.0.0.0.0 – Production on Fri Apr 1 10:00:00 2026
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
Welcome to DGMGRL, type “help” for information.
Connected to “fgedudb”
Connected as SYSDBA.
# 检查配置状态
SHOW CONFIGURATION;
# 输出日志
Configuration – fgedudb_dg
Protection Mode: MaxAvailability
Members:
fgedudb – Primary database
fgedudb_stby – Physical standby database
Fast-Start Failover: DISABLED
Configuration Status:
SUCCESS (status updated 32 seconds ago)
# 执行切换操作
SWITCHOVER TO ‘fgedudb_stby’;
# 输出日志
Performing switchover NOW, please wait…
Operation requires a connection to database “fgedudb_stby”
Connecting …
Connected to “fgedudb_stby”
Connected as SYSDBA.
New primary database “fgedudb_stby” is opening…
Operation requires start up of instance “fgedudb” on database “fgedudb”
Starting instance “fgedudb”…
ORACLE instance started.
Database mounted.
Database opened.
Switchover succeeded, new primary is “fgedudb_stby”
4.2 使用SQL命令执行切换
sqlplus / as sysdba
# 验证主数据库是否可以切换
SELECT SWITCHOVER_STATUS FROM v$database;
# 输出日志
SWITCHOVER_STATUS
——————–
TO STANDBY
# 执行切换到备用角色
ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;
# 输出日志
Database altered.
# 关闭并重启原主数据库到mount状态
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
# 在备用数据库上执行
sqlplus / as sysdba
# 验证备用数据库是否可以切换
SELECT SWITCHOVER_STATUS FROM v$database;
# 输出日志
SWITCHOVER_STATUS
——————–
TO PRIMARY
# 执行切换到主角色
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;
# 输出日志
Database altered.
# 打开新主数据库
ALTER DATABASE OPEN;
# 输出日志
Database altered.
4.3 验证切换结果
sqlplus / as sysdba
SELECT DATABASE_ROLE, OPEN_MODE FROM v$database;
# 输出日志
DATABASE_ROLE OPEN_MODE
—————- ——————–
PRIMARY READ WRITE
# 检查新备用数据库状态
sqlplus sys/password@fgedudb
SELECT DATABASE_ROLE, OPEN_MODE FROM v$database;
# 输出日志
DATABASE_ROLE OPEN_MODE
—————- ——————–
PHYSICAL STANDBY MOUNTED
# 启动备用数据库的恢复进程
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
# 输出日志
Database altered.
4.4 配置客户端连接
cat > $ORACLE_HOME/network/admin/tnsnames.ora << EOF FGEDUDB = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = fgedu-standby.net.cn)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = fgedudb) ) ) EOF
# 测试连接
sqlplus sys/password@fgedudb
# 输出日志
SQL*Plus: Release 19.0.0.0.0 – Production on Fri Apr 1 11:00:00 2026
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.3.0.0.0 – Production
Version 19.3.0.0.0
SQL> SELECT DATABASE_ROLE FROM v$database;
DATABASE_ROLE
—————-
PRIMARY
Part05-风哥经验总结与分享
5.1 切换最佳实践
- 使用DataGuard Broker执行切换,简化操作流程
- 在切换前确保主备数据库同步正常
- 选择业务低峰期进行切换
- 提前通知相关人员,减少业务影响
- 切换后验证系统状态,确保一切正常
5.2 常见问题与解决方案
- 切换失败:检查主备数据库状态,确保同步正常
- 客户端连接失败:检查TNS配置,确保连接到新主数据库
- 备用数据库无法启动:检查数据库状态和参数配置
- 切换后性能问题:检查新主数据库的参数配置和资源使用情况
5.3 性能优化建议
- 在切换前优化主备数据库的性能,减少切换时间
- 使用并行重做应用,提高备用数据库的应用速度
- 配置适当的网络参数,确保重做日志传输速度
- 定期测试切换操作,熟悉流程,减少切换时间
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
