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
-
取消备库的日志应用
sqlplus> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; or DGMGRL> edit database dbdg set state='APPLY-OFF';
-
关闭备库
SQL> SHUTDOWN IMMEDIATE;
-
在主库添加新的数据文件
SQL> ALTER TABLESPACE TBS ADD DATAFILE '/u01/app/oracle/oradata/ORCL/tbs02.dbf' SIZE 10M AUTOEXTEND OFF;
-
检查归档状态
SQL> ARCHIVE LOG LIST;
-
切换日志文件
SQL> ALTER SYSTEM SWITCH LOGFILE;
-
备份并移动归档日志(模拟丢失)
$ 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
-
启动备库
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;
-
确认 GAP
SQL> SELECT * FROM V$ARCHIVE_GAP; THREAD# LOW_SEQUENCE# HIGH_SEQUENCE# CON_ID ---------- ------------- -------------- ---------- 1 21 23 1
二、查看 GAP
-
查询当前 SCN
SQL> SELECT CURRENT_SCN FROM V$DATABASE; CURRENT_SCN ----------- 3278784
-
查询最小 checkpoint change#
SQL> SELECT MIN(CHECKPOINT_CHANGE#) FROM V$DATAFILE_HEADER; MIN(CHECKPOINT_CHANGE#) ----------------------- 3278785
-
确认 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 处理
-
取消备库日志应用
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
-
恢复备库
-
从主库恢复控制文件
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';
-
-
-
修改 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;
-
-
启动备库
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;
四、查看主备库状态
-
主库状态
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;
-
备库状态
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)!