自学内容网 自学内容网

Oracle 19c Data Guard 环境中的 GAP 处理方法

概述

前面文章中已经讲到使用常规办法修复GAP的方法,但在19c中有一种不用重建DG恢复数据的方法,简单点说就是就是通过网络增量恢复数据文件。这个新特性是在 12C 的基础上,将 RECOVER STANDBY DATABASE 命令与 FROM SERVICE 子句一起使用,以通过对主数据库进行的更改来刷新物理备用数据库。备库可以直接在开启状态进行恢复。这种方法适用于归档丢失产生GAP和其他一些问题。
具体操作流程如下:

示例命令

语法:

RECOVER STANDBY DATABASE FROM SERVICE primary_db;

  • RECOVER STANDBY DATABASE命令重新启动备用实例。
  • 从主数据库刷新控制文件,并自动重命名数据文件,临时文件和联机日志。
  • 它可以还原添加到主数据库中的新数据文件,并还原到当前时间的备用数据库。

步骤详解

一、模拟 GAP
  1. 取消备库的日志应用

    sqlplus> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
    or
    DGMGRL> edit database dbdg set state='APPLY-OFF';
    
  2. 关闭备库

    SQL> SHUTDOWN IMMEDIATE;
    
  3. 在主库添加新的数据文件

    SQL> ALTER TABLESPACE TBS ADD DATAFILE '/u01/app/oracle/oradata/ORCL/tbs02.dbf' SIZE 10M AUTOEXTEND OFF;
    
  4. 检查归档状态

    SQL> ARCHIVE LOG LIST;
    
  5. 切换日志文件

    SQL> ALTER SYSTEM SWITCH LOGFILE;
    
  6. 备份并移动归档日志(模拟丢失)

    $ mv 1_21_1119747570.arc 1_21_1119747570.arc.bak
    $ mv 1_22_1119747570.arc 1_22_1119747570.arc.bak
    $ mv 1_23_1119747570.arc 1_23_1119747570.arc.bak
    
  7. 启动备库

    SQL> STARTUP NOMOUNT;
    SQL> ALTER DATABASE MOUNT STANDBY DATABASE;
    SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
    SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
    SQL> ALTER DATABASE OPEN;
    SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
    
  8. 确认 GAP

    SQL> SELECT * FROM V$ARCHIVE_GAP;
    THREAD# LOW_SEQUENCE# HIGH_SEQUENCE# CON_ID
    ---------- ------------- -------------- ----------
              1            21             23          1
    
二、查看 GAP
  1. 查询当前 SCN

    SQL> SELECT CURRENT_SCN FROM V$DATABASE;
    CURRENT_SCN
    -----------
        3278784
    
  2. 查询最小 checkpoint change#

    SQL> SELECT MIN(CHECKPOINT_CHANGE#) FROM V$DATAFILE_HEADER;
    MIN(CHECKPOINT_CHANGE#)
    -----------------------
                    3278785
    
  3. 确认 GAP 期间是否新增数据文件

    SQL> COL NAME FOR A50
    SQL> SELECT FILE#, NAME FROM V$DATAFILE WHERE CREATION_CHANGE# > 3278785;
      FILE# NAME
    ---------- --------------------------------------------------
            9 /u01/app/oracle/oradata/ORCL/tbs02.dbf
    
三、GAP 处理
  1. 取消备库日志应用

    SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
    
  2. 恢复备库

    • 从主库恢复控制文件

      RMAN> RECOVER STANDBY DATABASE FROM SERVICE TNSPRI;
      
    • 内部执行命令(自动完成)

      • 恢复 Standby 控制文件:

        RESTORE STANDBY CONTROLFILE FROM SERVICE 'TNSPRI';
        ALTER DATABASE MOUNT STANDBY DATABASE;
        
      • 设置临时文件路径:

        SET NEWNAME FOR TEMPFILE 1 TO "/u01/app/oracle/oradata/ORCL_STBY/temp01.dbf";
        SET NEWNAME FOR TEMPFILE 2 TO "/u01/app/oracle/oradata/ORCL_STBY/pdbseed/temp012021.dbf";
        SWITCH TEMPFILE ALL;
        
      • 设置数据文件路径:

        SET NEWNAME FOR DATAFILE 9 TO "/u01/app/oracle/oradata/ORCL/tbs02.dbf";
        RESTORE FROM SERVICE 'TNSPRI' DATAFILE 9;
        CATALOG DATAFILECOPY "/u01/app/oracle/oradata/ORCL/tbs02.dbf";
        SWITCH DATAFILE ALL;
        
      • 执行增量恢复:

        RECOVER DATABASE FROM SERVICE 'TNSPRI';
        
  3. 修改 Standby Log 路径

    发现恢复过后,备库redo log路径已修改,standby log路径未修改,因此手动修改。

    • 查询备库的日志文件路径

      SQL> SELECT MEMBER FROM V$LOGFILE;
      
    • 关闭备库文件自动管理

      SQL> ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=MANUAL;
      
    • 清理 Standby Log

      SQL> ALTER DATABASE CLEAR LOGFILE GROUP 4;
      SQL> ALTER DATABASE CLEAR LOGFILE GROUP 5;
      SQL> ALTER DATABASE CLEAR LOGFILE GROUP 6;
      SQL> ALTER DATABASE CLEAR LOGFILE GROUP 7;
      
    • 修改 Standby Log 路径

      SQL> ALTER DATABASE RENAME FILE '/oradata/ORCL/standby_redo04.log' TO '/oradata/ORCL_STBY/standby_redo04.log';
      SQL> ALTER DATABASE RENAME FILE '/oradata/ORCL/standby_redo05.log' TO '/oradata/ORCL_STBY/standby_redo05.log';
      SQL> ALTER DATABASE RENAME FILE '/oradata/ORCL/standby_redo06.log' TO '/oradata/ORCL_STBY/standby_redo06.log';
      SQL> ALTER DATABASE RENAME FILE '/oradata/ORCL/standby_redo07.log' TO '/oradata/ORCL_STBY/standby_redo07.log';
      
    • 修改完后打开备库文件自动管理

      SQL> ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO;
      
  4. 启动备库

    SQL> STARTUP NOMOUNT;
    SQL> ALTER DATABASE MOUNT STANDBY DATABASE;
    SQL> ALTER DATABASE OPEN READ ONLY;
    SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
    
四、查看主备库状态
  1. 主库状态

    SQL> SET PAGES 100 LINES 180
    SQL> COL DB_UNIQUE_NAME FOR A10
    SQL> SELECT DBID, DB_UNIQUE_NAME, CURRENT_SCN, PROTECTION_MODE, DATABASE_ROLE, FORCE_LOGGING, OPEN_MODE, SWITCHOVER_STATUS FROM GV$DATABASE;
    
    -- 检查主备scn是否一致:
    sqlplus / as sysdba
    col HXFNM for a100
    set line222
    select HXFIL File_num,substr(HXFNM,1,40) HXFNM,fhscn from x$kcvfh;
    
  2. 备库状态

    SQL> SET PAGES 100 LINES 180
    SQL> COL DB_UNIQUE_NAME FOR A10
    SQL> SELECT DBID, DB_UNIQUE_NAME, CURRENT_SCN, PROTECTION_MODE, DATABASE_ROLE, FORCE_LOGGING, OPEN_MODE, SWITCHOVER_STATUS FROM GV$DATABASE;
    
    -- 检查主备scn是否一致:
    sqlplus / as sysdba
    col HXFNM for a100
    set line222
    select HXFIL File_num,substr(HXFNM,1,40) HXFNM,fhscn from x$kcvfh;
    

总结

通过上述步骤,19C的GAP也已修复,可以看到Oracle随着版本升级,越来越自动化的操作,利用 Oracle 19c 提供的新特性显著简化 Data Guard 环境中的 GAP 修复过程。这些新功能不仅减少了操作复杂度,还提高了效率和准确性。


原文地址:https://blog.csdn.net/u010674953/article/details/144242735

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!