oracle中Logmnr如何抽取日志数据

62次阅读
没有评论

共计 3608 个字符,预计需要花费 10 分钟才能阅读完成。

这篇文章将为大家详细讲解有关 oracle 中 Logmnr 如何抽取日志数据,丸趣 TV 小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

Logmnr,dba 在事后需要审计或者查询一个误操作产生的原因,甚至是找回误操作的数据,这时,flashback 不一定能帮上你的忙,因为时间可能过去很久了,还有可能是一个 DDL 操作,而你想知道是由哪个用户发出来的,那么,只要还有这个时间的归档日志存在,就可以利用 Logmnr 来分析归档日志。

1、利用 logmnr,可以做以下事情

(1)、查明数据库的变更记录,或者是进行变化分析,如有的用户怀疑自己的应用有问题,产生了大量的失误,可以用 logmnr 来分析这些事务,看看到底发生了些什么事情。

(2)、侦察并更正用户的误操作,如有的用户一不小心误删除了某个表,但是并不承认,这个时候就可利用 logmnr 来分析谁执行的 DML 或者是 DDL 操作。

(3)、找回失去的数据,当不能使用 flashback 或使用 flashback 受限的时候,我们可以考虑利用 logmnr 来找回数据,这时候,只要有归档日志即可。

注意:logminer 分析出来的元数据,如 update table set a=a+10 实际影响了 1000 条数据,那么 logmnr 怎返回 1000 条 undo 语句。

2、logmnr 包含的内容与数据字典

logminer 包含两个 PL/SQL 包和几个视图

dbms_logmnr_d 包:用于提取字典信息到外部平面文件或者联机日志中去。

dbms_logmnr 包:包含三个过程。

(1)add_logfile: 用来添加、删除用于分析的日志文件

(2)start_logmnr: 用于开启日志分析,而且,可以开启很多不同的分析选项,如只分析提交信息 commited_data_only 等。

(3)end_logmnr: 用于开启日志分析,而且,可以开启很多不同的分析选项,如只分析提交信息 commited_data_only 等。

如果普通用户想使用以上的包,必须先在 sys 中授权才能使用,如:

grant execute on dbms_logmnr to piner;

那么使用的时候,最好也带上前缀 sys。如 sys.dbms_logmnr。

与 logminer 相关的字典如下:

v$logmnr_dirctionary:logminer 可能使用的数据字典信息,因 logmnr 可以有多个字典文件,该视图用于显示这方面的信息。

v$logmnr_parameters:当前 logminer 所设定的参数信息。

v$logmnr_logs:当前用于分析的日志列表。

v$logmnr_contents:日志分析结果。

3、Logmnr 的分析过程

(1)切换日志和建立表、并执行插入删除数据操作。

alter system archive log current;

create table test(a int);

insert into test values(1);

insert into test values(2);

insert into test values(3);

delete from test;

commit;

alter system archive log current;

(2)然后找到刚才两次切换之间的包含这些操作的归档日志。

切换的归档日志如下:/home/oracle/product/flash_recovery_area/ORCL/archivelog/2012_09_22/o1_mf_1_54_8

5tondqb_.arc

然后在线分析这个过程。

1)添加日志并分析日志

exec sys.dbms_logmnr.add_logfile(logfilename= /home/oracle/product/flash_recovery_area/ORCL/archivelog/2012_09_22/o1_mf_1_54_85tondqb_.arc ,options= sys.dbms_logmnr.new);

exec sys.dbms_logmnr.start_logmnr(options= sys.dbms_logmnr.dict_from_online_catalog);

一般如果还有其他的日志,还可以如下添加:

exec sys.dbms_logmnr.add_logfile(logfilename= /home/oracle/product/flash_recovery_area/ORCL/archivelog/2012_09_22/o1_mf_1_54_85tondqb_.arc

(3)现在就可以查看分析结果了

select t.scn,t.timestamp,t.seg_owner,t.operation,t.sql_undo,t.sql_undo from v$logmnr_contents t where t.seg_name= TEST

select t.scn,t.timestamp,t.seg_owner,t.operation,t.sql_undo from v$logmnr_contents t where t.seg_name= TEST

SCN TIMESTAMP   SEG_OWNER  OPERATION  SQL_UNDO

——– ———– ———- ———- ——————————————————————————–

1367841 2012/9/22 1 CAIWENCAN  DDL

1367848 2012/9/22 1 CAIWENCAN  INSERT     delete from CAIWENCAN . TEST where A = 1 and ROWID = AAAM4wAAEAAAAG+AAA

1367848 2012/9/22 1 CAIWENCAN  INSERT     delete from CAIWENCAN . TEST where A = 2 and ROWID = AAAM4wAAEAAAAG+AAB

1367848 2012/9/22 1 CAIWENCAN  INSERT     delete from CAIWENCAN . TEST where A = 3 and ROWID = AAAM4wAAEAAAAG+AAC

1367859 2012/9/22 1 CAIWENCAN  DELETE     insert into CAIWENCAN . TEST (A) values (1

1367859 2012/9/22 1 CAIWENCAN  DELETE     insert into CAIWENCAN . TEST (A) values (2

1367859 2012/9/22 1 CAIWENCAN  DELETE     insert into CAIWENCAN . TEST (A) values (3

其中,SEG_OWNER 是操作人,operation 是操作方式,sql_undo 是操作语句。

这里的 v$logmnr_contents 视图信息是 session 级别的,如果需要保留信息,需要创建临时存储

create table logmnr_contents as select * from v$logmnr_contents;

(4)分析完成以后,可以清空 session 内存信息。

exec sys.dbms_logmnr.end_logmnr;

(5)如果要恢复,可以编写 pl/sql 进行回滚恢复。

declare

mysql varchar2(4000);

num number :=0;

begin

from c_tmp in (select sql_undo  from logmnr_contents where operation= DELETE) loop

mysql:=replace(c_tmp.sql, : ,

execute immediate mysql;

num:=num+1;

if mod(num,1000)=0 then

commit;

end if;

end loop;

commit;

exception

when others then

…. 异常处理

end;

(6)如果要更改 logmnr 的特定表空间,

这里是更改空间为 users 空间。

exec sys.dbms_logmnr_d.set_tablespace(users

v$logmnr_dirctionary:logminer 可能使用的数据字典信息,因 logmnr 可以有多个字典文件,该视图用于显示这方面的信息。

v$logmnr_parameters:当前 logminer 所设定的参数信息。

v$logmnr_logs:当前用于分析的日志列表。

v$logmnr_contents:日志分析结果。

关于“oracle 中 Logmnr 如何抽取日志数据”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-20发表,共计3608字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)