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

Oracle ADG 配置闪回导致报表查询延时!

前言

今天应用反馈有一套报表库查询有延时,几十分钟没有同步数据了,但是我检查 DG 同步状态之后发现一切正常,手动触发切换日志可以正常同步数据,但是无法实时查询主库的在线重做日志。

不是 DG 配置问题,不是 standby logfile 问题,不是网络问题,能是什么问题呢?

本文记录一下完整的分析过程以及解决方案。

检查 DG 状态

首先,先检查 DG 同步状态是否正常:

set linesize 2222 heading on wrap on
column dest_name format a20
column status format a8
column database_mode format a15
column recovery_mode format a35
column protection_mode format a25
column destination format a15
column archived_seq# format 999999999
column applied_seq# format 999999999
column error format a10
column srl format a5
column db_unique_name format a15
column gap_status format a10SELECT inst_id, dest_name, status, database_mode, protection_mode,recovery_mode, gap_status, archived_seq#, applied_seq#, srl,db_unique_name, destination, error
FROM gv$archive_dest_status
WHERE status <> 'INACTIVE'
AND type = 'PHYSICAL';INST_ID DEST_NAME            STATUS   DATABASE_MODE   PROTECTION_MODE           RECOVERY_MODE                       GAP_STATUS ARCHIVED_SEQ# APPLIED_SEQ# SRL   DB_UNIQUE_NAME  DESTINATION     ERROR
---------- -------------------- -------- --------------- ------------------------- ----------------------------------- ---------- ------------- ------------ ----- --------------- --------------- ----------2 LOG_ARCHIVE_DEST_2   VALID    OPEN_READ-ONLY  MAXIMUM PERFORMANCE       MANAGED REAL TIME APPLY             NO GAP            123726       123725 YES   orcldg          orcldg1 LOG_ARCHIVE_DEST_2   VALID    OPEN_READ-ONLY  MAXIMUM PERFORMANCE       MANAGED REAL TIME APPLY             NO GAP            123726       123725 YES   orcldg          orcldg

检查备库同步进程:

set line2222 pages1000
select inst_id,pid,process,thread#,sequence#,status,delay_mins from gv$managed_standby;INST_ID        PID PROCESS      THREAD#  SEQUENCE# STATUS       DELAY_MINS
---------- ---------- --------- ---------- ---------- ------------ ----------1      10386 RFS                0          0 IDLE                  01       3728 ARCH               2     123538 CLOSING               01       3730 ARCH               0          0 CONNECTED             01       3732 ARCH               2     123543 CLOSING               01       3921 ARCH               2     123537 CLOSING               01       4613 RFS                0          0 IDLE                  01       4195 RFS                0          0 IDLE                  01       4286 RFS                0          0 IDLE                  01      10384 RFS                1     123728 IDLE                  01      10381 RFS                2     123544 IDLE                  01      10388 RFS                0          0 IDLE                  01       4647 RFS                0          0 IDLE                  01       5573 MRP0               1     123728 APPLYING_LOG          0

检查 DG 配置:

-- 主库
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_1                   string      LOCATION=+ARCH VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=ORCL
log_archive_dest_2                   string      service=orcldg LGWR ASYNC valid_for=(online_logfiles,primary_role) db_unique_name=orcldg
-- 备库
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_1                   string
log_archive_dest_2                   string      service=orcl LGWR ASYNC valid_for=(online_logfiles,primary_role) db_unique_name=orcl

检查 standby logfile 状态:

   THREAD#     GROUP# MEMBER                                                                                               STATUS     ARC T2.BYTES/1024/1024
---------- ---------- ---------------------------------------------------------------------------------------------------- ---------- --- ------------------1          5 /u01/app/oracle/oradata/redostd05.log                                                                UNASSIGNED NO                 2001          6 /u01/app/oracle/oradata/redostd06.log                                                                UNASSIGNED NO                 2001          9 /u01/app/oracle/oradata/redostd09.log                                                                UNASSIGNED NO                 2002          7 /u01/app/oracle/oradata/redostd07.log                                                                UNASSIGNED NO                 2002          8 /u01/app/oracle/oradata/redostd08.log                                                                UNASSIGNED NO                 2002         10 /u01/app/oracle/oradata/redostd10.log                                                                UNASSIGNED NO                 200

通过以上查询可以发现,DG 配置以及同步都是正常的,应该不会出现无法实时查询的问题,那为什么会延时呢?

尝试在主库手动触发日志切换:

-- 主库执行
SQL> alter system archive log current;

发现数据可以正常同步过来,那就是说同步是没问题的。

检查 alert 日志

查看数据库 alert 日志看看是不是有报错:

## 在主库发现有报错
LNS: Attempting destination LOG_ARCHIVE_DEST_2 network reconnect (270)
LNS: Destination LOG_ARCHIVE_DEST_2 network reconnect abandoned
Error 270 for archive log file 2 to 'orcldg'
ORA-00270: error creating archive log 

oerr 看一下报错的意思:

[oracle@orcl:/home/oracle]$ oerr ora 270
00270, 00000, "error creating archive log %s"
// *Cause:  An error was encountered when either creating or opening
//          the destination file for archiving.
// *Action: Check that the archive destination is valid and that there
//          is sufficient space on the destination device.

难道是 DG 的磁盘空间满了?

[oracle@orcldg:/]$ df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_jxsemesdg01-lv_root3.1T  2.6T  334G  89% /
tmpfs                  63G   72K   63G   1% /dev/shm
/dev/sda1             477M   79M  373M  18% /boot

磁盘空间还没满,那为什么无法创建归档?检查一下归档目录位置:

SQL> archive log list
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     123726
Next log sequence to archive   0
Current log sequence           123727

没有设置归档目录,默认存放到闪回目录下,检查一下闪回配置:

SQL> show parameter db_recoverNAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest                string      /u01/app/oracle/fast_recovery_area
db_recovery_file_dest_size           big integer 100G

好的,破案了,闪回配置的空间上限设置了 100G,然后归档也是存放在闪回目录,当闪回目录达到上限之后,归档自然就无法写入了。

解决方案

解决方法也很简单,就是把归档日志从闪回目录独立出去:

[oracle@orcldg:/u01/app/oracle]$ mkdir archivelog
[oracle@orcldg:/u01/app/oracle]$ cd archivelog/
[oracle@orcldg:/u01/app/oracle/archivelog]$ pwd
/u01/app/oracle/archivelog

备库设置归档目录:

SQL> alter system set log_archive_dest_1='LOCATION=/u01/app/oracle/archivelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcldg';System altered.SQL> archive log list
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /u01/app/oracle/archivelog
Oldest online log sequence     123726
Next log sequence to archive   0
Current log sequence           123727

主库重新激活同步:

SQL> alter system set log_archive_dest_state_2=defer;System altered.SQL> alter system set log_archive_dest_state_2=enable;System altered.

再从检查备库 standby logfile 状态:

SQL> select t2.thread#,t1.group#,t1.member,t2.STATUS,t2.ARCHIVED,t2.bytes/1024/1024 from v$logfile t1,v$standby_log t2 where t1.group#=t2.group# order by 1,2;THREAD#     GROUP# MEMBER                                                                                               STATUS     ARC T2.BYTES/1024/1024
---------- ---------- ---------------------------------------------------------------------------------------------------- ---------- --- ------------------1          5 /u01/app/oracle/oradata/redostd05.log                                                                UNASSIGNED NO                 2001          6 /u01/app/oracle/oradata/redostd06.log                                                                UNASSIGNED NO                 2001          9 /u01/app/oracle/oradata/redostd09.log                                                                UNASSIGNED NO                 2002          7 /u01/app/oracle/oradata/redostd07.log                                                                ACTIVE     YES                2002          8 /u01/app/oracle/oradata/redostd08.log                                                                UNASSIGNED NO                 2002         10 /u01/app/oracle/oradata/redostd10.log                                                                UNASSIGNED NO                 200

ADG 恢复实时查询,问题解决。

写在最后

一句话总结:闪回恢复区与归档日志共享空间时,必须做好空间规划和监控,否则会导致 DG 实时应用中断而难以察觉。生产环境建议将归档独立部署,避免空间竞争。

http://www.dtcms.com/a/602333.html

相关文章:

  • 网站建设 好的公司吴江建设工程招标中心网站
  • 2025年安徽省科技创新战略与软科学研究专项重大项目申报条件要求流程
  • asp网站建设流程旅店网站建设规划书
  • uniapp 鸿蒙元服务 真机调试流程指南
  • 网站建设内存seo诊断工具网站
  • NeurIPS 2025 中科大等提出PIR:实例感知后处理修正框架,显著提升时序预测可靠性!
  • HaluMem:揭示当前AI记忆系统的系统性缺陷,系统失效率超50%
  • 异世界冒险:网络迷宫与生成树封印术
  • 怎样在网上做网站教程网站建设
  • JAVA后端面试笔记(三)
  • 【剑斩OFFER】算法的暴力美学——寻找峰值
  • 【DeepSeek实战】高质量提示词的六种类型
  • 从零开始学习PX4源码30(定高(ALTITUDE)模式)
  • 中国建设银行对公网站中国500强企业排名
  • 做网站的为什么不给域名和密码个人网页制作与网站建设
  • GIT基础使用教程
  • 想建设个人网站去那里建设宁德做网站的公司
  • wordpress网站seo专业展馆展厅设计
  • LangGraph智能知识库系统架构设计方案 - 多agent架构
  • 在线C语言编译 | 提供便捷高效的在线编程环境
  • 二级网站建设费用网站有备案号吗
  • 搭建Golang gRPC环境:protoc、protoc-gen-go 和 protoc-gen-go-grpc 工具安装教程
  • flutter项目老是卡在Running Gradle task ‘assembleRelease‘......
  • 东莞清溪镇做网站公司对网站有效的优化软件
  • Python的asyncio核心组件
  • 建立网站要多少钱销售平台有哪些
  • 诸暨公司做网站免费项目进度管理软件
  • leetcode:逆波兰表达式求值
  • sql中left join和inner join的区别
  • 最小栈--leetcode