使用logminer分析oracle日志

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:
平台:redhat linux as5oracle10glogminer

1、简单介绍:

logmineroracle提供的一个package。它主要用于分析log file文件(包括online redo log file,archived log file,log file中的信息转存到v$logmnr_contents中,从而获取对oracle数据库操作的历史信息。使用logminers可以分析特定时间段数据库数据作了些什么变更,执行了哪些语句.
本文首先介绍了redologarchive log 及它们之间的关系,然后使用logminer分析保存在redologarchivelog中的SQL语句

2.Redologarchived log

redo log fileLGWR进程从Oracle实例中的redo log buffer写入的,用户对数据库的操用先写到redolog然后才写到实体文件,所以通过查看redolog就能知道用户都做了些什么操作,默认oracle有三组redolog循环使用。也就是说一个redo log file(group) 写满后,才写下一个,当然也可以手动切换。当第三个也写满后再回头写第一个。
查看当前redolog状态
SQL> select group#,members,status from v$log;
    GROUP#    MEMBERS     STATUS
---------- ---------- ----------------
         1                  ACTIVE
         2          1         CURRENT
         3          1         INACTIVE
手工切换
SQL> alter system switch logfile;
SQL> select group#,members,status from v$log;
 
    GROUP#    MEMBERS    STATUS
---------- ---------- ----------------
         1          1       INACTIVE
         2          1       ACTIVE
         3                CURRENT
现在使用第三组
archive log是当数据库运行在归档模式下时,一个redo log file(group)写满后,由ARCn进程将重做日志的内容备份到归档日志文件下,然后这个redo log file(group)才能被下一次使用。上面提到redolog三组循环使用,所以它的大小可以确定,而归档日志是redologCP,它的大小不断的增长,所以我们要定期把归档日志取出来,以免硬盘被占满。
查看当前的归档状态
SQL> archive log list
Database log mode              Archive Mode
Automatic archival                Enabled
Archive destination                /u01/oradata/denver/archive
Oldest online log sequence          16
Next log sequence to archive         18
Current log sequence               18
SQL> ! ls /u01/oradata/denver/archive
1_10.dbf  1_12.dbf  1_14.dbf  1_16.dbf  1_1.dbf  1_3.dbf  1_5.dbf  1_7.dbf  1_9.dbf
1_11.dbf  1_13.dbf  1_15.dbf  1_17.dbf  1_2.dbf  1_4.dbf  1_6.dbf  1_8.dbf
现在为归档模式,当前日志序列为18,到归档日录下可看到有17个归档文件,当第18个归档后,系统会自动建第18个归档文件,
如下,手工切换redolog,从而触发arch进程
SQL> alter system switch logfile;
System altered.
 
SQL> archive log list
Database log mode              Archive Mode
Automatic archival                Enabled
Archive destination                /u01/oradata/denver/archive
Oldest online log sequence          17
Next log sequence to archive        19
Current log sequence              19
SQL> ! ls /u01/oradata/denver/archive
1_10.dbf  1_12.dbf  1_14.dbf  1_16.dbf  1_18.dbf  1_2.dbf  1_4.dbf  1_6.dbf  1_8.dbf
1_11.dbf  1_13.dbf  1_15.dbf  1_17.dbf  1_1.dbf   1_3.dbf  1_5.dbf  1_7.dbf  1_9.dbf

3.使用logminer

下面以”y”用户对表”t”执行update操作为例,查看如何使用logminer分析DML操作
原理:当用户对表操作后,操作过程先记录在当前使用的redolog中,通过分析当前redolog可以查看用户都作了什么操作,或操作完成后手动切换redolog,此时redolog复制到archivelog中,通过分析archivelog也可以查到用户所做的操作
本文介绍从archivelog中查看用户做过的操作
表如下所示
SQL> select * from t;
         I          V
---------- --------- ---------------- -
         1          2
         3          4
        15         10
1.在系统上建一个目录utlfile
[oracle@oracle ~]$ pwd
/home/oracle
[oracle@oracle ~]$ mkdir utlfile
2.设置utl_file_dir参数
SQL> alter system set utl_file_dir='/home/oracle/utlfile' scope=spfile;
SQL> shutdown immediate
SQL> startup
3.生成数据字典,
如果oracle没装logminers,先安装
SQL> @$ORACLE_HOME/rdbms/admin/dbmslm.sql
Package created.
Grant succeeded.
SQL> @$ORACLE_HOME/rdbms/admin/dbmslmd.sql
Package created.
生成数据字典
SQL> execute dbms_logmnr_d.build('dirt.ora','/home/oracle/utlfile',dbms_logmnr_d.store_in_flat_file)
PL/SQL procedure successfully completed.
4.对表进行update(其它操作也可以)
SQL> update t set i=100 where v=2;
SQL> update t set v=0 where i=15;
SQL> commit;
SQL> select * from t;
         I          V
---------- ----------
       100          2
         3          4
        15          0
5.将要分析的日志文件加入要分析的log list
现在切换logfile然后我们分析最近生成的archivelog
SQL>  alter system switch logfile;
SQL> ! ls /u01/oradata/denver/archive
1_10.dbf  1_13.dbf  1_16.dbf  1_19.dbf  1_3.dbf  1_6.dbf  1_9.dbf
1_11.dbf  1_14.dbf  1_17.dbf  1_1.dbf   1_4.dbf  1_7.dbf
1_12.dbf  1_15.dbf  1_18.dbf  1_2.dbf   1_5.dbf  1_8.dbf
1_19.dbf加入到log list
SQL> execute dbms_logmnr.add_logfile('/u01/oradata/denver/archive/1_19.dbf',dbms_logmnr.new);
 
PL/SQL procedure successfully completed.
# 如果要添加更多的日志
execute dbms_logmnr.add_logfile('/u01/oradata/denver/archive/1_19.dbf',dbms_logmnr. addfile );
# 查看添加的日志
SQL> select * from v$logmnr_logs;
6.执行分析:
SQL> execute dbms_logmnr.start_logmnr(dictfilename=>'/home/oracle/utlfile/dirt.ora')
 
PL/SQL procedure successfully completed.
7.查询
SQL> col seg_name format a10
SQL> col sql_redo format a55
SQL> select seg_name,sql_redo,timestamp from v$logmnr_contents where seg_name='T';
 
SEG_NAME   SQL_REDO                                                TIMESTAMP
---------- ------------------------------------------------------- --------- -----------------------------------------------
T          update "SYS"."T" set "I" = '100' where "I" = '1' and RO                 05-MAY-09
           WID = 'AAAHwwAABAAALmaAAA';
 
T          update "SYS"."T" set "V" = '0' where "V" = '10' and ROW               05-MAY-09
           ID = 'AAAHwwAABAAALmaAAC';
可见对表T的操作被找出来了,如果是用户误操作就可以根据查出来的语名反推出去了
8. 关闭
当查找完成后应当把v$logmnr_contents关闭,否定它一直保存在内存中,浪费资源
SQL> execute dbms_logmnr.end_logmnr;
 
PL/SQL procedure successfully completed.
 




本文转自 vfast_chenxy 51CTO博客,原文链接:http://blog.51cto.com/chenxy/170340,如需转载请自行联系原作者

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
5天前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的控制文件与归档日志文件
本文介绍了Oracle数据库中的控制文件和归档日志文件。控制文件记录了数据库的物理结构信息,如数据库名、数据文件和联机日志文件的位置等。为了保护数据库,通常会进行控制文件的多路复用。归档日志文件是联机重做日志文件的副本,用于记录数据库的变更历史。文章还提供了相关SQL语句,帮助查看和设置数据库的日志模式。
【赵渝强老师】Oracle的控制文件与归档日志文件
|
9天前
|
存储 SQL 监控
|
9天前
|
运维 监控 安全
|
5天前
|
Oracle 关系型数据库 数据库
【赵渝强老师】Oracle的参数文件与告警日志文件
本文介绍了Oracle数据库的参数文件和告警日志文件。参数文件分为初始化参数文件(PFile)和服务器端参数文件(SPFile),在数据库启动时读取并分配资源。告警日志文件记录了数据库的重要活动、错误和警告信息,帮助诊断问题。文中还提供了相关视频讲解和示例代码。
|
12天前
|
监控 关系型数据库 MySQL
分析慢查询日志
【10月更文挑战第29天】分析慢查询日志
28 3
|
12天前
|
监控 关系型数据库 数据库
怎样分析慢查询日志?
【10月更文挑战第29天】怎样分析慢查询日志?
29 2
|
1月前
|
存储 缓存 关系型数据库
MySQL事务日志-Redo Log工作原理分析
事务的隔离性和原子性分别通过锁和事务日志实现,而持久性则依赖于事务日志中的`Redo Log`。在MySQL中,`Redo Log`确保已提交事务的数据能持久保存,即使系统崩溃也能通过重做日志恢复数据。其工作原理是记录数据在内存中的更改,待事务提交时写入磁盘。此外,`Redo Log`采用简单的物理日志格式和高效的顺序IO,确保快速提交。通过不同的落盘策略,可在性能和安全性之间做出权衡。
1620 14
|
5天前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的联机重做日志文件与数据写入过程
在Oracle数据库中,联机重做日志文件记录了数据库的变化,用于实例恢复。每个数据库有多组联机重做日志,每组建议至少有两个成员。通过SQL语句可查看日志文件信息。视频讲解和示意图进一步解释了这一过程。
|
10天前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
111 30
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
1月前
|
XML JSON Java
Logback 与 log4j2 性能对比:谁才是日志框架的性能王者?
【10月更文挑战第5天】在Java开发中,日志框架是不可或缺的工具,它们帮助我们记录系统运行时的信息、警告和错误,对于开发人员来说至关重要。在众多日志框架中,Logback和log4j2以其卓越的性能和丰富的功能脱颖而出,成为开发者们的首选。本文将深入探讨Logback与log4j2在性能方面的对比,通过详细的分析和实例,帮助大家理解两者之间的性能差异,以便在实际项目中做出更明智的选择。
213 3

推荐镜像

更多