oralce 数据库日志查看方法探讨
研究了好几天,终于有了一个比较完整查看 oracle 的数据日志方法,oracle 没有想 sqlserver
那样有 sqlE 工具来辅助查询。只能利用 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';”语句,在不同的环境中,实际删除的记录数可能各不相同,因此记
录这样的语句实际上并没有什么实际意义,LogMiner 重构的是在实际情况下转化成元操作的多
个单条语句。
另外由于 Oracle 重做日志中记录的并非原始的对象(如表以及其中的列)名称,而只是它
们在 Oracle 数据库中的内部编号(对于表来说是它们在数据库中的对象 ID,而对于表中的列来
说,对应的则是该列在表中的排列序号:COL 1, COL 2 等),因此为了使 LogMiner 重构出的
SQL 语句易于识别,我们需要将这些编号转化成相应的名称,这就需要用到数据字典(也就说
LogMiner 本 身 是 可 以 不 用 数 据 字 典 的 , 详 见 下 面 的 分 析 过 程 ) , LogMiner 利 用
DBMS_LOGMNR_D.BUILD()过程来提取数据字典信息。
LogMiner 包含两个 PL/SQL 包和几个视图:
1 、 dbms_logmnr_d 包 , 这 个 包 只 包 括 一 个 用 于 提 取 数 据 字 典 信 息 的 过 程 , 即
dbms_logmnr_d.build()过程。
评论0