当前位置: 首页 >> 技术文章 >> 挖掘Oracle日志的“大杀器”
挖掘Oracle日志的“大杀器”
发布时间:2017-08-30 发布人:赵靖宇 322


环境:Oracle 11.2.0.4 RAC


  1. 查询当前日志组

  2. 业务用户插入操作

  3. 归档日志切换

  4. 业务用户插入操作

  5. 归档日志切换

  6. 业务用户更新操作

  7. 归档日志切换

  8. 确认需要分析的日志

  9. 备份归档日志

  10. 使用LogMiner分


查询当前日志组


使用sys用户查询Oracle数据库的当前日志组:



这里当前日志(current)是:

thread 1 sequence 30

thread 2 sequence 25


业务用户插入操作


模拟业务用户jingyu插入T2表数据:


image.png


归档日志切换


为了区分每个日志的不同操作,这里对数据库进行手工归档切换,模拟现实中实际的归档切换。


image.png


业务用户插入操作


模拟业务用户jingyu删除T2表部分数据:


image.png


归档日志切换


为了区分每个日志的不同操作,这里对数据库进行手工归档切换,模拟现实中实际的归档切换。


image.png


业务用户更新操作


模拟业务用户jingyu更新T2表部分数据:


image.png


归档日志切换


为了区分每个日志的不同操作,这里对数据库进行手工归档切换,模拟现实中实际的归档切换。


image.png


确认需要分析的日志


确认之后需要使用LogMiner分析的日志:


image.png


备份归档日志


将相关的归档都copy备份出来:


image.png


备份出来的归档日志文件如下:


image.png


使用LogMiner分析


使用LogMiner分析归档日志:


image.png

image.png

image.png


查询v$logmnr_contents


image.png


实验发现:

以username为条件无法查询到相关记录,最终确认username都是unknown而不是真正执行语句的业务用户jingyu。 

而挖掘出的日志sql_redo这个字段是完整的SQL,可以采用like的方式查询。

比如我分析更新操作的日志,就可以得到下面这样的结果:


image.png

image.png

image.png


至此,LogMiner基本的操作实验已完成。


附:


与LogMiner有关的一些操作命令参考:


image.png

image.png


最后确认如果开启了附加日志,username就可以捕获到正确的值:


image.png

image.png

image.png


可以看到,开启了附加日志,就可以正常显示username的信息了。