当前位置: 首页 > news >正文

在 Oracle Data Guard 环境中,手工将备库(Standby)切换为主库(Primary)

在 Oracle Data Guard 环境中,手工将备库(Standby)切换为主库(Primary),通常是指 不使用 Data Guard Broker(DGMGRL),而是通过 原生 SQL 命令 手动完成角色切换。这种操作适用于以下场景:

  • 未配置 Data Guard Broker
  • Broker 不可用
  • 需要精细控制切换过程

根据主库是否可用,分为两种情况:


✅ 一、计划内切换(Switchover)——主库正常

目标:主库 → 备库,备库 → 主库(无数据丢失,可逆

📌 前提条件

  • 主库和备库均正常运行
  • 日志同步无延迟(V$ARCHIVED_LOG.APPLIED = 'YES'
  • 主库 SWITCHOVER_STATUS = 'TO STANDBY'

🔧 操作步骤

步骤 1:在主库上切换为备库
-- 1.1 检查是否可切换
SELECT SWITCHOVER_STATUS FROM V$DATABASE;
-- 期望值:TO STANDBY 或 SESSIONS ACTIVE-- 1.2 执行切换(主库变备库)
ALTER DATABASE COMMIT TO SWITCHOVER TO STANDBY WITH SESSION SHUTDOWN;-- 1.3 关闭并重新启动为备库
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

WITH SESSION SHUTDOWN 会自动断开所有用户会话,避免“ORA-01093”错误。


步骤 2:在原备库上切换为主库
-- 2.1 检查是否可切换
SELECT SWITCHOVER_STATUS FROM V$DATABASE;
-- 期望值:TO PRIMARY-- 2.2 停止 Redo 应用
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;-- 2.3 切换为主库
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;-- 2.4 打开数据库(如果是 11g 及以上,通常自动 OPEN)
ALTER DATABASE OPEN;

步骤 3:验证角色
-- 新主库
SELECT DATABASE_ROLE, OPEN_MODE FROM V$DATABASE;
-- 应返回:PRIMARY, READ WRITE-- 新备库(原主库)
SELECT PROCESS, STATUS FROM V$MANAGED_STANDBY;
-- 应有 MRP(Managed Recovery Process)或 RFS 进程

⚠️ 二、故障切换(Failover)——主库宕机

目标:强制将备库提升为主库(可能有数据丢失,不可逆

📌 前提条件

  • 主库已宕机或不可恢复
  • 备库已应用尽可能多的 Redo 日志

🔧 操作步骤

步骤 1:确保备库应用完所有可用日志
-- 停止 Redo 应用
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;-- 尝试应用剩余日志(如果有归档日志未应用)
RECOVER STANDBY DATABASE UNTIL CANCEL;
-- 输入 AUTO 或指定归档日志路径,直到提示“Media recovery complete”

如果使用 实时应用(Real-Time Apply),通常已应用到最新。


步骤 2:激活备库为主库
-- 方式 1(推荐,11g+):
ALTER DATABASE ACTIVATE PHYSICAL STANDBY DATABASE;-- 方式 2(旧版本):
-- ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
-- (但 Failover 通常用 ACTIVATE)-- 打开数据库
ALTER DATABASE OPEN;

ACTIVATE 会直接将备库转为主库,并生成新的 Redo 线程。


步骤 3:验证
SELECT DATABASE_ROLE, OPEN_MODE FROM V$DATABASE;
-- 应返回:PRIMARY, READ WRITE

注意:Failover 后,原主库无法直接作为备库加入,必须重建(使用 RMAN duplicate 或备份恢复)。


🔁 三、切换后处理(重要!)

  1. 更新应用连接字符串:指向新主库的 IP/服务名。
  2. 重建原主库为新备库(Switchover 可跳过,Failover 必须做):
    • 使用 RMAN DUPLICATE TARGET DATABASE FOR STANDBY
    • 或使用备份恢复 + 配置 Redo 传输
  3. 清理归档日志:新主库会产生新归档,确保磁盘空间充足。
  4. 更新备份策略:立即对新主库执行全量备份。

📌 关键视图查询(切换前检查)

检查项SQL 命令
数据库角色SELECT DATABASE_ROLE FROM V$DATABASE;
切换状态SELECT SWITCHOVER_STATUS FROM V$DATABASE;
日志应用延迟SELECT MAX(SEQUENCE#) FROM V$LOG_HISTORY;(主库)
SELECT MAX(SEQUENCE#) FROM V$ARCHIVED_LOG WHERE APPLIED='YES';(备库)
Redo 传输进程SELECT PROCESS, STATUS, CLIENT_PROCESS FROM V$MANAGED_STANDBY;

✅ 总结对比

操作类型主库状态数据丢失是否可逆命令
Switchover正常❌ 无✅ 是COMMIT TO SWITCHOVER TO ...
Failover故障⚠️ 可能有❌ 否ACTIVATE PHYSICAL STANDBY DATABASE

💡 最佳实践建议

  • 日常维护用 Switchover,避免数据丢失。
  • Failover 仅用于紧急情况,事后必须重建备库。
  • 切换前通知应用停服,避免连接混乱。
  • 使用脚本自动化切换流程,减少人为错误。
http://www.dtcms.com/a/607513.html

相关文章:

  • 网站icp备案证书莱州网络推广公司
  • AI评测趋势一站速览,司南Daily Benchmark专区上线!
  • go语言做的网站动漫设计专业怎么样
  • 优秀企业网站设计要点房子装修价格
  • 什么网站做的好看北京企业建站
  • 天通苑网站建设成都制作网站提供商
  • 学网站开发需要学那些电商网站可维护性
  • 一个空间可以做两个网站吗前端培训机构哪个最好
  • 7.1 Dify开发平台简介:面向零基础人员的Agent开发平台
  • 中国app排行榜优化大师官网下载安装
  • 网站不更新即商通网站建设推广
  • 如皋做网站wordpress注册会员无法收到邮件
  • c语言编译过程五步骤 | 深入解析编译流程的关键环节
  • 网站开发自学时间财务软件定制开发
  • 在线销售型网站做网站要备案
  • 百度网站地址提交网站建设服务 杭州
  • vue做网站首页wordpress 没有分类目录
  • 哪些网站用.ren域名京东商城网上购物京东超市
  • 市场洞察:从品类到买量,解析韩国手游市场出海新机遇
  • C++ 循环结构:控制程序重复执行的核心机制
  • Jetson ORIN NANO SUPER 装机流程
  • 重庆自助模板建站做自己的网站多少钱
  • 邹城做网站asp网站做视频
  • 青岛网站建设迅优企业信息管理系统查询
  • 做网站对程序员说那些需求自己做链接的网站
  • 上海网站制作工作室东莞外贸建站模板
  • Trae 一键换装 Dracula 主题 + 改注释颜色 + 去掉 console.log 多余分号
  • 工会网站建设策划书it服务商
  • 数据分析笔记04:抽样方法与抽样分布
  • 重庆知名网站电商网站建设外包