LogMiner工具小结

(一)LogMiner工具的作用
Logminer工具主要用来分析redo log和archive log文件。通过该工具,可以轻松获得Oracle redo log和archive log文件的具体内容,甚至,可以获得用户对数据库进行的DDL、DML操作。另外还可分析得到一些需要回滚的sql语句。该工具特别适合调试、审计以及回退某个特定的对象。Logminer的作用总结如下:
1.跟踪数据库的变化,可以离线跟踪数据的变化,而不会影响在线的性能;
2.回退数据库的变化,回退特定的变化的数据,减少point-in-time recovery的执行 ;
3.确定事物级要执行的精细逻辑恢复操作,通过查询log,取得需要的undo语句;
4.审计,查看具体用户对数据库做的具体操作。

注意:
1.LogMiner不支持IOT表、Long、LOB及集合类型;

(二)如何使用
(1)安装LogMiner
通常在安装数据库后就已经安装了Logminer,要查看数据库是否安装了LogMiner,只需查看数据库中是否已经有了dbms_logmnr和dbms_logmnr_d这2个package,如果有了,则已经安装,如果没有,执行下面两个脚本即可:

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

需要注意,两个脚本须用DBA用户身份运行。第1个脚本用来创建dbms_logmnr包,该包用来分析日志文件,第2个脚本用来创建dbms_logmnr_d包,该包用来创建数据字典文件。

创建完成后数据库中将多出4个procedure和3个view,具体如下:
1. dbms_logmnr_d.build :创建一个数据字典文件;
2. dbms_logmnr.add_logfile :添加日志文件以供分析;
3. dbms_logmnr.start_logmnr :开始分析日志文件;
4. dbms_logmnr.end_logmnr :结束分析日志文件;

1.v$logmnr_dictionary :显示字典文件的信息;
2.logmnr_logs :在LogMiner启动时显示要分析的日志列表;
3.logmnr_contents :Logminer启动后,可以使用该view查看日志文件的内容。
需要注意,这里的view是session相关,其它session是查看不到的,仅仅可以在当前session中查看。

(2)如果要分析归档数据,需要数据库需处于归档模式下,通过如下命令查看归档模式

SQL> archive log list;
数据库日志模式            存档模式
自动存档             启用
存档终点            /home/app/oracle/oradata/orcl/arch_log
最早的联机日志序列     46下一个存档日志序列   49当前日志序列           49

(3)创建数据字典之前需要修改spfile参数utl_executefile_dir,由于是静态参数需要重启数据库

SQL> create directory utlfile as ‘/home/oracle/logmnr‘;
 
Directory created

SQL> alter system set utl_executefile_dir = ‘/home/oracle/logmnr‘ scope=spfile;

(4)生成数据字典文件(可选)
在使用LogMiner工具之前,可以使用dbms_logmnr_d.build创建一个数据字典文件,创建该文件的目的是将数据字典导出为一个文本文件,该文件是可选的,但是如果没有该文件,LogMiner解释出的关于数据字典中的部分,如表名、列名、元数据将会以16进制的形式展现,我们是无法理解的。
需要注意的是,如果我们要分析的数据库中的表发生了变化,影响到数据字典信息也发生了变化,那么我们在进行分析时,就需要重新生成数据字典文件。
创建数据字典文件需要以dba身份进行,创建到上面建好的logmnr文件中

begindbms_logmnr_d.build(dictionary_filename=>‘dict.ora‘,
dictionary_location=>‘/home/oracle/logmnr‘,
options=>dbms_logmnr_d.store_in_flat_file);end;/

(5)加入需要分析的日志文件
LogMiner可以对重做日志文件(redo log)和归档日志文件(archive log)进行分析,加入要分析的日志文件使用dbms_logmnr.add_logfile过程,第一个文件使用参数dbms_logmnr.NEW参数,后面的文件使用dbms_logmnr.ADDFILE参数。
step1:创建列表,添加第1个文件:

BEGIN
  dbms_logmnr.add_logfile(logfilename=>‘/home/app/oracle/oradata/orcl/arch_log/1_49_936489730.dbf‘,options=>dbms_logmnr.NEW);END;/

step2:添加其它文件到列表

BEGIN
  dbms_logmnr.add_logfile(logfilename=>‘/home/app/oracle/oradata/orcl/arch_log/1_50_936489730.dbf‘,options=>dbms_logmnr.ADDFILE);
  dbms_logmnr.add_logfile(logfilename=>‘/home/app/oracle/oradata/orcl/arch_log/1_51_936489730.dbf‘,options=>dbms_logmnr.ADDFILE);END;/

(6)使用Logminer文件进行分析

LogMiner分析日志文件可以设置限制条件,也可不设置限制条件,不设置限制条件会对加载的全部日志文件进行分析,设置了限制条件,只会对符合条件的日志进行分析。

(6.1)不限制条件

EXECUTE dbms_logmnr.start_logmnr(dictfilename=>‘/home/oracle/logmnr/dict.ora‘);

(6.2)有限制条件

通过对dbms_logmnr.start_logmnr中几个不同参数的设置,可以缩小要分析的日志文件的范围,通过设置起始时间和终止时间参数,我们可以限制只
分析某一个时间段内的日志文件。
参数:

参数                 类型               默认值                解释

--------------   -----------     --------------     ------------------------------------------------
StartScn          number         0                        分析日志文件中scn > StartScn的日志文件
EndScn            number         0                       分析日志文件中scn < EndScn的日志文件
StartTime         date             1998-01-01        分析日志文件中时间戳 > StartTime的日志文件
EndTime           date             2988-01-01        分析日志文件中时间戳 < EndTime的日志文件
DictFileName     varchar()                                数据字典文件的位置

(7)观察分析结果
通过第(6)步,我们已经得到了重做日志文件的内容,通过动态数据字典v$logmnr_contents可以查看到所有的信息。

select * from v$logmnr_contents;

v$logmnr_contents的部分栏位信息:

栏位                                          解释
---------------------------          ------------------------------------

SCN                                          查询的特定数据的SCN号
TIMESTAM                                 数据改变发生的时间
COMMIT_TIMESTAMP                  数据改变提交的时间
SEG_OWNER                             数据发生改变的段名称
SEG_NAME                                段的所有者的名称
SEG_TYPE                                 数据发生改变的段类型
SEG_TYPE_NAME                       数据发生改变的段类型名称
TABLE_SPACE                           变化段的表空间
ROW_ID                                   数据变化行的ID
SESSION_INFO                          数据发生变化时会话信息
OPERATION                               日志中记录的操作
SQL_REDO                               日志中记录的指定行变化的SQL语句(正向操作)
SQL_UNDO                               为重做日志记录回退或恢复制定行变化的SQL语句

(三)一次LogMiner使用测试

(1)查看归档,下一个归档log是53

SQL> archive log listDatabase log mode           Archive Mode
Automatic archival           Enabled
Archive destination           /home/app/oracle/oradata/orcl/arch_log
Oldest online log sequence     50Next log sequence to archive   53Current log sequence           53

(2)查看数据字典存放位置

SQL> show parameter utl_file_dir

NAME            TYPE        VALUE-------------   --------    -----------------------utl_file_dir    string      /home/oracle/LOGMNR

(3)创建一张测试用的表

SQL> create table test06 
  2  (  3  id number,  4  name varchar(15)  5  ); 
Table created
 
SQL> insert into test06 values(1,‘lijiaman‘); 
1 row inserted
 
SQL> insert into test06 values(2,‘wangyujie‘); 
1 row inserted

(4)将redo归档

SQL> alter system switch logfile;
 
System altered

(5)查看归档情况

SQL> archive log listDatabase log mode           Archive Mode
Automatic archival           Enabled
Archive destination           /home/app/oracle/oradata/orcl/arch_log
Oldest online log sequence     50Next log sequence to archive   53Current log sequence           53SQL> archive log list;Database log mode           Archive Mode
Automatic archival           Enabled
Archive destination           /home/app/oracle/oradata/orcl/arch_log
Oldest online log sequence     51Next log sequence to archive   54Current log sequence           54

(6)创建数据字典文件

begindbms_logmnr_d.build(dictionary_filename=>‘dictionary.ora‘,
dictionary_location=>‘/home/oracle/LOGMNR‘,
options=>dbms_logmnr_d.store_in_flat_file);end;/

(7)添加要分析的归档日志文件
(7.1)先到OS上找到归档文件:

[[email protected] LOGMNR]$ cd /home/app/oracle/oradata/orcl/arch_log
[[email protected] arch_log]$ ls1_49_936489730.dbf  1_50_936489730.dbf  1_51_936489730.dbf  1_52_936489730.dbf  1_53_936489730.dbf

(7.2)创建归档日志文件列表

SQL> begin
  2  dbms_logmnr.add_logfile(LogFileName => ‘/home/app/oracle/oradata/orcl/arch_log/1_53_936489730.dbf‘,Options => dbms_logmnr.new);  3  end;  4  /
 PL/SQL procedure successfully completed

(7.3)如果不确定待分析的数据是否在上面添加的归档日志文件中,可以多添加几个

BEGIN
  dbms_logmnr.add_logfile(logfilename=>‘/home/app/oracle/oradata/orcl/arch_log/1_51_936489730.dbf‘,options=>dbms_logmnr.ADDFILE);
  dbms_logmnr.add_logfile(logfilename=>‘/home/app/oracle/oradata/orcl/arch_log/1_52_936489730.dbf‘,options=>dbms_logmnr.ADDFILE);END;/PL/SQL procedure successfully completed

(8)开始分析

SQL> EXECUTE dbms_logmnr.start_logmnr(dictfilename=>‘/home/oracle/LOGMNR/dictionary.ora‘);
 
PL/SQL procedure successfully completed

(9)查看结果

SQL> select c.timestamp,c.operation,c.table_space,c.sql_redo,c.sql_undo  from v$logmnr_contents c where c.seg_owner=‘LIJIAMAN‘;                                                                         
                                                                                                                                                                                                        
TIMESTAMP   OPERATION   TABLE_SPACE   SQL_REDO                                                                         SQL_UNDO                                                                         
----------- ----------- ------------- ----------------------------------------------------------------------   --------------------------------------------------------------------------------         2017/4/25 2 DDL                                                                                                                                                                                         
                                      create table test06                                                                                                                                               
                                      (                                                                                                                                                                 
                                      id number,                                                                                                                                                        
                                      name varchar(15)                                                                                                                                                  
                                      )                                                                                                                                                                 
                                      ;                                                                                                                                                                 
                                                                                                                                                                                                        
2017/4/25 2 INSERT      USERS         insert into "LIJIAMAN"."TEST06"("ID","NAME") values (‘1‘,‘lijiaman‘);     delete from "LIJIAMAN"."TEST06" where "ID" = ‘1‘ and "NAME" = ‘lijiaman‘ and ROW        
2017/4/25 2 INSERT      USERS         insert into "LIJIAMAN"."TEST06"("ID","NAME") values (‘2‘,‘wangyujie‘);    delete from "LIJIAMAN"."TEST06" where "ID" = ‘2‘ and "NAME" = ‘wangyujie‘ and RO

时间: 2024-10-12 13:28:34

LogMiner工具小结的相关文章

Python自然语言处理工具小结

Python自然语言处理工具小结 作者:白宁超 2016年11月21日21:45:26 1 Python 的几个自然语言处理工具 NLTK:NLTK 在用 Python 处理自然语言的工具中处于领先的地位.它提供了 WordNet 这种方便处理词汇资源的借口,还有分类.分词.除茎.标注.语法分析.语义推理等类库. Pattern:Pattern 的自然语言处理工具有词性标注工具(Part-Of-Speech Tagger),N元搜索(n-gram search),情感分析(sentiment a

eclipse中使用javap工具小结

关于javap的功能,百度百科上是这么解释的: javap javap是jdk自带的一个工具,可以反编译,也可以查看java编译器生成的字节码,是分析代码的一个好工具. 简单明了,大多时候真正的开发环境为linux系统,但是在windows下开发的时候又不习惯dos窗口的化,eclipse为我们提供了 javap的详细使用: 我们能够在eclipse中使用javap工具,我们有必要了解一下在eclipse中的Variables这个东西.这个英文单词的意思是变量集合的意思,意思就是我们以某些简短的

Oracle LogMiner工具在实际工作中的运用

LogMiner工具通过分析Oracle重作日志文件(归档日志文件)中的具体内容来重现ORACLE执行过的SQL,特别是,该工具可以分析出所有对于数据库操作的DML(insert.update.delete等)语句,另外还可分析得到一些必要的回滚SQL语句.该工具特别适用于调试.审计或者回退某个特定的事务. LogMiner分析工具实际上是由一组PL/SQL包和一些动态视图组成,它作为Oracle数据库的一部分来发布,是一个完全免费的工具.但该工具和其他Oracle内建工具相比使用起来显得有些复

Python包管理工具小结

此文已由作者张耕源授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 作为一名接触Python有一段时间的初学者,越来越体会到Python的方便之处,它使人能更 多的关注业务本身的逻辑,而不用太纠结语言层面的技巧与细节.然而,随着服务的规模 变得越来越大,如何方便快速地制作与发布一个Python软件包则越来越成为一个让人头疼 地问题,特别是像Openstack这种相对复杂.各种依赖也很多的Python项目,到目前也没有 发现特别完美的解决方案.这里将尝试对Python的包管

PHP覆盖率测试工具小结

一.写在最前 这篇文档是我对之前一段时间工作的总结和分享,自己也是第一次涉猎这方面的知识,肯定有遗漏和偏差,甚至“低级错误”,所以想起到抛砖引玉的作用,大家互相分享,共同进步.能够给同学们的工作带来些许启发,我也就很满足了. 二.覆盖率是什么?它能反映什么? 简单的说,覆盖率通常是指程序的执行过程中(即一个case),已执行的代码与可执行的代码的比值(或者与总代码行数的比值).它能够从一个侧面反映出case的质量,即case是否做到对代码的完全覆盖. 三.PHP如何测试覆盖率? 1. Xdebu

+++++++swap创建和文件系统空间查看工具小结

命令 mkswap,swapon,swapoff free,du,df swapon命令 swapon [OPTIONS...] PARTITIONS ... -a            ## 激活所有swap分区 -P PRIORITY   ## 指定激活swap分区的优先级 ##激活时指定激活分区的优先级(性能好的,优先级调高. 性能差的在"不同磁盘"之上,以相同的优先级同时启用,实现负载均衡.同一个硬盘之上,实现不同盘swap,伪负载均衡) ##但凡有物理内存使用,不建议用swa

oracle logminer全解析

今天写篇原创的,把在工作中遇到的logminer问题总结下 (1)简介: logminer 工具即可以用来分析在线,也可以用来分析离线日志文件,即可以分析本身自己数据库的重作日志文件,也可以用来分析其他数据库的重作日志文件. 总的说来,logminer工具的主要用途有:  1. 跟踪数据库的变化:可以离线的跟踪数据库的变化,而不会影响在线系统的性能.  2. 回退数据库的变化:回退特定的变化数据,减少point-in-time recovery的执行.  3. 优化和扩容计划:可通过分析日志文件

LogMiner配置使用手册

1 Logminer简介 1.1 LogMiner介绍 Oracle LogMiner 是Oracle公司从产品8i以后提供的一个实际非常有用的分析工具,使用该工具可以轻松获得Oracle 在线/归档日志文件中的具体内容,特别是该工具可以分析出所有对于数据库操作的DML和DDL语句.该工具特别适用于调试.审计或者回退某个特定的事务. LogMiner分析工具实际上是由一组PL/SQL包和一些动态视图(Oracle8i内置包的一部分)组成,它作为Oracle数据库的一部分来发布是8i产品提供的一个

Oracle查看LogMiner的详解

Oracle数据库查看日志的方法很多,我们可以根据SQL语句来实现,也可以通过日志查看工具LogMiner来实现,本文我们主要就介绍了这一过程,接下来就让我们一起来了解一下吧.        一.Oracle日志的路径        登录:sqlplus "/as sysdba"        查看路径:SQL> select * from v$logfile;        SQL> select * from v$logfile;(#日志文件路径)        二.O