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

一、logminer的用途
日志文件中存放着所有进行数据库恢复的数据,记录了针对数据库结构的每一个变化,也就是对数据库操作的所有DML语句。logminer 工具即可以用来分析在线,也可以用来分析离线日志文件,即可以分析本身自己数据库的重作日志文件,也可以用来分析其他数据库的重作日志文件。总的说来,logminer工具的主要用途有:
 1.跟踪数据库的变化:可以离线的跟踪数据库的变化,而不会影响在线系统的性能。
 2.回退数据库的变化:回退特定的变化数据,减少point-in-time recovery的执行。
 3.优化和扩容计划:可通过分析日志文件中的数据以分析数据增长模式。

二、安装logminer
要安装logminer工具,必须首先要运行下面这样两个脚本:
 l. $ORACLE_HOME/rdbms/admin/dbmslm.sql
 2. $ORACLE_HOME/rdbms/admin/dbmslmd.sql
这两个脚本必须均以SYS用户身份运行。其中第一个脚本用来创建DBMS_LOGMNR包,该包用来分析日志文件。第二个脚本用来创建DBMS_LOGMNR_D包,该包用来创建数据字典文件。

operation 指的是操作 ,sql_redo 指的是实际操作,sql_undo 指的是用于取消的相反操作。
需要强调一点的是,视图v$logmnr_contents中的分析结果仅在我们运行过程'dbms_logmrn.start_logmnr'这个会话的生命期中存在。这是因为所有的logminer存储都在PGA内存中,所有其他的进程是看不到它的,同时随着进程的结束,分析结果也随之消失。最后,使用过程DBMS_LOGMNR.END_LOGMNR终止日志分析事务,此时PGA内存区域被清除,分析结果也随之不再存在。

Even after you have successfully called DBMS_LOGMNR.START_LOGMNR and selected from
the V$LOGMNR_CONTENTS view, you can call DBMS_LOGMNR.START_LOGMNR again without
ending the current LogMiner session and specify different options and time or SCN
ranges.

成功调用start并查询后,可以再次调用start而不用结束当前logminer会话,并指定不同的选项和时间或scn。

======================

字典为online_catalog的方式

如果要加入新的要分析的归档日志文件的话,需要结束,重新来一遍
另外如果归档日志文件是不连续的,也可以,在select * from v$logmnr_logs;时会看到下面的
Missing log file(s) for thread 1, sequence(s) 95 to 98

一、创建用户并授权
create user log1 identified by 123456;
grant dba to log1;
grant sysdba to log1;//没有这个权限是不行的
select * from v$pwfile_users;

startup mount;
alter database archivelog;
alter database open;
alter database add supplemental log data;

在使用LogMiner读取归档/在线日志需要按照第2章节进行设置,设置完毕后可以对归档和在线日志进行分析。特别是需要开启LogMiner日志补充模式,如果没有开始LogMiner补充模式将无法查看DDL语句,按照测试结果看,只有开始LogMiner日志补充模式后,才能查看DDL语句,在此之前进行DDL将无法进行查看。

这里如果不打开的话,在分析归档日志的时候,就看不到执行操作的machine、os_name、user_name等等,对分析操作排查问题会产生很大困扰。supplemental logging(扩充日志)在通常情况下,redo log 只记录的进行恢复所必需的信息,但是这些信息对于我们使用redo log进行一些其他应用时是不够的,例如在 redo log中使用rowid唯一标识一行而不是通过Primary key,如果我们在另外的数据库分析这些日志并想重新执行某些dml时就可能会有问题,因为不同的数据库其rowid代表的内容是不同的。在这时候就需要一些额外的信息(columns)加入redo log,这就是supplemental logging。

alter database add supplemental log data;
SELECT SUPPLEMENTAL_LOG_DATA_MIN FROM V$DATABASE;

orapwd FILE='/db/oracle/product/10.2.0/db_1/dbs/orapw+SID'  PASSWORD=oracle   ENTRIES=5  FORCE=y
首先,把初始化参数REMOTE_LOGIN_PASSWORDFILE的值改成EXCLUSIVE
如果还是有问题,可能是缺少密码文件,用orapwd创建密码文件

二、登录
以sysdba权限登录
show user;

三、添加要分析的日志
指定要被分析的redo log files list,分在线与归档两种日志
分析在线(联机)日志
select * from v$logfile;
select * from v$log;
select b.member from v$log a left join v$logfile b
on a.group#=b.group# where a.status='CURRENT';

select t1.GROUP#,t1.STATUS,t2.MEMBER,t2.TYPE from v$log t1
inner join v$logfile t2 on t1.GROUP#=t2.GROUP# and t1.STATUS='CURRENT';

execute dbms_logmnr.add_logfile(logfilename=>'F:\APP\ASUS\ORADATA\ORCLDATA\REDO02.LOG',options=>dbms_logmnr.NEW);
execute dbms_logmnr.add_logfile(logfilename=>'/u01/app/oracle/fast_recovery_area/FGY1/archivelog/2017_08_22/o1_mf_1_94_dsq5n0jp_.arc',options=>dbms_logmnr.ADDFILE);

exec dbms_logmnr.remove_logfile('/log/log1.log');

添加在线日志文件,添加第一个文件用new参数
BEGIN
dbms_logmnr.add_logfile(logfilename=>'/fra/MY/onlinelog/o1_mf_1_dcz3w3n1_.log',options=>dbms_logmnr.NEW);
END;
/

添加在线日志文件,添加第二个文件用addfile参数
BEGIN
dbms_logmnr.add_logfile(logfilename=>'/fra/MY/archivelog/2017_08_10/o1_mf_1_90_drqhh7r3_.arc',options=>dbms_logmnr.ADDFILE);
END;
/

分析归档日志
archive log list;
alter system switch logfile;
select * from v$archived_log;
SELECT NAME FROM V$ARCHIVED_LOG
WHERE FIRST_TIME = (SELECT MAX(FIRST_TIME) FROM V$ARCHIVED_LOG);
execute dbms_logmnr.add_logfile(logfilename=>'/u01/app/oracle/fast_recovery_area/FGY1/archivelog/2017_08_24/o1_mf_1_100_dsvv6o42_.arc',options=>dbms_logmnr.NEW);
execute dbms_logmnr.add_logfile(logfilename=>'/u01/app/oracle/fast_recovery_area/FGY1/archivelog/2017_08_22/o1_mf_1_94_dsq5n0jp_.arc',options=>dbms_logmnr.ADDFILE);

四、启动logminer并指定要使用的字典
EXECUTE DBMS_LOGMNR.START_LOGMNR(OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG);

五、开始查询
select * from v$logmnr_contents
where table_space like 'KYC%';
select * from V$SQLCOMMAND;
select * from v$logmnr_logs;
select * from V$LOGMNR_PARAMETERS;
select * from V$logmnr_dictionary;

六、结束会话
EXECUTE DBMS_LOGMNR.END_LOGMNR();

========================

字典为redo log的方式

SELECT NAME FROM V$ARCHIVED_LOG WHERE DICTIONARY_BEGIN='YES';
SELECT NAME FROM V$ARCHIVED_LOG WHERE DICTIONARY_END='YES';

EXECUTE DBMS_LOGMNR_D.BUILD(OPTIONS=> DBMS_LOGMNR_D.STORE_IN_REDO_LOGS);
execute dbms_logmnr.add_logfile(logfilename=>'/u01/app/oracle/oradata/FGY1/onlinelog/o1_mf_2_dso9q3c6_.log',options=>dbms_logmnr.NEW);
EXECUTE DBMS_LOGMNR.START_LOGMNR(OPTIONS => DBMS_LOGMNR.DICT_FROM_redo_logs);

BEGIN
DBMS_LOGMNR.END_LOGMNR;
END;
/

archive log list;
EXECUTE DBMS_LOGMNR_D.BUILD(OPTIONS=> DBMS_LOGMNR_D.STORE_IN_REDO_LOGS);
select * from v$archived_log;

The process of extracting the dictionary to the redo log file
字典可能被包含在多个redo log files中
SELECT NAME FROM V$ARCHIVED_LOG WHERE DICTIONARY_BEGIN='YES';
SELECT NAME FROM V$ARCHIVED_LOG WHERE DICTIONARY_END='YES';

========================

字典为文件的方式,这个不推荐

create directory logm as '/u01/app/oracle/admin/my/dpdump/';
show parameter utl;
alter system set utl_file_dir='/u01/app/oracle/admin/my/dpdump/' scope=both;

EXECUTE DBMS_LOGMNR_D.BUILD('dictionary.ora', '/oracle/database/', DBMS_LOGMNR_D.STORE_IN_FLAT_FILE);

begin
dbms_logmnr_d.build(dictionary_filename => 'dictionary.ora', dictionary_location =>'/u01/app/oracle/admin/my/dpdump/');
end;
/

EXECUTE dbms_logmnr.start_logmnr(dictfilename=>'/u01/app/oracle/admin/my/dpdump/dictionary.ora');

EXECUTE DBMS_LOGMNR.END_LOGMNR();

========================

http://www.cnblogs.com/shishanyuan/p/3140440.html

Before you begin using LogMiner, it is important to understand how LogMiner works with the LogMiner dictionary file (or files) and redo log files.

Query the V$LOGMNR_CONTENTS view. (You must have the SELECT ANY TRANSACTION privilege to query this view.)
You must have been granted the EXECUTE_CATALOG_ROLE role to use the LogMiner PL/SQL packages and to query the V$LOGMNR_CONTENTS view.

========================

一般线上数据库,一天的归档日志非常多,所以直接查询v$logmnr_contents就比较消耗资源,会很卡,因为执行查询的时候,只是一个个从已经添加到队列的归档日志进行数据录入到v$logmnr_contents的。
比如,曾经分析过一家传统的公司,oa系统,每天所有的归档日志分析下来到v$logmnr_contents表,总数据量是16410242条记录,
使用create table logminer.Z1 as select * from v$logmnr_contents;
这个临时表logminer.Z1占据了54G的磁盘空间。所以为了check方便,需要通过一些检索字段,比如通过sql_redo来过滤表。
create table logminer.Z_20170319 as select * from v$logmnr_contents t
where t.sql_redo like ‘%UC_USER%’ or t.sql_redo like ‘%uc_user%’;
create table l1_Z1 as select * from v$logmnr_contents;
执行select * from v$logmnr_contents;非常慢,因为是会去归档日志里面查询数据出来然后显示,这个时候你在后台的alert log里面会看到如下信息,从一个个归档日志里面去mining数据出来:
less /u01/app/oracle/diag/rdbms/testdb/testdb/trace/alert_testdb.log

=============================================

The CONTINUOUS_MINE option requires that the database be mounted and that archiving be enabled.
不用手动添加日志文件了
自动根据过滤条件扫描归档的日志
ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY HH24:MI:SS';
EXECUTE DBMS_LOGMNR.START_LOGMNR( -
STARTTIME => '15-Aug-2017 08:30:00', -
ENDTIME => '20-Aug-2017 08:30:00', -
OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG + -
DBMS_LOGMNR.CONTINUOUS_MINE);

begin
DBMS_LOGMNR.START_LOGMNR(
STARTTIME => '2017-08-24 08:30:00',
ENDTIME => '2017-08-25 08:30:00',
OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG + DBMS_LOGMNR.CONTINUOUS_MINE + DBMS_LOGMNR.PRINT_PRETTY_SQL);
end;
/

也可以跟踪日志来看是将归档日志中的记录插入到相应的表中
tail -f /u01/app/oracle/diag/rdbms/my/my/trace/alert_my.log

select count(*) from v$logmnr_contents;//300百万行
select count(*) from v$logmnr_contents where seg_owner='PERSONAL';//10行
把它另存为临时表,但是存储在sysdba权限的sys用户下,而不是test1用户下
create table t2 as select * from v$logmnr_contents where seg_owner='PERSONAL';
select * from tab;
所以加了个personal.t2
create table personal.t2 as select * from v$logmnr_contents where seg_owner='PERSONAL';
这样就可以脱离会话来日志挖掘了

oracle-logminer的更多相关文章

  1. 3、使用Oracle Logminer同步Demo

    使用Oracle Logminer同步Demo 1 Demo介绍 1.1 Demo设想 前面介绍了Oracle LogMiner配置使用以及使用LogMiner进行解析日志文件性能,在这篇文章中将利用 ...

  2. 2、Oracle Logminer性能测试

    Oracle Logminer性能测试 1 测试介绍 1.1 测试目的 通过模拟不同环境下LogMiner解析联机/归档日志文件运行情况,通过测试所获取的数据分析,通过对以下两点的验证来确定通过Log ...

  3. 1、图解Oracle Logminer配置使用

    LogMiner配置使用手册 1 Logminer简介 1.1 LogMiner介绍 Oracle LogMiner 是Oracle公司从产品8i以后提供的一个实际非常有用的分析工具,使用该工具可以轻 ...

  4. 总结:基于Oracle Logminer数据同步

    第 1 页 共 20 页 出自石山园主,博客地址:http://www.cnblogs.com/shishanyuan LogMiner 配置使用手册 1 Logminer 简介 1.1 LogMin ...

  5. Oracle logminer 分析redo log(TOAD与PLSQL)

    Oracle logminer 分析redo log Oracle 11g r2 RAC centos 6.5 设置时间格式 select to_char(sysdate,'yyyy-mm-dd hh ...

  6. 使用Oracle Logminer同步Demo

    使用Oracle Logminer同步Demo 1 Demo介绍 1.1 Demo设想 前面介绍了Oracle LogMiner配置使用以及使用LogMiner进行解析日志文件性能,在这篇文章中将利用 ...

  7. 4、总结:基于Oracle Logminer数据同步

    最近开发Oracle数据同步功能,做了些调研和验证,这个工作过去有段时间,怕时间长了忘记,故用博客共享出来.在这系列中共写了三篇文章,第一篇是写LogMiner配置及使用,第二篇是测试了LogMine ...

  8. oracle LogMiner配置使用

    一.安装LogMiner1.@D:\app\product\11.1.0\db_1\RDBMS\ADMIN\dbmslm.sql 2.@D:\app\product\11.1.0\db_1\RDBMS ...

  9. oracle logminer全解析

    今天写篇原创的,把在工作中遇到的logminer问题总结下 (1)简介: logminer 工具即可以用来分析在线,也可以用来分析离线日志文件,即可以分析本身自己数据库的重作日志文件,也可以用来分析其 ...

  10. [Oracle]LogMiner工具小结

    (一)LogMiner工具的作用Logminer工具主要用来分析redo log和archive log文件.通过该工具,可以轻松获得Oracle redo log和archive log文件的具体内 ...

随机推荐

  1. mysql utf8mb4 设置

    [mysqld]collation-server=utf8mb4_general_ciinit-connect='SET NAMES utf8mb4'character-set-server=utf8 ...

  2. js +与?优先级

    var val = 'smtg'; console.log('Value is ' + (val === 'smtg') ? 'Something' : 'Nothing'); // A. Value ...

  3. MDK编译过程

    原博文:https://blog.csdn.net/qq_33894122/article/details/83994564

  4. (19)ThreadPoolExecutor线程池

    # 线程池 # 实例化线程池 ThreadPoolExcutor (推荐cpu_count*(n+1)) # 异步提交任务 submit / map # 阻塞直到任务完成 shutdown # 获取子 ...

  5. [Android] QPST,解BL锁,刷Recovery,备份系统,root,刷框架.

    QPST刷到qpst的1.9出厂版本,这个版本的BootLoader是锁定的: bootloader locked.其他版本不会重新锁定,只能relocked,不能恢复最初的locked,这样就不能升 ...

  6. Git中修复bug

    问题描述:提交的远程分支中有一个小bug需要修复: 首先在本地拉取指定分支的代码: git checkout -b test origin/远程分支 git pull 再从test分支中切一个分支: ...

  7. 页面检测网络外网连接- 网页基础模块(JavaScript)

    方法一 html 添加图片标签 加载外站图片 <img id="connect-test" style="display:none;" onload=&q ...

  8. border——边框属性

    一.第一层次(复合样式) <style> p.one{border:1px solid black;} /*边框:1像素 实心的 黑色:*/ </style> <body ...

  9. 微信小程序常见问题

    上拉加载与下拉刷新 https://blog.csdn.net/yelin042/article/details/71435628 微信小程序---报错:对应的服务器TLS为TLS 1.0,小程序要求 ...

  10. 【转】.Net Core中的Api版本控制

    原文链接:API Versioning in .Net Core 作者:Neel Bhatt 简介 Api的版本控制是Api开发中经常遇到的问题, 在大部分中大型项目都需要使用到Api的版本控制 在本 ...