作为Oracle DBA,我们有时候需要追踪数据误删除或用户的恶意操作情况,此时我们不仅需要查出执行这些操作的数据库账号,还需要知道操作是由哪台客户端(IP 地址等)发出的
针对这些问题,一个最有效实用而又低成本的方法就是分析Oracle 数据库的日志文件
本文将就Oracle 日志分析技术做深入探讨
一、如何分析即 LogMiner解释 从目前来看,分析Oracle 日志的唯一方法就是使用Oracle 公司提供的LogMiner 来进行, Oracle 数据库的所有更改都记录在日志中,但是原始的日志信息我们根本无法看懂,而LogMiner 就是让我们看懂日志信息的工具
从这一点上看,它和 tkprof 差不多,一个是用来分析日志信息,一个则是格式化跟踪文件
通过对日志的分析我们可以实现下面的目的: 1、查明数据库的逻辑更改; 2、侦察并更正用户的误操作; 3、执行事后审计; 4、执行变化分析
不仅如此,日志中记录的信息还包括:数据库的更改历史、更改类型(INSERT、UPDATE、DELETE、DDL 等)、更改对应的SCN 号、以及执行这些操作的用户信息等,LogMiner在分析日志时,将重构等价的SQL 语句和 UNDO 语句(分别记录在V$LOGMNR_CONTENTS 视图的SQL_REDO 和 SQL_UNDO 中)
这里需要注意的是等价语句,而并非原始 SQL 语句,例如:我们最初执行的是“delete a where c1 'cyx';”,而LogMiner 重构的是等价的6 条 DELETE 语句
所以我们应该意识到V$LOGMNR_CONTENTS 视图中显示的并非是原版的现实,从数据库角度来讲这是很容易理解的,它记录的是元操作,因为同样是“delete a where c1 'cyx';”语句,在不同的环境中