使用logminer进行日志分析

简介:

 LogMiner工具的主要用途有:

1)跟踪数据库的变化:可以离线的跟踪数据库的变化,而不会影响在线系统的性能。
2)回退数据库的变化:回退特定的变化数据,减少point-in-time recovery的执行。
3)优化和扩容计划:可通过分析日志文件中的数据以分析数据增长模式。
 

安装LogMiner工具,这两个脚本必须均以SYS用户身份运行
@$ORACLE_HOME/rdbms/admin/dbmslmd.sql 

用来创建DBMS_LOGMNR_D包创建数据字典文件,用于提取数据字典信息到外部平面文件或者是联机日志中
@$ORACLE_HOME/rdbms/admin/dbmslm.sql

用来创建DBMS_LOGMNR    
grant execute on dbms_logmnr to public;    
10G之前,logmnr使用的临时表v$logmnr_contents使用的是system表空间,在10g后使用的是sysaux表空间,可以修改表空间:
exec sys.dbms_logmnr_d.set_tablespace('USERS');

 

有三种方法能得到数据字典的方法:
1
、字典提取到一个平面数据字典文件(DBMS_LOGMNR_D.STORE_IN_FLAT_FILE)9i以后不提倡使用

2、据字典提取到重做日志文件(DBMS_LOGMNR_D.STORE_IN_REDO_LOGS)
3
、当前的数据库的联机数据字典(DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG),只能分析当前数据库的重做日志文件

 

使用补充日志,将数据字典提取到重做日志文件要用到:

Enable Supplemental Logging
  Database-Level Supplemental Logging
    Minimal Supplemental Logging
           ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
    Database-Level Identification Key Logging
           ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
           ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
           ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (UNIQUE) COLUMNS;
           ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (FOREIGN KEY) COLUMNS;
    Disabling Database-Level Supplemental Logging
           disable database-level supplemental logging: 
             ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
             ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (UNIQUE) COLUMNS;
             ALTER DATABASE DROP SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
             ALTER DATABASE DROP SUPPLEMENTAL LOG DATA;
           disable all database supplemental logging:
             ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
             ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (UNIQUE) COLUMNS;
             ALTER DATABASE DROP SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
             ALTER DATABASE DROP SUPPLEMENTAL LOG DATA (UNIQUE) COLUMNS;
             ALTER DATABASE DROP SUPPLEMENTAL LOG DATA;
  Table-Level Supplemental Logging          
    Table-Level Identification Key Logging
           ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
           ALTER TABLE HR.EMPLOYEES ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
           ALTER TABLE HR.EMPLOYEES ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
           ALTER TABLE HR.EMPLOYEES ADD SUPPLEMENTAL LOG DATA (UNIQUE) COLUMNS;
    Table-Level User-Defined Supplemental Log Groups
           ALTER TABLE HR.EMPLOYEES ADD SUPPLEMENTAL LOG GROUP emp_parttime(EMPLOYEE_ID, LAST_NAME,DEPARTMENT_ID) ALWAYS;
           ALTER TABLE HR.EMPLOYEES ADD SUPPLEMENTAL LOG GROUP emp_fulltime(EMPLOYEE_ID, LAST_NAME,DEPARTMENT_ID);
           ALTER TABLE HR.EMPLOYEES ADD SUPPLEMENTAL LOG GROUP emp_parttime(DEPARTMENT_ID NO LOG, EMPLOYEE_ID);

 

一、在初始化参数文件中设置参数utl_file_dir,使用平面数据字典文件方法需要用到这个参数

 

二、提取数据字典

1)提取数据字典到平面数据文件

Execute dbms_logmnr_d.build('平面数据文件名','路径名’,options=>dbms_logmnr_d.store_in_flat_file);

2)提取数据字典到重做日志文件

Alter database add dupplemental log data;

Execute dbms_logmnr_d.build(options=>dbms_logmnr_d.store_in_redo_logs);

3)使用当前数据库的联机数据字典

Execute dbms_logmnr_d.build(options=>dbms_logmnr_d.dict_from_online_catalog);

 

三、添加需要监视的日志文件

1)创建logminer要分析的日志文件列表

Execute dbms_logmnr.add_logfile(logfilename=>'******',options=>dbms_logmnr.new);

2)添加其他日志文件到列表

Execute dbms_logmnr.add_logfile(logfilename=>'******',options=>dbms_logmnr.addfile);

3)从要分析的日志列表中删除日志

Execute dbms_logmnr.add_logfile(logfilename=>'*****',options=>dbms_logmnr.removefile);

 

四、启动logminer会话,进行日志分析

1)无限制条件分析

Execute dbms_logmnr.start_logmnr(dictfilename=>'******');

------指定平面文件名

Execute dbms_logmnr.start_logmnr(optioons=>dbms_logmnr.dict_from_online_catalog+

dbms_logmnr.committed_data_only);

----- committed_data_only 标识我们只提取已提交的事务

Execute dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);

------Logminer将使用联机数据字典

Execute dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_redo_logs);

------Logminer将在重做日志文件中查找字典数据

Execute dbms_logmnr.start_logmnr(options=>dbms_logmnr.skip_curruption);

------忽略redo日志中的所有错误

Execute dbms_logmnr.start_logmnr(options=>dbms_logmnr.ddl_dict_tracking);

------用来跟踪ddl语句,默认是关闭的!当使用online catalog时,不能使用!

2)有限制条件分析

使用平面数据字典文件

Execute dbms_logmnr.start_logmnr(dictfilename=>'*******',starttime=>'*****',

Endtime=>'*******');

Execute dbms_logmnr.start_logmnr(dictfilename=>'*******',starttime=>'*****',

Endtime=>'*******',options=>dbms_logmnr.continuous_mine);

Execute dbms_logmnr.start_logmnr(dictfilename=>'*******',startscn=>*****,

endscn=>*****);

使用重做日志

Execute dbms_logmnr.start_logmnr(startscn=>******,endscn=*******,options=>

dbms_logmnr.dict_form_redo_logs);

使用联机数据字典

Execute dbms_logmnr.start_logmnr(startscn=>******,endscn=>******,options=>

dbms_logmnr.dict_from_online_catalog+dbms_logmnr.continuous_mine);

 

五、查询v$logmnr_contents

 

六、 结束logminer会话,释放所有资源和清除PGA    
    EXECUTE DBMS_LOGMNR.END_LOGMNR;  

 

七、相关的数据字典
v$logmnr_contents
v$logmnr_logs
v$logmnr_dictionary
v$logmnr_parameters
v$lolist

 

八、 其他注意事项
1)LogMiner
生成行级sql,并不是实际的语句
2)
所有信息都在PGA中,会话结束,信息丢失,可以用create table as select * from v$logmnr_contents保存信息。
3)
不支持下面的数据结构
简单的和嵌套的抽象数据结构
嵌套表和varry
索引组织表
一个带有族建的create table as select 
4
LogMiner必须使用被分析数据库实例产生的字典文件,而不是安装LogMiner的数据库产生的字典文件,另外必须保证安装LogMiner数据库的字符集和被分析数据库的字符集相同。5)被分析数据库平台必须和当前LogMiner所在数据库平台一样。
6
LogMiner日志分析工具仅能够分析Oracle 8以后的产品。

本文转自戴柏阳的博客博客51CTO博客,原文链接http://blog.51cto.com/daibaiyang119/575045如需转载请自行联系原作者


daibaiyang119

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
7月前
|
Oracle 关系型数据库 数据库
Oracle 11G常见性能诊断报告(AWR/ADDM/ASH)收集
Oracle 11G常见性能诊断报告(AWR/ADDM/ASH)收集
|
Oracle 关系型数据库
Oracle自带adrci工具清理告警日志
Oracle自带adrci工具清理告警日志
519 0
Oracle自带adrci工具清理告警日志
|
SQL Oracle 关系型数据库
循序渐进解读Oracle AWR性能分析报告
Oracle中的AWR为我们分析数据库提供了非常好的便利条件,那如何解读AWR的数据呢?本文针对最为常见的一种报告——《AWR数据库报告》进行说明。
|
SQL Oracle 关系型数据库
|
SQL 关系型数据库 数据库
|
监控 关系型数据库 MySQL
|
SQL 监控 Oracle
Oracle Logminer 日志挖掘
生产环境中考虑到数据库的性能问题,很少会打开数据的审计功能,应用层也不会记录SQL的执行信息;但是生产上经常会遇到某张表的某几条被修改掉,但是应用又查不到是哪个接口修改的记录,这时候Logminer 就派上用场了。
3348 0