|
|
51CTO旗下网站
|
|
移动端

「Oracle」善用日志挖掘,找出罪魁祸首

上周下班时突然来了一件事...某个重要的表数据全没了!哎,有兄弟搞事情啊,虽然事后通过闪回恢复了两个小时前的数据,但是领导还是要求查一下日志看是谁操作的。。。这里主要用日志挖掘工具logmnr来跟踪。

作者:佚名来源:今日头条|2019-05-27 10:22

 

概述

上周下班时突然来了一件事...某个重要的表数据全没了!哎,有兄弟搞事情啊,虽然事后通过闪回恢复了两个小时前的数据,但是领导还是要求查一下日志看是谁操作的。。。这里主要用日志挖掘工具logmnr来跟踪。

01.查看日志基本信息

先了解数据库日志情况

  1. select * from v$logfile; 
  2. select * from v$log; 
  3. select * from v$archived_log where status='A' ORDER BY FIRST_TIME DESC  

「Oracle」善用日志挖掘,找出罪魁祸首

这里根据故障时间点拿了这段时间的归档日志。

02.安装logmnr

  1. @$ORACLE_HOME/rdbms/admin/dbmslm.sql:DBMS_LOGMNR 
  2. @$ORACLE_HOME/rdbms/admin/dbmslmd.sql:DBMS_LOGMNR_D 
  3. @$ORACLE_HOME/rdbms/admin/dbmslms.sql --会话管理 

忘记截图,这里就不发了,用dba权限执行就可以。

03.建立日志分析列表

本来需要先开补充日志的,但是因为是事后了,所以开了也没意义。

  1. execute dbms_logmnr.add_logfile(logfilename=>'+RFDATA/rfdb/archivelog/2019_05_24/thread_1_seq_63614.749.1009132933',options=>dbms_logmnr.new); 
  2. execute dbms_logmnr.add_logfile(logfilename=>'+RFDATA/rfdb/archivelog/2019_05_24/thread_2_seq_56388.526.1009131229',options=>dbms_logmnr.addfile); 
  3. execute dbms_logmnr.add_logfile(logfilename=>'+RFDATA/rfdb/archivelog/2019_05_24/thread_1_seq_63613.753.1009129303',options=>dbms_logmnr.addfile); 
  4. execute dbms_logmnr.add_logfile(logfilename=>'+RFDATA/rfdb/archivelog/2019_05_24/thread_2_seq_56387.897.1009126625',options=>dbms_logmnr.addfile); 
  5. execute dbms_logmnr.add_logfile(logfilename=>'+RFDATA/rfdb/archivelog/2019_05_24/thread_2_seq_56386.693.1009123411',options=>dbms_logmnr.addfile); 
  6. execute dbms_logmnr.add_logfile(logfilename=>'+RFDATA/rfdb/archivelog/2019_05_24/thread_1_seq_63612.512.1009125633',options=>dbms_logmnr.addfile); 
  7. execute dbms_logmnr.add_logfile(logfilename=>'+RFDATA/rfdb/archivelog/2019_05_24/thread_2_seq_56385.727.1009123111',options=>dbms_logmnr.addfile); 

「Oracle」善用日志挖掘,找出罪魁祸首

04.开启logmnr

  1. execute dbms_logmnr.start_logmnr(Options=>dbms_logmnr.dict_from_online_catalog); 

05创建临时表

  1. create table logmnr_temp nologging as select * from v$logmnr_contents; 

小技巧:因为一直开着logmnr很耗资源,所以先创建个临时表收集信息后就可以关闭logmnr了

06.结束logmnr

  1. execute dbms_logmnr.end_logmnr; 

「Oracle」善用日志挖掘,找出罪魁祸首

07.分析相关操作

  1. SELECT scn, 
  2.  timestamp
  3.  sql_redo, 
  4.  sql_undo, 
  5.  operation, 
  6.  seg_name, 
  7.  table_name, 
  8.  username, 
  9.  os_username, 
  10.  session_info 
  11.  FROM sys.logmnr_temp  
  12.  WHERE TABLE_NAME='FSL_RDC_PLANT_MAPPING' order by timestamp

「Oracle」善用日志挖掘,找出罪魁祸首

好吧,到这里功亏一篑,只记录到操作的用户,但是没有具体的IP信息(之前没有开补充日志)。因为之前没alter database add supplemental log data所以session_info是没有信息的。

08.根据logmnr的时间字段,间接查审计

  1. select sessionid, userid, userhost, comment$text, spare1,cast (/* TIMESTAMP */(from_tz(ntimestamp#,'00:00'at localas datefrom sys.aud$ where OBJ$NAME='FSL_RDC_PLANT_MAPPING' 

「Oracle」善用日志挖掘,找出罪魁祸首

这里尝试了下还是不行,获取不到更多有价值信息,只能放弃了。

严格来说,是一次比较失败的日志挖掘,毕竟获取不到相关的IP操作,无法直接定位。不过也知道了是数据库用户glogowner在下午3:53分执行了delete命令导致,也不算一无所获。大家如果有什么更好的办法抓住凶手,可以在下方留言一起探讨哦!

【编辑推荐】

  1. 4个MySQL优化工具AWR,帮你准确定位数据库瓶颈!
  2. 阿里云PolarDB发布重大更新 支持Oracle等数据库一键迁移上云
  3. 传统数据库一键上云 阿里云PolarDB发布重大更新
  4. 系统慢得一批?看数据库运维老司机如何做优化
  5. 从架构特点到功能缺陷,重新认识分析型分布式数据库
【责任编辑:武晓燕 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

Spring Boot 爬虫搜索轻松游

Spring Boot 爬虫搜索轻松游

全栈式开发之旅
共4章 | 美码师

60人订阅学习

Linux性能调优攻略

Linux性能调优攻略

性能调优规范
共15章 | 南非蚂蚁

198人订阅学习

VMware vSphere虚拟化常见故障

VMware vSphere虚拟化常见故障

搞定vSphere虚拟化
共18章 | 王春海

78人订阅学习

读 书 +更多

敏捷Acegi、CAS:构建安全的Java系统

本书是关于Acegi、CAS的权威教程,是Java/Java EE安全性开发者的必备参考书。无论是Java EE安全性编程模型的背景和基础知识,还是Acegi、CA...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO播客