注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

风之人生

人生如风,却无法如风般潇洒。

 
 
 

日志

 
 
关于我

一介草民,苟活于上海滩,以甲骨文为生,偶尔对一些国家大事有些兴趣,日常无事常以丝竹之声为乐。

网易考拉推荐

Logminer 实践笔记  

2010-04-16 15:16:44|  分类: Oracle |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
               Logminer in action
1. 简介
   在oracle数据库中,提供了一个很好的工具,使我们能够对于我们的重做日志文件来进行分析,使用这个工具我们可以很方便的对我们所做的所有动作来进行查看。首先来看看logminger能给我们带来什么好处。
  1)明确的查找出我们确定的一种逻辑错误。
  2)在我们细粒度的恢复中可以确定我们要做什么。
  3)性能调优。
  4)由于在我们的重做日志里面包含了DML和DDL,所以我们可以来进行审计。
  
2. 实现
那么如何来使用Logminer呢?
在实现时,必须要有一个源数据库,我们从源数据库来生成redo,或者说从源数据库取得redo,然后再到我们的mining数据库来进行分析(可以是源数据库或者不同的数据库),然后还需要一些内部的字典来帮助我们查看redo里的内容,把内部记录的数据转化成外部能够查看的数据。
比如说我们执行以下sql:
INSERT INTO HR.JOBS(JOB_ID, JOB_TITLE, MIN_SALARY, MAX_SALARY)  VALUES('IT_WT','Technical Writer', 4000, 11000);
如果我们没有logminer dictionary,就只能看到logminer里面的这些东西:
insert into "UNKNOWN"."OBJ# 45522"("COL 1","COL 2","COL 3","COL 4") values
(HEXTORAW('45465f4748'),HEXTORAW('546563686e6963616c20577269746572'),
HEXTORAW('c229'),HEXTORAW('c3020b'));

那么要实现logminer,还有一些前提条件必须满足
就是源数据库和mining数据库必须是同一硬件平台,例如sparc体系的下的源数据库必须在sparc下的mining数据库来进行分析,mining数据库的版本必须大于等于源数据库,而且是两个数据库必须是同一字符集。日志文件必须是同一个数据库生成的。
那么不多说了,上酸菜:
1. 如果你要使用logminer,必须在我们的重做日志里面生成一些我们所需的附加信息。

SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;

Database altered.

SELECT SUPPLEMENTAL_LOG_DATA_MIN FROM V$DATABASE;

SUPPLEME
--------
YES

如果结果是YES或者IMPLICIT说明已经打开了supplementtal logging.

2. 初始化logmnr,注意,在这步前,必须保证数据库运行在archivelog模式下,而且在运行时,所有相关生成的表都会放在SYSAUX表空间里,如果要使用别的表空间,可以使用DBMS_LOGMNR_D.SET_TABLESPACE来做,在本例中我们建立新的表空间
SQL> alter database archivelog;

Database altered.

SQL> create tablespace logmnr datafile '/u01/oracle/oradata/jason/logmnr01.dbf' size 50m           
  2  EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K;

SQL> exec dbms_logmnr_d.set_tablespace('LOGMNR');

PL/SQL procedure successfully completed.

建立字典,可以在平面文件里,或者在redolog流里。
我们选择建立在redolog里面

SQL> execute dbms_logmnr_d.build('', '',DBMS_LOGMNR_D.STORE_IN_REDO_LOGS);

PL/SQL procedure successfully completed.

然后将需要分析的日志问价加进去
SQL> select GROUP#,MEMBER
  2  from v$logfile 
  3  order by GROUP#;

    GROUP#
----------
MEMBER
----------------------------------------------------------------------------------------------------
         1
/u01/oracle/oradata/jason/redo01.log

         1
/u01/oracle/oradata/jason/redo01b.log

         2
/u01/oracle/oradata/jason/redo02b.log


    GROUP#
----------
MEMBER
----------------------------------------------------------------------------------------------------
         2
/u01/oracle/oradata/jason/redo02.log

         3
/u01/oracle/oradata/jason/redo03b.log

         3
/u01/oracle/oradata/jason/redo03.log


6 rows selected.

我们可以把我们的logfile加进去,一次一条,如果你要添加多个redo怎么办?不好意思,一次一次的执行吧

SQL> exec dbms_logmnr.add_logfile('/u01/oracle/oradata/jason/redo01.log',dbms_logmnr.NEW);

PL/SQL procedure successfully completed.

SQL> exec dbms_logmnr.add_logfile('/u01/oracle/oradata/jason/redo02.log');

PL/SQL procedure successfully completed.

SQL>  exec dbms_logmnr.add_logfile('/u01/oracle/oradata/jason/redo03.log');

PL/SQL procedure successfully completed.
开始log mining.
ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY HH24:MI:SS';

Session altered.
SQL> EXECUTE DBMS_LOGMNR.START_LOGMNR(STARTTIME => '07-Apr-2010 22:00:00', ENDTIME => '08-Apr-2010 03:00:00', -
> OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG + -
> DBMS_LOGMNR.CONTINUOUS_MINE);

PL/SQL procedure successfully completed.


SELECT OPERATION, SQL_REDO, SQL_UNDO
FROM V$LOGMNR_CONTENTS
WHERE SEG_OWNER = 'HR' AND SEG_NAME = 'JOBS' AND
OPERATION = 'INSERT'; 
AND USERNAME = 'RON';
  评论这张
 
阅读(240)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017