日志挖掘logminer

一、 安装LogMiner

LogMiner的安装非常简单,只需要执行几个脚本。 
这里用的是11g,版本不同,请参考官方文档。 

dbmslmd.sql:创建DBMS_LOGMNR_D包,该包用来创建数据字典文件。
dbmslm.sql:创建DBMS_LOGMNR包,该包用来分析日志文件。  
dbmslms.sql:创建dbms_logmnr_session包,该包用来分析session 

conn / as sysdba
@?/rdbms/admin/dbmslmd.sql
@?/rdbms/admin/dbmslm.sql
@?/rdbms/admin/dbmslms.sql


二、准备工作
1.开归档
2.添加补充日志
alter database add supplemental log data; 
select SUPPLEMENTAL_LOG_DATA_MIN from v$database;

这里如果不打开的话,在分析归档日志的时候,就看不到执行操作的machine、os_name、user_name等等,对分析操作排查问题会产生很大困扰。在通常情况下,redo log 只记录的进行恢复所必需的信息,但是这些信息对于我们使用redo log进行一些其他应用时是不够的,例如在 redo log中使用rowid唯一标识一行而不是通过Primary key,如果我们在另外的数据库分析这些日志并想重新执行某些dml时就可能会有问题,因为不同的数据库其rowid代表的内容是不同的。在这时候就需要一些额外的信息(columns)加入redo log,这就是supplemental logging。

三、分析归档日志

1.找到需要分析的归档日志
ASMCMD> ls -l
Type        Redund  Striped  Time             Sys  Name
ARCHIVELOG  UNPROT  COARSE   MAY 09 08:00:00  Y    thread_2_seq_4065.711.975659251
ARCHIVELOG  UNPROT  COARSE   MAY 09 10:00:00  Y    thread_2_seq_4066.690.975666453
ARCHIVELOG  UNPROT  COARSE   MAY 09 12:00:00  Y    thread_2_seq_4067.860.975673655
ARCHIVELOG  UNPROT  COARSE   MAY 09 14:00:00  Y    thread_2_seq_4068.316.975680855  <--以此为例(存放12:00 - 14:00的数据)
ARCHIVELOG  UNPROT  COARSE   MAY 09 16:00:00  Y    thread_2_seq_4069.633.975682969
ARCHIVELOG  UNPROT  COARSE   MAY 09 16:00:00  Y    thread_2_seq_4070.900.975684315
ARCHIVELOG  UNPROT  COARSE   MAY 09 16:00:00  Y    thread_2_seq_4071.684.975684339

2. 将要分析的归档日志、redo日志等添加到分析队列

SQL> exec dbms_logmnr.add_logfile(LogFileName=>'+FRA/APS/ARCHIVELOG/2018_05_09/thread_2_seq_4068.316.975680855',Options=>dbms_logmnr.addfile);
PL/SQL procedure successfully completed.

要添加多个就多执行几个

--也可以添加redo日志
exec dbms_logmnr.add_logfile('/data2/logs/redo01.log')

--可以删除添加的日志
exec dbms_logmnr.remove_logfile('/data2/logs/redo01.log')

对添加入队列的日志进行分析
SQL> exec dbms_logmnr.start_logmnr( options => sys.dbms_logmnr.dict_from_online_catalog);
PL/SQL procedure successfully completed.


SQL> select count(*) from v$logmnr_contents;

  COUNT(*)
----------
    115245

v$logmnr_contents在退出当前会话后会被清空,最好在分析完成后建一张临时表慢慢找
SQL>  create table gt_archive_0521 as select to_char(timestamp,'yyyy-mm-dd hh24:mi:ss') as timestamp,sql_redo  from v$logmnr_contents;
Table created.

SQL> select min(timestamp),max(timestamp) from gt_archive_0521;

MIN(TIMESTAMP)      MAX(TIMESTAMP)
------------------- -------------------
2018-05-09 12:27:44 2018-05-09 14:27:03

SQL> grant select on archivelog0510 to aps;

Grant succeeded

 select * from gt_archive_0521 g where g.timestamp>='2018-05-21 10:14:00' and g.timestamp<'2018-05-21 10:16:00'

-------------------------------------------------

日志信息的访问

   Oracle通过logminer工具访问日志。该工具是oracle server软件的一部分。Logminer通过固定视图v$logmnr_contents视图去展现日志中信息。

   V$logmnr_contents视图包含的日志信息如下:

1)  数据库改变的操作类型OPERATION:insert,delete,update,DDL

2)  操作时的SCN(scn列)

3)  该操作提交时的SCN (commit scn)

4)  操作所属的事务:XIDUSN, XIDSLT, and XIDSQN

5)  操作所改变对象的表名和模式名:(seg_name,seg_owner)

6)  发出该操作的用户名:(username)

7)  重新构造生成该条日志的SQL,如果原SQL中有密码,那么密码是加密的。(sql_redo)

8)  构造(7)中回退的SQL。如果操作为DDL那么该列为空。(sql_undo)

在logminer中生成的各列的信息都是用唯一的数字信息标识的。如果要显示为用户定义的名字,那么就需要数据字典。DBMS_LOGMNR_D.BUILD可以生成数据字典。

http://blog.chinaunix.net/uid-14877370-id-2782027.html

-----------------------------------------------------
logmnr工具包含的过程与视图

dbms_logmnr_d包含了:

(1)add_logfile:用来增加/剔除用于分析的日志文件.

(2)start_logmnr:用来开启日志分析,而且在9i/10g中,能够开启许多不同的分析选项.

(3)end_logmnr:用来终止分析会话,它将回收LogMiner所挪借的内存

与LogMiner相关的数据字典:

v$logmnr_dictionary:LogMiner可能利用的数据字典消息.

v$logmnr_parameters:目前LogMiner所设定的参数消息.

v$logmnr_logs:目前用于分析的日志列表.

v$logmnr_contents:日志分析收获.

猜你喜欢

转载自blog.csdn.net/Hehuyi_In/article/details/89493122