让我们挖吧――Logminer(1)Logminer简介

最近o小白开始研究Logminer,其实Logminer整个来说还是比较简单的,要单纯的做个实验不难,但是要里面有很多东西都有的说,那既然开始研究,先写篇开题。

首先,什么是Logminer。我们知道,所有的数据操作在oracle中都被记录在了redo log中,用来做数据库的恢复,而Logminer简单来说就是一种工具,可以用来观察redo log中的内容。通过观察redo log中的内容,我们可以做到以下几点:

1. 如果数据库发生了逻辑错误,那通过观察redo log中的信息,我们就可以知道具体是什么语句造成了这个逻辑错误,通过Logminer,我们可以定位到是哪个用户,哪张表,在何时 (timestamp或者scn),做了哪个操作引起的错误。甚至可以观察到被一个错误覆盖的另一个错误(比如用户user1错误更新了a表,用户 user2在之后又错误更新了a表,那自然,只解决user2的错误还是会有安全隐患的)那这是Logminer在逻辑纠错方面的应用,通常这种应用会比 较多。

2.通过Logminer我们可以针对性地定位到哪个表被访问得最多,依据此来做一个调优。

3.可以发现哪个表被哪个用户访问,从而完成一个审计。

综上所述就是可以通过日志来定位一个具体的sql语句被哪个用户在什么时候被执行了,甚至可以配合做不完全恢复或者定位到错误以后做一个闪回。

然后是Logminer是什么?

Logminer的整个构成就是由两个Logminer的包(DBMS_LOGMNR和DBMS_LOGMNR_D),Logminer用到的字典,一个Logminer的视图V$LOGMNR_CONTENTS,以及redo log构成的。

Logminer 的包主要用来做Logminer的设置,由$ORACLE_HOME/rdbms/admin/dbmslm.sql和$ORACLE_HOME /rdbms/admin/dbmslmd.sql分别对应DBMS_LOGMNR和DBMS_LOGMNR_D,具体操作在下章的具体操作给出。

Logminer Dictionary,那是在用来显示的时候显示逻辑的表名和逻辑名,而不是内部的对象ID,便于理解。举个例子,正常是:

INSERT INTO HR.JOBS(JOB_ID, JOB_TITLE, MIN_SALARY, MAX_SALARY) VALUES('IT_WT','Technical Writer', 4000, 11000); 如果不用数据字典:

insert into "UNKNOWN"."OBJ# 45522"("COL 1","COL 2","COL 3","COL 4") values (HEXTORAW('45465f4748'),HEXTORAW('546563686e6963616c20577269746572'), HEXTORAW('c229'),HEXTORAW('c3020b')); //摘自oracle官方文档

V$LOGMNR_CONTENTS,那是最终Logminer分析以后查看结果的性能视图,包括SCN,COMMIT_SCN(COMMITTED_DATA_ONLY 11g),TIMESTAMP,COMMIT_TIMESTAMP,用户名,表名,session号等一系列你可能会用到的内容。

redo log,Logminer支持在线的的redo log,归档的redo log,备份的redo log(RMAN备份的不行,RMAN备份会被加密)。

ok,其实Logminer的简单概念也就这样了,Logminer的一大优势就是简单,因为简单,所以普及。

那 具体怎么做呢,首先,先在oracle里运行这两个脚本$ORACLE_HOME/rdbms/admin/dbmslm.sql 和$ORACLE_HOME/rdbms/admin/dbmslmd.sql,然后设定参数。如果有经验或者去google查一下Logminer使用 的同学肯定会注意到,不少会有不少人说要执行下面这步:

SQL>alter database add supplemental log data;

启动一个叫supplemental log的东西,那这个东西是什么呢?为什么要启动呢?不启动能不能做呢?我们留待下章再分析~

你可能感兴趣的:(oracle,职场,休闲,LOGMINER)