使用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日志并进行多维度分析。
目录
相关文章
|
2天前
|
监控 安全 Linux
启用Linux防火墙日志记录和分析功能
为iptables启用日志记录对于监控进出流量至关重要
|
1月前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的控制文件与归档日志文件
本文介绍了Oracle数据库中的控制文件和归档日志文件。控制文件记录了数据库的物理结构信息,如数据库名、数据文件和联机日志文件的位置等。为了保护数据库,通常会进行控制文件的多路复用。归档日志文件是联机重做日志文件的副本,用于记录数据库的变更历史。文章还提供了相关SQL语句,帮助查看和设置数据库的日志模式。
【赵渝强老师】Oracle的控制文件与归档日志文件
|
23天前
|
监控 应用服务中间件 定位技术
要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
|
1月前
|
存储 SQL 监控
|
1月前
|
运维 监控 安全
|
1月前
|
Oracle 关系型数据库 数据库
【赵渝强老师】Oracle的参数文件与告警日志文件
本文介绍了Oracle数据库的参数文件和告警日志文件。参数文件分为初始化参数文件(PFile)和服务器端参数文件(SPFile),在数据库启动时读取并分配资源。告警日志文件记录了数据库的重要活动、错误和警告信息,帮助诊断问题。文中还提供了相关视频讲解和示例代码。
|
1月前
|
监控 关系型数据库 数据库
怎样分析慢查询日志?
【10月更文挑战第29天】怎样分析慢查询日志?
48 2
|
1月前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的联机重做日志文件与数据写入过程
在Oracle数据库中,联机重做日志文件记录了数据库的变化,用于实例恢复。每个数据库有多组联机重做日志,每组建议至少有两个成员。通过SQL语句可查看日志文件信息。视频讲解和示意图进一步解释了这一过程。
|
2月前
|
存储 Oracle 关系型数据库
Oracle数据库的应用场景有哪些?
【10月更文挑战第15天】Oracle数据库的应用场景有哪些?
200 64
|
16天前
|
存储 Oracle 关系型数据库
数据库数据恢复—ORACLE常见故障的数据恢复方案
Oracle数据库常见故障表现: 1、ORACLE数据库无法启动或无法正常工作。 2、ORACLE ASM存储破坏。 3、ORACLE数据文件丢失。 4、ORACLE数据文件部分损坏。 5、ORACLE DUMP文件损坏。
63 11

热门文章

最新文章

推荐镜像

更多