首页 > 数据库 >Oracle DataGuard 监控日志同步是否正常

Oracle DataGuard 监控日志同步是否正常

时间:2023-06-29 09:11:18浏览次数:51  
标签:log database standby WHERE DataGuard Oracle 日志 redo SELECT

1. 查看备库(或者主库)的状态

SET feed off
SET lines 300
SET pages 999
COLUMN database_name      heading "Database|Name"     FORMAT  a12
COLUMN database_role      heading "Database|Role"     FORMAT  a30
COLUMN protection_mode    heading "Protection|Mode"   FORMAT  a30
COLUMN force_logging      heading "Force|Logging"     FORMAT  a7
COLUMN open_mode          heading "Open|Mode"         FORMAT  a30
COLUMN switchover_status  heading "Switchover|Status" FORMAT  a30
SELECT name              AS database_name,
       protection_mode,
       database_role,
       force_logging,
       open_mode,
       switchover_status
  FROM v$database;
主库

 备库

2. 查询主库日志传输序列号、备库日志应用序列号

SELECT AL.THRD "Thread",
       ALMAX   "Last Seq Received",
       LHMAX   "Last Seq Applied"
  FROM (SELECT THREAD# THRD, MAX(SEQUENCE#) ALMAX
          FROM V$ARCHIVED_LOG
         WHERE RESETLOGS_CHANGE# =
               (SELECT RESETLOGS_CHANGE# FROM V$DATABASE)
         GROUP BY THREAD#) AL,
       (SELECT THREAD# THRD, MAX(SEQUENCE#) LHMAX
          FROM V$LOG_HISTORY
         WHERE RESETLOGS_CHANGE# =
               (SELECT RESETLOGS_CHANGE# FROM V$DATABASE)
         GROUP BY THREAD#) LH
 WHERE AL.THRD = LH.THRD;

如果相等则表示主、备库数据一致。反之则主、备库数据不一致。

3. 检查备库是否有MRP0进程以及进程的活动状态

SELECT process,client_process,sequence#,status
  FROM v$managed_standby;

 

特别说明:
RFS(remote file server):运行在备库上的进程,用于在备库上进行主库的日志恢复。默认,这个进程用于接收从主库传送过来的归档日志。
MRP:当物理备库启用了实时应用的时候,会创建这个进程,用于日志的实时应用。

1)启用MRP 进程,后台恢复进程应用standby redo logfile进行恢复:

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

2)取消MRP进程应用:

SQL> alter database recover managed standby database cancel;

2023-06-28T10:36:12.689885+08:00
rfs (PID:9819): Selected LNO:11 for T-1.S-4133 dbid 1317592302 branch 1127486062
2023-06-28T10:36:12.728694+08:00
ARC3 (PID:95779): Archived Log entry 3792 added for T-1.S-4132 ID 0x4e89a7ee LAD:1
2023-06-28T10:36:13.574837+08:00
PR00 (PID:9409): Media Recovery Waiting for T-1.S-4133 (in transit)
2023-06-28T10:36:13.575086+08:00
Recovery of Online Redo Log: Thread 1 Group 11 Seq 4133 Reading mem 0
Mem# 0: /u01/oradata/JXSX/sty_group_11.log
2023-06-28T10:38:43.854208+08:00
rfs (PID:9819): Selected LNO:12 for T-1.S-4134 dbid 1317592302 branch 1127486062
2023-06-28T10:38:43.891137+08:00
ARC1 (PID:95775): Archived Log entry 3793 added for T-1.S-4133 ID 0x4e89a7ee LAD:1
2023-06-28T10:38:44.424833+08:00
PR00 (PID:9409): Media Recovery Waiting for T-1.S-4134 (in transit)
2023-06-28T10:38:44.425082+08:00
Recovery of Online Redo Log: Thread 1 Group 12 Seq 4134 Reading mem 0
Mem# 0: /u01/oradata/JXSX/sty_group_12.log
2023-06-28T10:41:41.926258+08:00

  • CLIENT_PROCESS 对应 Primary 数据库中的进程如 ARCH\LGWR等
  • SEQUENCE#:归档序号
  • STATUS 当前进程状态:
进程状态名称进程状态描述
CONNECTED 已连接至 PRIMARY 数据库
ALLOCATED 正在准备连接PRIMARY数据库
ATTACHED 正在连接PRIMARY数据库
IDLE 空闲中
RECEIVING 正在接收归档文件
OPENNING 正在处理归档文件
CLOSING 归档文件已处理完,收尾中
WRITING 正在向归档文件中写入redo数据
WAIT_FOR_LOG 正在等待新的REDO数据
WAIT_FOR_GAP 归档发生中断,正在等待新的REDO 数据
APPLYING_LOG 正在应用REDO数据

4. 检查备库日志应用的情况

SELECT registrar,
       creator,
       thread#,
       applied,
       sequence#,
       first_change#,
       next_change#,
       completion_timE
  FROM v$archived_log
 WHERE completion_time > TRUNC(SYSDATE);
日志应用的日期范围自己手动调整.

5. 检查real-time apply 应用日志的进度

SET feed off
SET lines 300
SET pages 999
SELECT to_char(sysdate, 'yyyymmdd hh24:mi:ss') ctime,
       name,
       value,
       datum_time
  FROM v$dataguard_stats
 WHERE NAME LIKE '%lag';

其中如果apply lag对应的value大于0,那么就需要注意检查是否同步正常。如果相差时间非常多,value值等于几分钟,甚至达到1个小时,那可能实时同步有问题,需要检查 alert log 文件,其中会提示是否启动了real time apply。

如果已经启动了real time apply,apply lag 还是常常大于0,那么可能是DG上standby redo log 的问题,如果standby redo log增加不正确,那么可以在alert log中找到类似如下的语句:

RFS[1]: No Standby redo logfiles created for thread 1

那么可能是standby redo log没有在DG上创建,也有可能创建了,但是thread错误导致。 可以通过查看

set lines 200 pages 9999 LONG 5000
col member for a80
SELECT a.thread#,a.group#,b.member,b.type,a.bytes/1024/1024 MB, a.sequence#, a.status
  FROM v$log a,v$logfile b
 WHERE a.group# = b.group#
 UNION ALL
SELECT a.thread#,a.group#,b.member,b.type,a.bytes/1024/1024 MB, a.sequence#, a.status
  FROM v$standby_log a,v$logfile b
 WHERE a.group# = b.group#;

如果创建了standby redo log , 那么在应用redo时,一定有至少1个standby redo log的状态是 ACTIVE 的,其他大多数是 unassigned . 如果都是 UNASSIGNED ,那么就是standby redo log的问题。

6. 检查是否有GAP

select * from v$archive_gap

 在解决标识的间隙(GAP)并启动redo apply之后,再次查询物理备用数据库上的 V$ARCHIVE_gap 视图,以确定下一个间隙序列(如果有)。重复此过程,直到没有更多间隙。

WITH prod AS
 (SELECT dest_id, MAX(sequence#) AS seq
    FROM v_$archived_log
   WHERE resetlogs_time = (SELECT resetlogs_time FROM v_$database)
 GROUP BY dest_id),
stby AS
 (SELECT MAX(sequence#) AS seq, dest_id dest_id
    FROM v_$archived_log
   WHERE first_change# > (SELECT resetlogs_change# FROM v_$database)
     AND applied = 'YES'
     AND dest_id IN (1, 2)
   GROUP BY dest_id)
SELECT prod.seq - stby.seq, stby.dest_id
  FROM prod, stby
 WHERE prod.dest_id = stby.dest_id;

 

 

标签:log,database,standby,WHERE,DataGuard,Oracle,日志,redo,SELECT
From: https://www.cnblogs.com/sonnyBag/p/17513119.html

相关文章

  • Linux - Docker日志文件清理
    1.容器日志文件默认存放路径:/var/lib/docker,docker日志文件后缀是containerID+"-json.log",     查看各个日志文件大小:   1) ls-lh$(find/var/lib/docker/containers/-name*-json.log)       查询结果sample:  -rw-r-----1rootroot2......
  • Oracle数据库用户密码过期的解决方法
    问题现象:今天在更改数据库数据的时候,程序报错了,如下:ORA-28001:thepasswordhasexpired问题分析:很显然,报错原因就是:密码已过期!所以现在需要做的事情只有两件:1.修改密码的过期时间2.修改/重置密码这里分析一下为什么要这样做:1.修改密码的过期时间:这是因为OracleDatab......
  • 如何配置mysql主从复制中的二进制日志传输?
    要配置MySQL主从复制中的二进制日志传输,需要进行以下步骤:确保主服务器的二进制日志功能已启用:在主服务器的配置文件(通常是my.cnf或my.ini)中,找到并确认以下配置项已启用:log_bin=ONbinlog_format=ROWlog_bin表示启用二进制日志功能,binlog_format设置......
  • Win10下,配置Mysql开启请求日志
    当我们在调试程序时,需要知道最终发给Mysql的是啥语句,这时候就要看Mysql收到的请求了。Mysql有四种日志:ErrorLog(错误日志),记录MySQL运行过程ERROR,WARNING,NOTE等信息,系统出错或者某条记录出问题可以查看ERROR日志。GeneralQueryLog(日常运行日志),记录MySQL运行中的每条请......
  • pmm1安装部署oracledb_exporter
    ########################被监控的oracle服务器上安装##################1.下载下载地址https://github.com/iamseth/oracledb_exporter#installationoracledb_exporter.tar.gz二进制文件包该文件里只有一个可执行文件oracledb_exporter-0.5.0.tar.gz源码包,我们需要解压该包......
  • 【Oracle】使用PL/SQL快速查询出1-9数字
    【Oracle】使用PL/SQL快速查询出1-9数字简单来说,直接RecursiveWITHClauses在Oracle里面就直接使用WITHresult(参数)即可WITHresult(num)AS(SELECT1ASnumfromdualUNIONALLSELECTnum+1ASnumFROMresultWHEREnum<9)SELECTnumFROMresult......
  • C# ListBox 打印日志
    LvLogHelper.GetInstance(this.lbLog).PrintLog("初始化程序完成");LvLogHelper.GetInstance().PrintLog("请连接综测仪表");LvLogHelper.GetInstance().PrintLog("请加载测试用例");usingSystem;usingSystem.IO;usingSystem.Runtim......
  • ① Oracle数据库有多个实例,并且不知道sys密码情况下如何更新密码
    ①Oracle数据库有多个实例,并且不知道sys密码情况下如何更新密码sqlplus/@orclassysdba--@orcl是实例名②修改sys密码alterusersysidentifiedby123456;......
  • 数据库Oracle12C忘记密码
    解决方案:1.使用sysdba账号登陆之后可以修改其他账号密码按下WIN+R输入cmd按下回车,运行cmd按如下输入命令sqlplus/assysdba 2.解除锁定账号alteruser用户名accountunlock;---------解除锁定(必须带“;”号)以system用户名为例,即命令为alterusersystemaccountunl......
  • Oracle 11.2.0.3 ORA-12012ORA-29280 ORA-06512
    Oracle11.2.0.3ORA-12012ORA-29280ORA-06512问题现象:dbalert日志中出现如下告警信息:Errorsinfile/app/oracle/diag/rdbms/cctv/CCTV2/trace/CCTV2_j000_1370.trc:ORA-12012:erroronautoexecuteofjob"ORACLE_OCM"."MGMT_CONFIG_JOB_2_2"ORA......