当前位置: 首页 > 科技观察

《Oracle》善用日志挖掘找出罪魁祸首

时间:2023-03-17 21:54:59 科技观察

总结上周下班的时候,突然发生了一件事情……一个重要的表数据不见了!哎,有兄弟搞事情,虽然后来通过Flashback恢复了两个小时前的数据,但是领导还是要求查看日志,看是谁操作的。..这里主要使用日志挖掘工具logmnr来跟踪。01.查看日志的基本信息,首先要了解数据库日志情况故障时间点。02.安装logmnr@$ORACLE_HOME/rdbms/admin/dbmslms.sql:DBMS_LOGMNR@$ORACLE_HOME/rdbms/admin/dbmslms.sql:DBMS_LOGMNR_D@$ORACLE_HOME/rdbms/admin/dbmslms.sql--会话管理忘记截图了,这里做不发送它,只是用dba权限执行它。03.创建日志分析列表,需要先打开补充日志,但因为是事后诸葛亮,打开也没有意义。executedbms_logmnr.add_logfile(logfilename=>'+RFDATA/rfdb/archivelog/2019_05_24/thread_1_seq_63614.749.1009132933',options=>dbms_logmnr.new);executedbms_logmnr.add_logfile(logfilename=>'+RFDATA/rfdb/archivelog/2019_05_24/thread_2_seq_56388.526.1009131229',options=>dbms_logmnr.addfile);executedbms_logmnr.add_logfile(logfilename=>'+RFDATA/rfdb/archivelog/2019_05_24/thread_1_seq_63613.753.1009129303',options=>dbms_logmnr.addfile);executedbms_logmnr.add_logfile(RFDATA/rfdb/archivelog/2019_05_24/thread_1_seq_63613.753.1009129303);执行bms_logmnr.add_logfile(RFDATA/rfdb/archivelog/2019_05_24/thread_1_seq_63613.753.1009129303)/rfdb/archivelog/2019_05_24/thread_2_seq_56387.897.1009126625',options=>dbms_logmnr.addfile);executedbms_logmnr.add_logfile(logfilename=>'+RFDATA/rfdb/archivelog/2019_05_24/thread_2_seq_56386.693.1009123411',options=>dbms_logmnr.addfile);executedbms_logmnr.add_logfile(logfilename=>'+RFDATA/rfdb/archivelog/2019_05_24/thread_1_seq_63612.512.1009125633',options=>dbms_logmnr.addfile);executedbms_logmnr.add_logfile(logfilename=>'+RFDATA/rfdb/archivelog/2019_05_24/thread_2_seq_56385.727.1009123111',options=>dbms_logmnr.addfile);04.开启logmnrexecutedbms_logmnr.start_logmnr(Options=>dbms_logmnr.dict_from_online_catalog);05创建临时表createtablelogmnr_tempnologgingasselect*fromv$logmnr_contents;小技巧:因为一直开logmnr消耗资源较多,创建临时表收集信息后可以关闭logmnr。06.结束logmnreexecutedbms_logmnr.end_logmnr;07.分析相关操作SELECTscn,timestamp,sql_redo,sql_undo,operation,seg_name,table_name,username,os_username,session_infoFROMsys.logmnr_tempWHERETABLE_NAME='FSL_RDC_PLANT_MAPPING'orderbytimestamp;嗯,这里差点成功,只记录了操作用户,但是没有具体的IP信息(之前没有supplementallog)因为之前没有alterdatabaseaddsupplementallog数据,所以session_info是没有的信息。08.根据logmnr的时间字段,间接查询审计selectsessionid,userid,userhost,comment$text,spare1,cast(/*TIMESTAMP*/(from_tz(ntimestamp#,'00:00')atlocal)asdate)fromsys.aud$whereOBJ$NAME='FSL_RDC_PLANT_MAPPING'在这里试过了,还是不行。得不到更多有价值的信息,只好作罢。严格来说,是一个比较失败的日志挖掘。毕竟相关的IP运营无法获取,也无法直接定位。不过我也知道下午3点53分数据库用户glogowner执行了删除命令,也不是没有。大家有什么更好的抓凶手的方法可以在下方留言一起讨论哦!