Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【DB笔试面试761】在Oracle中,DG中GAP有几种解决方案?

【DB笔试面试761】在Oracle中,DG中GAP有几种解决方案?

作者头像
AiDBA宝典
发布于 2020-02-26 06:10:26
发布于 2020-02-26 06:10:26
1.3K00
代码可运行
举报
运行总次数:0
代码可运行

题目部分

在Oracle中,DG中GAP有几种解决方案?

答案部分

当主库的某些日志没有成功传送到备库,那么这时候就发生了归档裂缝(Archive Gap)。目前Oracle提供了两种日志GAP的检测和处理机制,分别是自动GAP处理(Automatic Gap Resolution)和FAL进程GAP处理(FAL Gap Resolution)。自动GAP处理即主库上的ARCn进程会每分钟检查备库上的日志GAP情况并做相应处理。FAL(Fetch Archive Log)是通过配置FAL_SERVER和FAL_CLIENT实现GAP检测的一种机制,它是备库主动发起的“取”日志的过程。备库就是FAL_CLIENT,它从FAL_SERVER中取这些GAP。Oracle会首先尝试使用FAL进程处理GAP,当发现FAL机制并没有配置生效的时候,进而尝试使用自动GAP处理。

FAL进程只在物理备库存在。FAL进程提供了一个CLIENT/SERVER的机制,用来解决检测在主库产生的连续的归档日志,而在备库接受的归档日志不连续的问题。该进程只有在需要的时候才会启动,而当工作完成后就关闭了,因此在正常情况下,该进程是无法看见的。

(一)物理DG手动解决GAP

在一些特殊情况下,如果GAP不能自动解决,那么就需要手工执行中断恢复。通过查询视图V$ARCHIVE_GAP可以确定断档的是哪些日志。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQL> SELECT * FROM V$ARCHIVE_GAP;
THREAD#    LOW_SEQUENCE#  HIGH_SEQUENCE#
----------- ------------- --------------
1                     10              12

可以看到,当前物理备库丢失日志文件从线程1的序号10到序号12。接下来确定归档日志文件的路径:(假设在主数据库上的本地归档目的地是LOG_ARCHIVE_DEST_1):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQL> SELECT NAME FROM V$ARCHIVED_LOG WHERE THREAD#=1 AND DEST_ID=1 AND SEQUENCE# BETWEEN 10 AND 12;
NAME
-----------------------------------------------------------------  
/arch/thread1_dest/arch_1_10.arc
/arch/thread1_dest/arch_1_11.arc
/arch/thread1_dest/arch_1_12.arc

接下来,复制这些日志文件到物理备库,然后在物理备库上使用“ALTER DATABASE REGISTER LOGFILE”语句来注册这些归档日志,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQL> ALTER DATABASE REGISTER LOGFILE  '/arch/thread1_dest/arch_1_10.arc';

也可以使用如下的SQL语句:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ALTER DATABASE REGISTER OR REPLACE  LOGFILE '/arch/thread1_dest/arch_1_10.arc';
ALTER DATABASE REGISTER OR REPLACE  PHYSICAL LOGFILE '/arch/thread1_dest/arch_1_11.arc';

在物理备库上注册这些日志文件之后,重新打开重做应用进程。如果断档的归档日志较多,那么可以使用如下的SQL语句来生成要执行的SQL语句(如下的SQL也适用于逻辑DG):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT 'ALTER DATABASE REGISTER OR REPLACE LOGICAL LOGFILE ''/arch/thread1_dest/arch_1_' || a ||'.arc'';' LOGICAL_DG,
        'ALTER DATABASE REGISTER OR REPLACE  LOGFILE ''/arch/thread1_dest/arch_1_' || a ||'.arc'';' PHYSICAL_DG
  FROM (SELECT LEVEL A FROM DUAL CONNECT BY LEVEL <= 12)
 WHERE A >= 10 ;

需要注意的是,视图V$ARCHIVE_GAP只返回当前妨碍重做应用继续的下一个中断。在解决中断并重启重做应用进程后,再次在物理备库上查询V$ARCHIVE_GAP视图来确定下一个中断序号,如果有的话,重复这个过程直到没有更多的中断。

(二)逻辑DG手动解决GAP

在逻辑备库上查询DBA_LOGSTDBY_LOG视图可以确定是否有归档中断。例如,下面的查询指出断档号为16至18:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SYS@orclasm > COLUMN FILE_NAME FORMAT a60
SYS@orclasm > SELECT THREAD#, SEQUENCE#, FILE_NAME
  2    FROM DBA_LOGSTDBY_LOG L
  3   WHERE NEXT_CHANGE# NOT IN (SELECT FIRST_CHANGE# FROM DBA_LOGSTDBY_LOG WHERE L.THREAD# = THREAD#)
  4   ORDER BY THREAD#, SEQUENCE#;
THREAD#    SEQUENCE# FILE_NAME  
--------- ---------- ---------------------------------------------  
1                 16 /arch/oracle/arch_1_16.arc
1                 18 /arch/oracle/arch_1_18.arc

接下来复制丢失的日志文件到逻辑备库,并在逻辑备库上使用“ALTER DATABASE REGISTER LOGICAL LOGFILE”来注册这些日志文件。例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQL> ALTER DATABASE REGISTER LOGICAL LOGFILE  '/arch/oracle/arch_1_16.arc';

在逻辑备库上注册这些日志文件之后,重启SQL应用。和物理DG一样,在逻辑备库上的DBA_LOGSTDBY_LOG视图只返回当前妨碍SQL应用继续的下一个中断。在解决指定的中断并重启SQL应用之后,再次在逻辑备库上查询DBA_LOGSTDBY_LOG视图,以确定下一个中断序号,如果有的话,重复这个过程直到没有更多的中断。

需要注意的是,如果需要的归档日志已经不在主库上了,但是有归档日志的RMAN备份,那么可以通过RMAN恢复把缺少的归档日志进行还原,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SET ARCHIVELOG DESTINATION TO '/arch';
RESTORE ARCHIVELOG  FROM LOGSEQ 7;

如果断档的归档日志已经丢失,且RMAN又没有备份,那么在Oracle 10g之前没有办法修复了,只能重建DG,但是从Oracle 10g开始可以采用主库基于SCN的增量备份来恢复DG,详见【3.2.12.8 主库丢失归档,物理DG如何恢复?】。

本文选自《Oracle程序员面试笔试宝典》,作者:小麦苗

---------------优质麦课------------

详细内容可以添加麦老师微信或QQ私聊。

About Me:小麦苗

● 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用

● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/

● 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

● 版权所有,欢迎分享本文,转载请保留出处

● QQ:646634621 QQ群:618766405

● 提供OCP、OCM和高可用部分最实用的技能培训

● 题目解答若有不当之处,还望各位朋友批评指正,共同进步

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DB宝 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【云原生进阶之数据库技术】第二章-Oracle-使用-3.3.2-Oracle Data Guard原理
DG 的工作原理是通过网络将主数据库的重做数据传输到备用数据库,然后在备用数据库上应用这些重做数据,以确保数据的一致性。
江中散人_Jun
2024/05/29
5410
【云原生进阶之数据库技术】第二章-Oracle-使用-3.3.2-Oracle Data Guard原理
【DB笔试面试763】在Oracle中,物理DG维护中常用到的SQL语句有哪些?
DISCONNECT FROM SESSION子句并非必需,该子句的作用是指定启动完应用后自动退出到命令操作符前。如果不指定该子句的话,那么当前SESSION就会一直停留处理Redo应用,如果想做其它操作,那么就只能新建一个连接。
AiDBA宝典
2020/02/27
8910
【DG】物理DG中主库的LNSn、NSS、NSA进程的比较
同事说dg不能同步,让我帮忙看看,我用自己写的2个视图查看了下,首先发现主库没有常见的LNSn进程,下意识的认为主库这个进程没有启动,需要切换日志唤醒LNSn进程,事实上也这样做了,(alter system set log_archive_dest_state_2='defer'; alter system switch logfile; alter system set log_archive_dest_state_2='enable'; alter system switch logfile;),切换后发现日志可以正常传输了,但是主库还是看不到LNSn这个进程,于是找找资料,深入的研究了一下这个问题。
AiDBA宝典
2023/04/27
1.7K0
【DG】物理DG中主库的LNSn、NSS、NSA进程的比较
Oracle DG环境中的gap处理办法总结
当主库的某些日志没有成功传送到备库,那么这时候就发生了归档裂缝(Archive Gap)。目前Oracle提供了两种日志GAP的检测和处理机制,分别是自动GAP处理(Automatic Gap Resolution)和FAL进程GAP处理(FAL Gap Resolution)。自动GAP处理即主库上的ARCn进程会每分钟检查备库上的日志GAP情况并做相应处理。FAL(Fetch Archive Log)是通过配置FAL_SERVER和FAL_CLIENT实现GAP检测的一种机制,它是备库主动发起的“取”日志的过程。备库就是FAL_CLIENT,它从FAL_SERVER中取这些GAP。Oracle会首先尝试使用FAL进程处理GAP,当发现FAL机制并没有配置生效的时候,进而尝试使用自动GAP处理。FAL进程只在物理备库存在。FAL进程提供了一个CLIENT/SERVER的机制,用来解决检测在主库产生的连续的归档日志,而在备库接受的归档日志不连续的问题。该进程只有在需要的时候才会启动,而当工作完成后就关闭了,因此在正常情况下,该进程是无法看见的。
AiDBA宝典
2023/04/27
2.3K0
Oracle DG环境中的gap处理办法总结
【DG】DataGuard架构和部分概念整理
本篇梳理DG的架构和一些概念知识,重新梳理的目的是加强理解,也方便复习,基于11gR2版本写的,不包含12c新特性。如果能帮助到新接触DG的朋友,那就再好不过。
甚至熊熊
2021/04/22
2.5K0
【DG】DataGuard架构和部分概念整理
OracleDG 环境主备业务数据不同步备库报ORA-600错误的处理过程
这是一个单实例数据库,oracle11.2.0.4 ,跑在Wondows上,当时主库压力太大,用户有容灾和读写分离的需求,这样在主库跑了一段时间后搭建了一个备库,这个备库一直跑到很好,最多主库由于存储压力,删除过几个归档日志,这个删除也是确认了备库应用之后操作的,对主备都已经没有影响。所以,当这家南方公司的负责人(我就称为王工)找到我时,我还是觉得意外。
用户6543014
2020/08/11
1.3K0
【DB笔试面试764】在Oracle中,逻辑DG维护中常用到的SQL语句有哪些?
如何知道是否开启了实时应用呢?可以查询V$LOGSTDBY_STATE视图或查询是否有lsp进程。
AiDBA宝典
2020/05/07
6940
oracle11g dataguard安装实施
Oracle DataGuard 实施 1.环境准备 1.1 修改主备机hosts文件 vi /etc/hosts 128.160.11.84    wang 128.160.11.218  dg2 1.2 修改(添加)主备机listener.ora和tnsnames.ora文件 vi $ORACLE_HOME/network/admin/listener.ora SID_LIST_LISTENER =         (SID_LIST =           (SID_DESC =                 (SID_NAME = softdb)                 (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1/)           )         ) LISTENER =   (DESCRIPTION_LIST =     (DESCRIPTION =       (ADDRESS = (PROTOCOL = TCP)(HOST = wang)(PORT = 1521))       (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))     )   ) ADR_BASE_LISTENER = /u01/app/oracle vi $ORACLE_HOME/network/admin/tnsnames.ora SOFTPRI =   (DESCRIPTION =     (ADDRESS = (PROTOCOL = TCP)(HOST = wang)(PORT = 1521))     (CONNECT_DATA =       (SERVER = DEDICATED)       (SERVICE_NAME = softdb)     )   ) SOFTSTD =   (DESCRIPTION =     (ADDRESS = (PROTOCOL = TCP)(HOST = dg2)(PORT = 1521))     (CONNECT_DATA =       (SERVER = DEDICATED)       (SERVICE_NAME = softdb)     )   ) 1.3 确定主备机parameter/control/data/log/archivelog file 的路径 audit_file_dest='/u01/app/oracle/admin/softdb/adump' 1.4 设置主库强制写日志 SQL> select force_logging from v$database; FOR --- NO SQL> alter database force logging; Database altered. SQL> select force_logging from v$database; FOR --- YES 1.5 设置主库归档模式 SQL> archive log list; SQL> shutdown immediate; SQL> startup mount; SQL> alter database archivelog; SQL> alter database open; SQL> archive log list; Database log mode              Archive Mode Automatic archival             Enabled Archive destination            /u01/app/oracle/product/11.2.0/db_1//dbs/arch Oldest online log sequence     175 Next log sequence to archive   177 Current log sequence           177 2. 产生用于建立Standby库的全备份集及控制文件 2.1 创建并修改主库参数文件pfile SQL> shutdown immediate; SQL> create pfile from spfile; 修改initsoftdb.ora vi $ORACLE_HOME/db
吹水老王
2022/05/17
7760
【DB笔试面试755】在Oracle的DG中,RFS、LNSn、MRP、LSP进程的作用分别是什么?
RFS(Remote File Server)进程主要用来接受从主库传送过来的日志信息。对于物理备库而言,RFS进程可以直接将日志写进Standby Redo logs,也可以直接将日志信息写到归档日志中。一般可以在主备库的告警日志中看到如下的信息:
AiDBA宝典
2020/02/24
1.5K0
【DB笔试面试755】在Oracle的DG中,RFS、LNSn、MRP、LSP进程的作用分别是什么?
实战篇:Oracle DataGuard 出现 GAP 修复完整步骤
DG GAP 顾名思义就是:DG不同步,当备库不能接受到一个或多个主库的归档日志文件时候,就发生了 GAP。
Lucifer三思而后行
2022/01/08
4.1K0
实战篇:Oracle DataGuard 出现 GAP 修复完整步骤
【DB笔试面试759】在Oracle中,如果主库丢失归档文件,那么物理DG如何恢复?
面试DBA岗位,面试官对于DG环境常常会问到,若是主库丢失了归档文件,而这些归档文件还未来得及传递到备库,则物理备库是否只能通过重建的方式来恢复呢?这道面试题是作者亲身经历,当时以为只能重建备库,但最后经过查找文档找到了解决办法,可以通过对主库进行基于SCN的增量备份来恢复物理DG。
AiDBA宝典
2020/02/25
9210
实战经验:Oracle DG 的归档缺失修复
首先通过备库sql查出相应的 node[thread#] 和归档位置 name:
数据和云
2021/05/31
1.7K0
Data Guard备库未应用日志的问题一则
查看当前归档日志路径,空间的使用率已经到了100%,于是在rman中,删除30天之前的归档日志文件,
bisal
2021/11/12
7390
Data Guard备库未应用日志的问题一则
交流群讨论精选1
U1:如果您用的是 enterprise db (postgresql 商业版),他们是有自动化移植 工具的。如果是普通的 postgresql,就得看看有没有开源的工具了,若没有,恐怕要自己写程序导入了。
SQLplusDB
2022/08/19
1.2K0
交流群讨论精选1
【DB笔试面试750】在Oracle中,请简单描述DG的架构。
主库(Primary Database)在运行过程中,会源源不断地产生Redo日志,这些日志需要发送到备库(Standy Database)端。这个发送动作可以由主库的LGWR或者ARCn进程完成,不同的归档目的地可以使用不同的方法,但是对于一个目的地,只能选用一种方法。选择不同的进程在数据保护能力和系统可用性方面有很大区别。如果使用LGWR进程来传递日志,但是由于某些原因,LGWR进程变得无法归档到目的地了,那么重做传输将会使用ARCn进程来完成归档操作。
AiDBA宝典
2020/02/24
8420
DG gap sequence修复一例
环境:Oracle 11.2.0.4 DG 故障现象: 客户在备库告警日志中发现GAP sequence提示信息:
Alfred Zhao
2019/05/24
1.3K0
模拟生产搭建Standby RAC实验环境(11.2.0.4 DG)
目前,我有一套正常运行的Oracle 11.2.0.4 RAC实验环境。这是一套VirtualBox的虚拟化环境,整套环境均放在我的台式机服务器的D盘(SSD固态盘)。也就是说,这套RAC环境的系统磁盘和共享磁盘均在本地D盘。
Alfred Zhao
2019/05/24
9020
【DB笔试面试753】在Oracle中,将一个物理DG转换为逻辑DG有哪些步骤呢?
对于将物理备库切换到逻辑备库,需要在主库构建LogMiner字典及启用补充日志,因此应先停用备库的MRP进程,避免产生额外的Redo Apply。如果正在使用Broker管理现有的物理备库,应先在Broker中禁用目标数据库。
AiDBA宝典
2020/02/24
9060
【DG】DataGuard动态性能视图及日志传输/应用服务说明
之前已经整理出: 1.【DG】DataGuard搭建-11gR2单主单备 2.【DG】DataGuard架构和部分概念整理 下面继续整理DataGuard相关动态性能视图,用于查看物理DG状态,以及日志传输/应用服务简单说明,要结合架构和概念篇看
甚至熊熊
2021/04/22
2.3K0
【DG】DataGuard动态性能视图及日志传输/应用服务说明
ADG单实例搭建系列之 (DBCA)
参考官方文档12c:Using DBCA to Create a Data Guard Standby 12C
Lucifer三思而后行
2021/08/17
1.7K0
ADG单实例搭建系列之 (DBCA)
推荐阅读
相关推荐
【云原生进阶之数据库技术】第二章-Oracle-使用-3.3.2-Oracle Data Guard原理
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验