使用LogMiner分析oracle的redo日志和归档

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

  Oracle LogMiner 是Oracle公司从产品8i以后提供的一个实际非常有用的分析工具,使用该工具可以轻松获得Oracle 在线/归档日志文件中的具体内容,特别是该工具可以分析出所有对于数据库操作的DML和DDL语句。该工具特别适用于调试、审计或者回退某个特定的事务。

  LogMiner分析工具实际上是由一组PL/SQL包和一些动态视图(Oracle8i内置包的一部分)组成,它作为Oracle数据库的一部分来发布是8i产品提供的一个完全免费的工具。但该工具和其他Oracle内建工具相比使用起来显得有些复杂,主要原因是该工具没有提供任何的图形用户界面(GUI)。

1、安装LogMiner

在使用LogMiner之前需要确认Oracle是否带有进行LogMiner分析包,一般来说Windows操作系统Oracle10g以上都默认包含。如果不能确认,可以DBA身份登录系统,查看系统中是否存在运行LogMiner所需要的dbms_logmnr、dbms_logmnr_d包,如果没有需要安装LogMiner工具,必须首先要运行下面这样两个脚本:

a.$ORACLE_HOME/rdbms/admin/dbmslm.sql

b.$ORACLE_HOME/rdbms/admin/dbmslmd.sql

这两个脚本必须均以DBA用户身份运行。其中第一个脚本用来创建DBMS_LOGMNR包,该包用来分析日志文件。第二个脚本用来创建DBMS_LOGMNR_D包,该包用来创建数据字典文件。

2、修改数据库参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
--数据库版本
sys@ORCL> select  from  v$version;
 
BANNER
-----------------------------------------------------------
CORE    11.2.0.4.0  Production
TNS  for  Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production
--为数据库添加最小附加日志
sys@ORCL> alter  database  add  supplemental log data;
 
Database  altered.
 
sys@ORCL> select  supplemental_log_data_min  from  v$ database ;
 
SUPPLEMENTAL_LOG_DATA_MI
------------------------
YES
--设置utl_file_dir参数
sys@ORCL> alter  system  set  utl_file_dir= '/home/oracle/logminer'  scope=spfile;
 
System altered.
--重启数据库
sys@ORCL>shutdown immediate
sys@ORCL>startup
sys@ORCL>show parameter utl_file_dir
 
NAME                      TYPE                 VALUE
------------------------------------ --------------------------------- ------------------------------
utl_file_dir                 string                   /home/oracle/logminer

3、准备测试数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
sys@ORCL>conn zx/zx
Connected.
zx@ORCL> create  table  log_miner (id number, name  varchar2(10));
 
Table  created.
 
zx@ORCL> insert  into  log_miner  values (1, 'zx' );
 
1 row created.
 
zx@ORCL> insert  into  log_miner  values (1, 'lx' );
 
1 row created.
 
zx@ORCL> insert  into  log_miner  values (1, 'xx' );
 
1 row created.
 
zx@ORCL> commit ;
 
Commit  complete.

4、创建数据字典

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
zx@ORCL>conn /  as  sysdba
Connected.
sys@ORCL> desc  dbms_logmnr_d
PROCEDURE  BUILD
  Argument  Name             Type             In / Out  Default ?
  ------------------------------ ----------------------- ------ --------
  DICTIONARY_FILENAME       VARCHAR2         IN      DEFAULT
  DICTIONARY_LOCATION       VARCHAR2         IN      DEFAULT
  OPTIONS           NUMBER           IN      DEFAULT
PROCEDURE  SET_TABLESPACE
  Argument  Name             Type             In / Out  Default ?
  ------------------------------ ----------------------- ------ --------
  NEW_TABLESPACE       VARCHAR2         IN
 
sys@ORCL> exec  dbms_logmnr_d.build(DICTIONARY_FILENAME=> 'dictionary.ora' ,DICTIONARY_LOCATION=> '/home/oracle/logminer' );
LogMnr Dictionary  Procedure  started
LogMnr Dictionary File Opened
Procedure  executed successfully - LogMnr Dictionary Created
 
PL/SQL  procedure  successfully completed.
 
sys@ORCL>!ls -l /home/oracle/logminer/dictionary.ora
-rw-r --r-- 1 oracle oinstall 41483316 Nov 11 21:08 /home/oracle/logminer/dictionary.ora

LogMiner工具实际上是由两个新的PL/SQL内建包((DBMS_LOGMNR 和 DBMS_ LOGMNR_D)和四个V$动态性能视图(视图是在利用过程DBMS_LOGMNR.START_LOGMNR启动LogMiner时创建)组成。在使用LogMiner工具分析redo log文件之前,可以使用DBMS_LOGMNR_D 包将数据字典导出为一个文本文件。该字典文件是可选的,但是如果没有它,LogMiner解释出来的语句中关于数据字典中的部分(如表名、列名等)和数值都将是16进制的形式,我们是无法直接理解的。例如,下面的sql语句:

INSERT INTO dm_dj_swry (rydm, rymc) VALUES (00005, '张三'); 

LogMiner解释出来的结果将是下面这个样子:

insert into Object#308(col#1, col#2) values (hextoraw('c30rte567e436'), hextoraw('4a6f686e20446f65')); 

创建数据字典的目的就是让LogMiner引用涉及到内部数据字典中的部分时为他们实际的名字,而不是系统内部的16进制。数据字典文件是一个文本文件,使用包DBMS_LOGMNR_D来创建。如果我们要分析的数据库中的表有变化,影响到库的数据字典也发生变化,这时就需要重新创建该字典文件。另外一种情况是在分析另外一个数据库文件的重作日志时,也必须要重新生成一遍被分析数据库的数据字典文件。

5、确认当前处理联机状态的redo日志

1
2
3
4
5
6
7
8
9
10
11
12
13
14
sys@ORCL> select  group #,status  from  v$log;
 
     GROUP # STATUS
---------- ------------------------------------------------
      1 INACTIVE
      CURRENT
      3 INACTIVE
sys@ORCL> select  group #,member  from  v$logfile;
 
     GROUP # MEMBER
---------- ----------------------------------------------------------------------------------------------------
      3 /u02/app/oracle/oradata/orcl/redo03.log
      2 /u02/app/oracle/oradata/orcl/redo02.log
      1 /u02/app/oracle/oradata/orcl/redo01.log

可以看出redo02处于current状态

6、加入需要分析的日志

1
2
3
4
5
6
--第一个日志文件使用dbms_logmnr.new
sys@ORCL> exec  dbms_logmnr.add_logfile(LOGFILENAME=> '/u02/app/oracle/oradata/orcl/redo02.log' ,OPTIONS=>dbms_logmnr.new);
 
PL/SQL  procedure  successfully completed.
--如果需要加入其他的日志使用如下语句
exec  dbms_logmnr.add_logfile(LOGFILENAME=> '/u02/app/oracle/oradata/orcl/redo03.log' ,OPTIONS=>dbms_logmnr.addfile);

7、使用LogMiner进行分析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
sys@ORCL> exec  dbms_logmnr.start_logmnr(DICTFILENAME=> '/home/oracle/logminer/dictionary.ora' );
 
PL/SQL  procedure  successfully completed.
 
sys@ORCL>col seg_name  for  a15
sys@ORCL>col seg_owner  for  a15
sys@ORCL>col operation  for  a20
sys@ORCL>col sql_redo  for  a180
sys@ORCL> set  linesize 200
sys@ORCL> select  seg_owner,seg_name,operation,sql_redo  from  v$logmnr_contents  where  seg_owner= 'ZX'  and  seg_name= 'LOG_MINER' ;
 
SEG_OWNER   SEG_NAME    OPERATION        SQL_REDO
--------------- --------------- -------------------- --------------------------------------------------------------------------------
ZX      LOG_MINER   DDL           create  table  log_miner (id number, name  varchar2(10));
ZX      LOG_MINER    INSERT            insert  into  "ZX" . "LOG_MINER" ( "ID" , "NAME" values  ( '1' , 'zx' );
ZX      LOG_MINER    INSERT            insert  into  "ZX" . "LOG_MINER" ( "ID" , "NAME" values  ( '1' , 'lx' );
ZX      LOG_MINER    INSERT            insert  into  "ZX" . "LOG_MINER" ( "ID" , "NAME" values  ( '1' , 'xx' );

以上为分析在线redo日志的过程,分析归档日志的步骤同样,只是在添加日志文件的时候把在线redo日志换为归档日志即可。归档日志也可以传输到其他数据库服务器上进行数据分析,但分析时需要使用源库的字典文件。

LogMiner使用注意事项:

  1. 源库与Mining数据库必须运行在同样的硬件平台上,windows的不可以传到Linux上进行分析

  2. Mining数据库的版本大于等于源库的数据库版本

  3. Mining数据库的字符集需要与源库一致或是源库的超集

参考文档:http://www.cnblogs.com/shishanyuan/p/3140440.html

官方文档:http://docs.oracle.com/cd/E11882_01/server.112/e22490/logminer.htm#SUTIL1557




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




相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
1月前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的控制文件与归档日志文件
本文介绍了Oracle数据库中的控制文件和归档日志文件。控制文件记录了数据库的物理结构信息,如数据库名、数据文件和联机日志文件的位置等。为了保护数据库,通常会进行控制文件的多路复用。归档日志文件是联机重做日志文件的副本,用于记录数据库的变更历史。文章还提供了相关SQL语句,帮助查看和设置数据库的日志模式。
【赵渝强老师】Oracle的控制文件与归档日志文件
|
1月前
|
Oracle 关系型数据库 数据库
【赵渝强老师】Oracle的参数文件与告警日志文件
本文介绍了Oracle数据库的参数文件和告警日志文件。参数文件分为初始化参数文件(PFile)和服务器端参数文件(SPFile),在数据库启动时读取并分配资源。告警日志文件记录了数据库的重要活动、错误和警告信息,帮助诊断问题。文中还提供了相关视频讲解和示例代码。
|
1月前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的联机重做日志文件与数据写入过程
在Oracle数据库中,联机重做日志文件记录了数据库的变化,用于实例恢复。每个数据库有多组联机重做日志,每组建议至少有两个成员。通过SQL语句可查看日志文件信息。视频讲解和示意图进一步解释了这一过程。
|
1月前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
346 30
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
14天前
|
监控 安全 Apache
什么是Apache日志?为什么Apache日志分析很重要?
Apache是全球广泛使用的Web服务器软件,支持超过30%的活跃网站。它通过接收和处理HTTP请求,与后端服务器通信,返回响应并记录日志,确保网页请求的快速准确处理。Apache日志分为访问日志和错误日志,对提升用户体验、保障安全及优化性能至关重要。EventLog Analyzer等工具可有效管理和分析这些日志,增强Web服务的安全性和可靠性。
|
2月前
|
XML JSON Java
Logback 与 log4j2 性能对比:谁才是日志框架的性能王者?
【10月更文挑战第5天】在Java开发中,日志框架是不可或缺的工具,它们帮助我们记录系统运行时的信息、警告和错误,对于开发人员来说至关重要。在众多日志框架中,Logback和log4j2以其卓越的性能和丰富的功能脱颖而出,成为开发者们的首选。本文将深入探讨Logback与log4j2在性能方面的对比,通过详细的分析和实例,帮助大家理解两者之间的性能差异,以便在实际项目中做出更明智的选择。
333 3
|
24天前
|
存储 监控 安全
什么是事件日志管理系统?事件日志管理系统有哪些用处?
事件日志管理系统是IT安全的重要工具,用于集中收集、分析和解释来自组织IT基础设施各组件的事件日志,如防火墙、路由器、交换机等,帮助提升网络安全、实现主动威胁检测和促进合规性。系统支持多种日志类型,包括Windows事件日志、Syslog日志和应用程序日志,通过实时监测、告警及可视化分析,为企业提供强大的安全保障。然而,实施过程中也面临数据量大、日志管理和分析复杂等挑战。EventLog Analyzer作为一款高效工具,不仅提供实时监测与告警、可视化分析和报告功能,还支持多种合规性报告,帮助企业克服挑战,提升网络安全水平。
|
2月前
|
存储 缓存 关系型数据库
MySQL事务日志-Redo Log工作原理分析
事务的隔离性和原子性分别通过锁和事务日志实现,而持久性则依赖于事务日志中的`Redo Log`。在MySQL中,`Redo Log`确保已提交事务的数据能持久保存,即使系统崩溃也能通过重做日志恢复数据。其工作原理是记录数据在内存中的更改,待事务提交时写入磁盘。此外,`Redo Log`采用简单的物理日志格式和高效的顺序IO,确保快速提交。通过不同的落盘策略,可在性能和安全性之间做出权衡。
1710 14
|
1月前
|
存储 监控 安全
什么是日志管理,如何进行日志管理?
日志管理是对IT系统生成的日志数据进行收集、存储、分析和处理的实践,对维护系统健康、确保安全及获取运营智能至关重要。本文介绍了日志管理的基本概念、常见挑战、工具的主要功能及选择解决方案的方法,强调了定义管理目标、日志收集与分析、警报和报告、持续改进等关键步骤,以及如何应对数据量大、安全问题、警报疲劳等挑战,最终实现日志数据的有效管理和利用。
108 0
|
2月前
|
Python
log日志学习
【10月更文挑战第9天】 python处理log打印模块log的使用和介绍
44 0

热门文章

最新文章

推荐镜像

更多