|
使用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以前的产品,该工具也无能为力。
|
|