案例一则,谁在这么频繁调用LOGMINER程序?

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)
公众号:老苏畅谈运维
欢迎关注本人公众号,更多精彩与您分享。

案例背景

客户的一套oracle 11.2.0.4的数据库,根据他们的描述,说是自安装以来,alert一直有报错,但不影响使用,让帮忙分析一下什么原因。

分析问题

远程上去看了一下相关数据库的alert,其实也不算是什么报错,是LOGMINER的相关记录信息,记录的信息如下:

LOGMINER: summary for session# = 2147483905
LOGMINER: StartScn: 3936937 (0x0000.003c12a9)
LOGMINER: EndScn: 0 (0x0000.00000000)
LOGMINER: HighConsumedScn: 0
LOGMINER: session_flag: 0x0
LOGMINER: Read buffers: 8
LOGMINER: Memory LWM: limit 10M, LWM 8M, 80%
LOGMINER: Memory Release Limit: 0M
....................................
LOGMINER: summary for session# = 2147484417
LOGMINER: StartScn: 3936937 (0x0000.003c12a9)
LOGMINER: EndScn: 0 (0x0000.00000000)
LOGMINER: HighConsumedScn: 0
LOGMINER: session_flag: 0x0
LOGMINER: Read buffers: 8
LOGMINER: Memory LWM: limit 10M, LWM 8M, 80%
LOGMINER: Memory Release Limit: 0M

只不过是这些信息记录比较频繁,大约是30s就会记录一次。

为什么会产生这些?说明有程序调用了LOGMINER程序,只要调用了该LOGMINER程序,就会写入信息到alert日志。而且根据官方说明,这些信息无法屏蔽,具体可以查看文档说明,相关文档参考如下:

Alert.log Messages ‘LOGMINER: krvxpsr summary’ (Doc ID 1485217.1)

LOGMINER: Summary For Session# = nnn in 11g (Doc ID 1632209.1)

谁在使用?

既然无法屏蔽这些信息,那么怎么知道谁在使用它呢?(无法解决问题,那就解决提出问题的人,你说是不是呢,哈哈哈!!!)

以alert日志写得那么频繁,手工去调用LOGMINER程序是不太可能了,排除掉这个,那就是第三方程序在调用了(如类似OGG、cdc软件了)。排查一下,并没有发现使用OGG,那就其他的CDC软件了。

那要怎么找到这个相关的LOGMINER会话,通过alert日志 “LOGMINER: summary for session# = 2147484417”,里面的这个session# 并不是vKaTeX parse error: Expected 'EOF', got '#' at position 40: …相关的会话,这个session#̲指的是vlogmnr_session里面的SESSION_ID,如下所示:

col db_name for a20;
set linesize 400;
select SESSION_ID,SESSION_NAME,SESSION_STATE,DB_NAME,db_id,start_Scn, end_scn, processed_scn from v$logmnr_session;

SESSION_ID SESSION_NAME 		    SESSION_S DB_NAME			DB_ID  START_SCN    END_SCN PROCESSED_SCN
---------- -------------------------------- --------- -------------------- ---------- ---------- ---------- -------------
2147484417				    UNKNOWN				    0	       0	  0		0

但v l o g m n r s e s s i o n 并没有记录相关的客户端信息,也无法找到谁在调用它。后面思考了一下,既然你用 L O G M I N E R 来挖掘日志,你挖掘完,是不是要查看挖掘后的数据,我们知道那个数据是保留在 v logmnr_session并没有记录相关的客户端信息,也无法找到谁在调用它。后面思考了一下,既然你用LOGMINER来挖掘日志,你挖掘完,是不是要查看挖掘后的数据,我们知道那个数据是保留在v logmnrsession并没有记录相关的客户端信息,也无法找到谁在调用它。后面思考了一下,既然你用LOGMINER来挖掘日志,你挖掘完,是不是要查看挖掘后的数据,我们知道那个数据是保留在vlogmnr_contents,那是不是是需要去查询v l o g m n r c o n t e n t s 这个视图?我们只要找到哪些会话在调用 v logmnr_contents这个视图?我们只要找到哪些会话在调用v logmnrcontents这个视图?我们只要找到哪些会话在调用vlogmnr_contents相关的sql,是不是就抓出那个捣蛋鬼了,于是有了下面的语句:

set linesize 400
col sql_text for a200
col machine for a25
col program for a25
col sample_time for a25
select b.sample_time, b.SESSION_ID, b.SESSION_SERIAL#, b.PROGRAM,b.MACHINE,substr(a.SQL_TEXT,1,150) sql_text
  from v$sql a, v$active_session_history b
 where b.SQL_ID = a.sql_id
   and a.sql_text like '%logmnr%'
   and b.SAMPLE_TIME>sysdate-3/1440;

在这里插入图片描述

上面信息显示一清二楚,把它发给客户,让他们去确认,看看WIN-V66D44CMLMG这台机器哪个程序在搞鬼。

关注我,学习更多的数据库知识!
请添加图片描述

猜你喜欢

转载自blog.csdn.net/zhirongsu/article/details/141857494