ITPub博客

首页 > 数据库 > Oracle > ORACLE19C DG SWITCHOVER和FAILOVER

ORACLE19C DG SWITCHOVER和FAILOVER

原创 Oracle 作者:wwjfeng 时间:2026-01-14 22:32:49 0 删除 编辑

一. DG SWITCHOVER 步骤

1.确认主备库同步情况

SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;
select thread#,sequence#,first_time,next_time,applied from v$archived_log where applied='NO';
SELECT UNIQUE THREAD#, MAX(SEQUENCE#) OVER(PARTITION BY THREAD#) LAST FROM V$ARCHIVED_LOG;


2.确认主库是否可以切换为备库

select NAME,OPEN_MODE,PROTECTION_MODE,DATABASE_ROLE,SWITCHOVER_STATUS from v$database;

SWITCHOVER_STATUS 为TO STANDBY 即表示可以切换


3.切换主库->备库

alter database commit to switchover to physical standby;


4.确认备库是否可以切换为主库

select NAME,OPEN_MODE,PROTECTION_MODE,DATABASE_ROLE,SWITCHOVER_STATUS from v$database;

SWITCHOVER_STATUS 为TO PRIMARY 即表示可以切换


5.切换备库->主库

alter database commit to switchover to primary;


6.启动主备库,在备库执行同步

alter database recover managed standby database using current logfile disconnect from session;


二. DG FAILOVER 步骤

1.检查数据同步状态

-- 1. 确认最后应用时间
SELECT TO_CHAR(MAX(NEXT_TIME), 'YYYY-MM-DD HH24:MI:SS') 
FROM V$ARCHIVED_LOG WHERE APPLIED='YES';
-- 2. 检查是否有未应用的归档
SELECT COUNT(*) FROM V$ARCHIVED_LOG WHERE APPLIED='NO' AND REGISTRAR='RFS';
-- 3. 验证保护模式
SELECT PROTECTION_MODE, PROTECTION_LEVEL FROM V$DATABASE;
-- 4. 记录当前SCN(用于后续可能的闪回)
SELECT CURRENT_SCN FROM V$DATABASE;
-- 5. 检查数据库一致性
ALTER DATABASE VERIFY DATABASE;


2.确认可能丢失数据时间

SELECT 
    CASE 
        WHEN MINUTES_BEHIND < 1 THEN '✅ 可以切换 - 数据丢失 < 1分钟'
        WHEN MINUTES_BEHIND < 5 THEN '⚠️  谨慎切换 - 数据丢失 1-5分钟'
        WHEN MINUTES_BEHIND < 30 THEN '⚠️⚠️ 需要审批 - 数据丢失 5-30分钟'
        ELSE '❌ 高风险 - 数据丢失 > 30分钟,建议先恢复主库'
    END AS DECISION_RECOMMENDATION,
    MINUTES_BEHIND,
    LAST_APPLIED_TIMEFROM (
    SELECT 
        ROUND(('主库宕机时间' - MAX(NEXT_TIME)) * 24 * 60, 2) AS MINUTES_BEHIND,
        TO_CHAR(MAX(NEXT_TIME), 'YYYY-MM-DD HH24:MI:SS') AS LAST_APPLIED_TIME    FROM V$ARCHIVED_LOG 
    WHERE APPLIED = 'YES');


3.评估后进行切换

-- 在目标备库执行ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
-- 执行故障切换ALTER DATABASE ACTIVATE PHYSICAL STANDBY DATABASE;


4.验证主库新状态

-- 检查数据库角色
SELECT DATABASE_ROLE, OPEN_MODE FROM V$DATABASE;
-- 打开数据库(如果未自动打开)
ALTER DATABASE OPEN;
-- 检查实例状态
SELECT INSTANCE_NAME, STATUS, DATABASE_STATUS FROM V$INSTANCE;


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/15412087/viewspace-3107961/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: CDB PDB 日常维护
请登录后发表评论 登录
全部评论

注册时间:2010-03-27

  • 博文量
    57
  • 访问量
    199171