logmnr分析在线日志与归档日志

LOGMNR解析在线日志文件:

H:/>sqlplus / as sysdba
SQL>
/*该命令用于启动supplemental logging功能,以使Logminer获得更加详细的信息。如果该功能未启用,Logminer解析结果中的username,session_info等信息都被置为‘UNKNOWN’,这样我们就无从得知操作是由哪个用户执行的了。另外,也可能导致某些操作无法解析出来,比如在测试中我发现如果该功能未启用,而我更新的表是一张未设置主键的表,那么在解析结果中我始终找不到对应的UPDATE操作。欲禁用此项功能:alter database drop supplemental log data;*/
SQL> shutdown immediate
SQL> startup
SQL>
alter system switch logfile;
/*将日志切换到下一组以便在解析之后可以使用时间条件进行过滤,以免日志记录太多看花眼*/
SQL> exit

/*以下执行一些简单的操作,这些操作会被记录到切换过后的Redo日志中*/
H:/>sqlplus morven3/morven3
SQL> create table tab1(fid number,fval varchar(20));
SQL> insert into tab1 values(1,'abc');
SQL> commit;
SQL> update tab1 set fval='xyz' where fid=1;
SQL> commit;
SQL> delete from tab1;
SQL> commit;
SQL> exit

H:/>sqlplus / as sysdba
SQL>
select * from v$log where status='CURRENT';
/*查找当前使用的日志的组号*/
SQL>
SELECT MEMBER from v$logfile where group#=3;
/*根据查到的当前日志组号,查找日志文件,得到日志文件路径,如“C:/DATABASE/ORADATA/SIDORCL/REDO03.LOG”*/
SQL>
exec dbms_logmnr.add_logfile('C:/DATABASE/ORADATA/SIDORCL/REDO03.LOG',dbms_logmnr.new);
/*Logminer指定要解析的日志文件*/
SQL>
exec dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);
/*Logminer指定使用当前数据库的数据字典进行解析(只有根据数据字典才能将对象ID解析成对象名称,增加可读性)*/
SQL>
select t.* from v$logmnr_contents t where timestamp >sysdate-10/24/60 and username='MORVEN3';
/*通过上面几个步骤,动态视图v$logmnr_contents就有了解析出来的日志记录。这里你可以简地通过时间过滤一下,比如像上面的查找10分钟内的操作,当然10分钟内可能还是有不少日志记录,你可以加其它的过滤条件,比如用户名。根据上面的语句,我们查到13条记录,可以看“SQL_REDO”字段,这些记录分别是:
create table tab1(fid number,fval varchar(20));
insert into "MORVEN3"."TAB1"("FID","FVAL") values ('1','abc');
insert into "MORVEN3"."TAB1"("FID","FVAL") values ('1','abc');
insert into "MORVEN3"."TAB1"("FID","FVAL") values ('1','abc');
insert into "MORVEN3"."TAB1"("FID","FVAL") values ('1','abc');
update "MORVEN3"."TAB1" set "FVAL" = 'xyz' where "FVAL" = 'abc' and ROWID = 'AAARJ1AAFAAAACFAAA';
update "MORVEN3"."TAB1" set "FVAL" = 'xyz' where "FVAL" = 'abc' and ROWID = 'AAARJ1AAFAAAACFAAB';
update "MORVEN3"."TAB1" set "FVAL" = 'xyz' where "FVAL" = 'abc' and ROWID = 'AAARJ1AAFAAAACFAAC';
update "MORVEN3"."TAB1" set "FVAL" = 'xyz' where "FVAL" = 'abc' and ROWID = 'AAARJ1AAFAAAACFAAD';
delete from "MORVEN3"."TAB1" where "FID" = '1' and "FVAL" = 'xyz' and ROWID = 'AAARJ1AAFAAAACFAAA';
delete from "MORVEN3"."TAB1" where "FID" = '1' and "FVAL" = 'xyz' and ROWID = 'AAARJ1AAFAAAACFAAB';
delete from "MORVEN3"."TAB1" where "FID" = '1' and "FVAL" = 'xyz' and ROWID = 'AAARJ1AAFAAAACFAAC';
delete from "MORVEN3"."TAB1" where "FID" = '1' and "FVAL" = 'xyz' and ROWID = 'AAARJ1AAFAAAACFAAD';
另外,通过“SESSION_INFO”字段,我们还能定位出具体是哪个用户在哪台机器上执行的操作,我们可以看一个“SESSION_INFO”的例子:
login_username=MORVEN3 client_info= OS_username=domain1/hmy Machine_name=domain1/EV001EEC1FF000 OS_terminal=EV001EEC1FF000 OS_process_id=4064:2560 OS_program_name=sqlplus.exe
v$logmnr_contents视图中还有其它一系列的字段,SEG_TYPE_NAME,TABLE_SPACE,SQL_UNDO等等*/
SQL>
exec dbms_logmnr.end_logmnr
/*退出Logminer*/

 

LOGMNR解析归档日志文件:

一、生成归档日志:

SQL>alter system switch logfile;

SQL> insert into mm values(1);

已创建 1 行。

SQL> commit;

提交完成。

SQL>alter system switch logfile;

SQL> insert into mm values(2);

已创建 1 行。

SQL> commit;

提交完成。

SQL>alter system switch logfile;

SQL> insert into mm values(3);

已创建 1 行。

SQL> commit;

SQL>alter system switch logfile;

字典文件用于存放表及对象ID号之间的对应关系。当使用字典文件时,它会在表名和对象ID号之间建立一一对应的关系。因此需要注意,如果用户建立了新表之后,并且将来可能会对该表进行日志分析,那么就需要重新建立字典文件,以将其对象名及对象ID号存放到字典文件中。

1.修改参数文件,添加参数:UTL_FILE_DIR=C:/logmnr

目录logmnr必须事先手工建立,该目录用于存放产生的字典文件,目录名称可以自定。

 

   alter system set UTL_FILE_DIR='C:/logmnr' scope=spfile; ---从v$parameter的ISSES_MODIFIABLE确定此参数需重启才能生效

   shutdown immediate;

   startup;

2.建立字典文件

       exec  dbms_logmnr_d.build(dictionary_filename=>'dict.ora', dictionary_location=>'c:/logmnr');

         注意:参数dictionary_filename用以指定字典文件的文件名;参数 dictionary_location用于指定存放字典文件所在的目录,该目录必须与初始化参数UTL_FILE_DIR的值一致。如果指定的字典文件名dict.ora已经存在,则应在执行此操作前将其彻底删除(从垃圾箱中删除),否则执行该过程将失败。

三、建立日志分析列表 :

SQL> exec dbms_logmnr.add_logfile('c:/logmnr/test1.arc',dbms_logmnr.new);

PL/SQL 过程已成功完成。

 

SQL> exec dbms_logmnr.add_logfile('c:/logmnr/test2.arc',dbms_logmnr.addfile);

PL/SQL 过程已成功完成。

 

SQL> exec dbms_logmnr.add_logfile('c:/logmnr/test3.arc',dbms_logmnr.addfile);

PL/SQL 过程已成功完成。

 

SQL> exec dbms_logmnr.add_logfile('F:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO02.LOG',dbms_logmnr.addfile);  ---此处可以添加在线日志文件的分析

PL/SQL 过程已成功完成。

 

SQL> select filename from v$logmnr_logs;

FILENAME
-----------------------------------------------------------------
c:/logmnr/test1.arc
c:/logmnr/test2.arc
c:/logmnr/test3.arc


四、启动LogMiner执行分析 :

1、添加分析目录:

 exec dbms_logmnr.start_logmnr(dictfilename=>'c:/logmnr/dict.ora');

2、查看日志分析结果:

SQL> select operation,sql_redo,sql_undo
  2 from v$logmnr_contents

  3 where seg_name='MM';

 

 

本文整理自网络http://9host.cn/oracle/200742218400613143.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值