您的位置:首页 > 数据库 > Oracle

使用logminer进行日志分析

2011-05-26 22:15 471 查看
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以后的产品。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息