LogMiner是集成在Oracle8i/Oracle9i数据库产品中的日志分析工具,通过该工具可以分析重做日志和归档日志中的所有事务变化,并能准确地确定各种DML和DDL操作的具体时间和SCN值。对重做日志和归档日志进行分析的目的是为了恢复由于执行了误操作而丢失的数据。
使用LogMiner可实现:①确定数据逻辑损坏的时间。例如,用户执行了DROP TABLE和TRUNCATE TABLE命令等误操作后,使用LogMiner可以准确定位执行这些误操作的具体时间。注意:Oracle8i只能还原DML操作,不能还原DDL操作;Oracle9i可以还原DDL以及DML操作。②跟踪用户执行的事务变化操作。使用LogMiner不仅可以跟踪用户所执行的各种DML操作和DDL操作,而且还可以取得数据变化。③跟踪表的DML操作,使用LogMiner可以跟踪在表上所发生的所有事务变化。
测试环境:
Oracle9i(9.2.0.1.0) Windows2003 sid为ora9i 自动归档模式
一、生成日志文件
sqlplus test/test@test
create table tmp(name varchar2(10),no number(3));
alter system switch logfile;
insert into tmp values('liming',112);
update tmp set no=200;
commit;
alter system switch logfile;
delete from tmp;
alter system switch logfile;
通过上面的操作会产生三个连续的归档日志文件。
二、建立字典文件
1。修改参数文件,添加参数:UTL_FILE_DIR=D:oraclelogmnr
sqlplus /nolog
conn / as sysdba
create pfile from spfile;
修改文件INIT D:oracleora92databaseora9i.ORA,添加参数:UTL_FILE_DIR=D:oraclelogmnr
shutdown immediate
startup pfile=D:oracleora92databaseora9i.ORA;
create spfile from pfile;
shutdown immediate
startup spfile=D:oracleora92databaseSPFILEORA9I.ORA
目录logmnr必须事先手工建立,该目录用于存放产生的字典文件,目录名称可以自定。
2。建立字典文件
BEGIN
dbms_logmnr_d.build(dictionary_filename=>'dict.ora',dictionary_location=>'D:oraclelogmnr');
END;
/
注意:参数dictionary_filename用以指定字典文件的文件名;参数 dictionary_location用于指定存放字典文件所在的目录,该目录必须与初始化参数UTL_FILE_DIR的值一致。如果指定的字典文件名dict.ora已经存在,则应在执行此操作前将其彻底删除(从垃圾箱中删除),否则执行该过程将失败。
三、建立日志分析列表
1。建立日志分析列表
sqlplus /nolog
conn / as sysdba;
BEGIN
dbms_logmnr.add_logfile(
options=>dbms_logmnr.new,
logfilename=>'D:oracleoradataora9iarchive1_41.DBF');
END;
/
2.添加分析日志
BEGIN
dbms_logmnr.add_logfile(options=>dbms_logmnr.addfile,logfilename=>'D:oracleoradataora9iarchive1_42.DBF');
END;
/
2。查看日志分析列表中待分析的日志文件
select filename from v$logmnr_logs;
四、启动LogMiner执行分析
1.分析重做日志和归档日志
BEGIN
dbms_logmnr.start_logmnr(dictfilename=>'D:oraclelogmnrdict.ora',starttime=>to_date('2006-02-9:11:13:40','YYYY- MM-DD:HH24:MI:SS'),endtime=>to_date('2006-02-9:11:24:55','YYYY-MM-DD:HH24:MI:SS'));
END;
/
注意:此过程能否执行成功的关键是给出的starttime(起始时间)和endtime(终止时间)应在一个有效的范围内。特别是终止时间,应小于或等于归档日志的建立时间;如果大于归档日志的建立时间,则不能执行分析过程。分析多个归档日志时,这些归档日志最好是连续的。
2。查看日志分析结果
select operation,sql_redo,sql_undo from v$logmnr_contents where seg_name='TMP';
OPERATION SQL_REDO SQL_UNDO
----------- --------------------- --------------------------
INSERT insert into SYS.TMP…… delete from SYS.TMP ……
UPDATE update SYS.TMP set NO …… update SYS.TMP set ……
DELETE delete from SYS.TMP …… insert into SYS.TMP ……
根据需要可以从动态性能视图v$logmnr_contents中获取更多的有用信息。
3。结束分析
execute dbms_logmnr.end_logmnr;
alter database open;