ITPub博客

首页 > 数据库 > Oracle > LogMiner使用詳解

LogMiner使用詳解

Oracle 作者:deitylee 时间:2012-02-18 16:18:55 0 删除 编辑
此帖來此http://www.itpub.net/thread-1051633-0-1.html
作者:weifengzw
使用LogMiner
(logminer工具可以分析出所有对于数据库操作的DML(insert、update、delete等)语句,另外还可分析得到一些必要的回滚 SQL语句。该工具特别适用于调试、审计或者回退某个特定的事务。LogMiner 工具即可以用来分析在线,也可以用来分析离线日志文件,即可以分析本身自己数据库的重作日志文件,也可以用来分析其他数据库的重作日志文件。)
   

1.创建DBMS_LOGMNR包
SQL>@D:\oracle\rdbms\admin\dbmslm.sql

2.创建相关数据字典
SQL>@$ORACLD:\oracle\rdbms\admin\dbmslmd.sql

3.修改初始化参数UTL_FILE_DIR,指定分析数据的存放处
SQL>alter system set UTL_FILE_DIR='D:\logminer' scope=spfile;

4.重启数据库
SQL>shutdown immediate
SQL>startup

5.创建数据字典文件

SQL>execute dbms_logmnr_d.build(dictionary_filename =>'sqltrace.ora',dictionary

_location =>'D:\logminer');

6.建立日志分析表

SQL> execute dbms_logmnr.add_logfile(options =>dbms_logmnr.new,logfilename =>'D:\archivelog\ARC00100.001');


7.添加用于分析的日志文件
SQL> execute dbms_logmnr.add_logfile(options =>dbms_logmnr.addfile,logfilename=>'D:\archivelog\ARC00099.001');
SQL> execute dbms_logmnr.add_logfile(options =>dbms_logmnr.addfile,logfilename=>'D:\archivelog\ARC00093.001');
删除
SQL> execute dbms_logmnr.add_logfile(options =>dbms_logmnr.removefile,logfilename =>'D:\archivelog\ARC00011.001');

8.启动LogMiner进行分析(视图v$archived_log可以查询出相应的SCN及对应的归档日志文件)
SQL> execute dbms_logmnr.start_logmnr(dictfilename=>'d:\logminer\sqltrace.ora');
无限制条件
SQL> EXECUTE dbms_logmnr.start_logmnr( DictFileName=>'d:\logminer\sqltrace.ora ');
有限制条件:限制起始和终止时间
EXECUTE dbms_logmnr.start_logmnr( DictFileName => 'd:\logminer\sqltrace.ora',StartTime => to_date('2006-12-22
12:03:00','YYYY-MM-DD HH24:MI:SS'),EndTime => to_date('2006-12-22 15:00','YYYY-MM-DD HH24:MI:SS '));

execute dbms_logmnr.start_logmnr(dictfilename =>'d:\logminer\sqltrace.ora',starttime =>to_date('20080906 14:49:00','yyyymmdd hh24:mi:ss'),endtime =>to_date('20080906 14:51:00','yyyymmdd hh24:mi:ss'));

起始scn和终止scn
SQL> EXECUTE dbms_logmnr.start_logmnr( DictFileName => 'D:\logminer\sqltrace.ora',
StartScn => 20, EndScn => 50);

9.参看分析结果


一共有四个表,详细说明如下
V$LOGMNR_DICTIONARY-------查询使用的数据字典文件
V$LOGMNR_PARAMETERS-------查询当前LogMiner设定的参数
V$LOGMNR_LOGS      -------查询分析的日志文件
V$LOGMNR_CONTENTS  -------日志文件的内容

Seg_name  : 表名;
Scn       : SCN 号码
Sql_redo  : 所作的sql 语句
Sql_undo  : 对应sql_redo, 恢复用的sql 语句
Timestamp : sql 发出的具体时间
Operation : sql 的类型,分为INSERT, UPDATE, START(set …), COMMIT(commit), INTERNAL等
Session#  : 发出该操作的 session  

select operation,sql_redo,sql_undo from v$logmnr_contents;
SELECT sql_redo FROM v$logmnr_contents WHERE username='SYS' AND tablename='TT';
select scn,sql_redo from v$logmnr_contents where seg_owner='SYSTEM' and seg_name='ENDUSER' and upper(operation)='INSERT';
SELECT timstamp,sql_redo FROM v$logmnr_contents WHERE upper(sql_redo) like '%insert%';

  
结果分析
-------------------------------------------------------------------------------
insert into "UNKNOWN"."OBJ# 32407"("COL 1") values (HEXTORAW('c10a'));
delete from "UNKNOWN"."OBJ# 32407" where "COL 1" = HEXTORAW('c10a') and ROWID =
'AAAH6XAABAAAPC1AAC';

select object_name from dba_objects where object_id=32407;

10.结束分析

SQL> execute dbms_logmnr.end_logmnr;

一旦结束视图v$logmnr_contents中的分析结果也随之不再存在,分析信息存放在PGA中。






注意!!!:
1.在进行限制条件分析日志时,如果执行失败了,那么查看v$logmnr_logs视图。select               
log_id,filename,low_time,high_time,db_id,db_name from v$logmnr_logs;
            
2.在查询v$logmnr_contents内容时,where限制条件一定要用大写.

其他注意事项
  我们可以利用logminer日志分析工具来分析其他数据库实例产生的重作日志文件,而不仅仅用来分析本身安装logminer的数据库实例的redo logs文件。使用logminer分析其他数据库实例时,有几点需要注意:
  1. logminer必须使用被分析数据库实例产生的字典文件,而不是安装logminer的数据库产生的字典文件,另外必须保证安装logminer数据库
的字符集和被分析数据库的字符集相同。
  2. 被分析数据库平台必须和当前logminer所在数据库平台一样,也就是说如果我们要分析的文件是由运行在UNIX平台上的Oracle 9i产生的,那么也必须在一个运行在UNIX平台上的Oracle实例上运行logminer,而不能在其他如Microsoft NT上运行logminer。当然两者的硬件条件不一
定要求完全一样。
  3. logminer日志分析工具仅能够分析Oracle 8以后的产品,对于8以前的产品,该工具也无能为力。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/16381228/viewspace-716710/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2011-10-27

  • 博文量
    74
  • 访问量
    366637