日志挖掘 log miner

6.1 log miner的作用:

数据库恢复中有时会需要对Redo log进行分析, 要会使用log miner,以便确定要恢复的时间点或SCN

6.2 有两种日志挖掘方法 针对DML和DDL,整理如下 :

6.2.1 对语句DML进行日志挖掘:

1)添加database补充日志
SQL>ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;

//注意:通过PL/SQL包的DML的日志挖掘,这步要先执行,在此之后的DML操作才能从日志里挖到。
                  
2)确定要分析的日志范围,添加日志,分析
SQL>execute dbms_logmnr.add_logfile(logfilename=>'归档日志',options=>dbms_logmnr.new);   //第一个要加载的日志文件

SQL>execute dbms_logmnr.add_logfile(logfilename=>'补充日志',options=>dbms_logmnr.addfile);  //可以反复添加补充多个日志文件

3)执行logmnr 分析
SQL>execute dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);

4)查询分析结果,可以设置时间格式,也可以在显示方式里再确定格式.
                                                                          
SQL>select username,scn,timestamp,sql_redo from v$logmnr_contents where seg_name='表名';

5)关闭日志分析
SQL>execute dbms_logmnr.end_logmnr;


session1 sys:
11:33:20 SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;

session2 scott:
09:44:08 SQL> create table a (id int);
09:44:20 SQL> insert into a values(1);
09:44:29 SQL> update a set id=5;
09:44:45 SQL> commit;
09:44:47 SQL> delete a;             //delete这条没有commit,我们要证明uncommit的DML操作也写入了日志。

这个session2留着,换session1进入sys

session1 sys:
11:32:12 SQL> select * from v$log;
 
    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS     ARCHIVED STATUS           FIRST_CHANGE#     FIRST_TIME
---------- ---------- ---------- ---------- ---------- -------- ---------------- ------------- -----------
         1              1         26       52428800          2         NO           CURRENT               2257870         2012-7-23 9
         2              1         25       52428800          2         YES          INACTIVE               2257866         2012-7-23 9
         3             1         23       52428800          2        YES          INACTIVE               2257862         2012-7-23 9
         4              1         24       52428800          2         YES          INACTIVE               2257864         2012-7-23 9
 
//上面a 表的DML操作都写进了current组里,记住sequence#是26号。然后手工切换当前日志到archive里。

11:32:18 SQL> alter system switch logfile;
11:33:00 SQL> /
11:33:02 SQL> /
11:33:02 SQL> /
 
11:33:09 SQL> select name from v$archived_log;
 
/u01/disk1/timran/arch_1_789252862_21.log
/u01/disk1/timran/arch_1_789252862_22.log
/u01/disk1/timran/arch_1_789252862_23.log
/u01/disk1/timran/arch_1_789252862_24.log
/u01/disk1/timran/arch_1_789252862_25.log
/u01/disk1/timran/arch_1_789252862_26.log
/u01/disk1/timran/arch_1_789252862_27.log
/u01/disk1/timran/arch_1_789252862_28.log
/u01/disk1/timran/arch_1_789252862_29.log
 
62 rows selected

//切换后,sequence#26的日志的应该对应的是/u01/disk1/timran/arch_1_789252862_26.log

11:33:48 SQL> execute dbms_logmnr.add_logfile(logfilename=>'/u01/data/urpdb/redo03.log',options=>dbms_logmnr.new);
 
11:34:13 SQL> execute dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);
 
11:34:49 SQL>select scn,to_char(timestamp,'yyyy-mm-dd hh24:mi:ss') timestamp,sql_redo from v$logmnr_contents where seg_name='AA';
 
       SCN TIMESTAMP           SQL_REDO
---------- ------------------- --------------------------------------------------------------------------------
   2258232 2012-07-23 09:43:16 drop table a purge;
   2258334 2012-07-23 09:44:20 create table a (id int);
   2258341 2012-07-23 09:44:28 insert into "SCOTT"."A"("ID") values ('1');
   2258349 2012-07-23 09:44:46 update "SCOTT"."A" set "ID" = '5' where "ID" = '1' and ROWID = 'AAANBAAAEAAAAGEA
   2258353 2012-07-23 09:44:52 delete from "SCOTT"."A" where "ID" = '5' and ROWID = 'AAANBAAAEAAAAGEAAA';
 
6.2.2 对DDL的操作的log miner:

1)如果是第一次做,先要建好logmnr目录,

设置logmnr 参数,存放数据字典文件dict01.ora
$ mkdir /home/oracle/logmnr

SQL> alter system set utl_file_dir='/home/oracle/logmnr' scope=spfile;

2)建立数据字典文件dict.ora
SQL> execute dbms_logmnr_d.build('dict01.ora','/home/oracle/logmnr',dbms_logmnr_d.store_in_flat_file);

3)添加日志分析
SQL> alter system switch logfile;

SQL> execute dbms_logmnr.add_logfile(logfilename=>'归档文件',options=>dbms_logmnr.new);          
SQL> execute dbms_logmnr.add_logfile(logfilename=>'归档文件',options=>dbms_logmnr.addfile);

4)执行分析
SQL> execute dbms_logmnr.start_logmnr(dictfilename=>'/home/oracle/logmnr/dict01.ora',options=>dbms_logmnr.ddl_dict_tracking);     
5)查看分析结果
                                                          
SQL> select username,scn,to_char(timestamp,'yyyy-mm-dd hh24:mi:ss'),sql_redo from v$logmnr_contents WHERE USERNAME ='SCOTT' and lower(sql_redo) like '%table%';
                                                              
6)关闭日志分析
SQL> execute dbms_logmnr.end_logmnr;

例子将在053的不完全恢复一节中演示。

在oracle11g 的EM里已加入了有关log miner的功能,可根据时间段由oracle自动选择需要的日志,比较方便,但只有提交的事务信息,看来是从transaction的角度设计的。

EM-->Availability-->Manage-->View and Manage Transctions

oracle之二日志挖掘log miner的更多相关文章

  1. oracle (9I/10G/11G)数据库日志挖掘(审计误操作)

    文档结构: 资料来自官方网站: https://docs.oracle.com/cd/E11882_01/server.112/e22490/logminer.htm#SUTIL019 来自论坛: h ...

  2. oracle日志挖掘

    oracle日志挖掘是一种十分强大的数据恢复技术,只要你保障你的归档日志和重做日志是完整的,那么就可以将你的数据恢复到任何时刻.简单叙述一下日志挖掘的基本原理,然后进行一个简单的小实验. 日志挖掘时基 ...

  3. Oracle 联机重做日志文件(ONLINE LOG FILE)

    --========================================= -- Oracle 联机重做日志文件(ONLINE LOG FILE) --================== ...

  4. Oracle 日志挖掘(LogMiner)使用

    Logminer依赖于2个包:DBMS_LOGMNR和DBMS_LOGMNR_D,Oracle 11g默认已安装 Logminer 基本使用步骤 <1>. Specify a LogMin ...

  5. Oracle重做日志和日志挖掘

    重做日志-Redo log 首先给出参考资料: 1.Oracle官网-Managing the Redo Log 为什么需要redo log 内存中数据修改后,不必立即更新到磁盘---效率 由日志完成 ...

  6. A shallow summary of oracle log miner

    Sometimes, we should recover one or more rows data which is deleted carelessly by users, but it is n ...

  7. 7.26实习培训日志-Oracle SQL(二)

    Oracle SQL(二) 条件表达式 CASE 语句 或者DECODE 函数,两者均可实现 IF-THEN-ELSE 的逻辑,相比较而言,DECODE 更加简洁 SELECT last_name , ...

  8. logminer日志挖掘

    参考自:https://blog.csdn.net/yes_is_ok/article/details/79296614 原文转自:http://blog.itpub.net/26736162/vie ...

  9. 日志挖掘针对DML语句

    作用: 针对用户的误操作,比如更改数据错误,误删除表等,可以用日志挖掘的方式,跟踪哪个用户什么时候做的操作,并进行数据还原. 一.前期准备: 1.添加最小补充日志,能够记录到更详细的信息,为日志挖掘分 ...

随机推荐

  1. JavaScript在HTML中的基础用法总结

    网页主要由三部分组成,分别为html.CSS和Javascript.如果说HTML是肉身,CSS是皮相,那Javascript就是灵魂.因此,三者的联系与融合则至关重要.本文就来为大家讲解一下Java ...

  2. 你们要的MyCat实现MySQL分库分表来了

    ❝ 借助MyCat来实现MySQL的分库分表落地,没有实现过的,或者没了解过的可以看看 ❞ 前言 在之前写过一篇关于mysql分库分表的文章,那篇文章只是给大家提供了一个思路,但是回复下面有很多说是细 ...

  3. JDK1.8源码学习-ArrayList

    JDK1.8源码学习-ArrayList 目录 一.ArrayList简介 为了弥补普通数组无法自动扩容的不足,Java提供了集合类,其中ArrayList对数组进行了封装,使其可以自动的扩容或缩小长 ...

  4. 开发APP遇到的问题

    1.代码尽量复用 2.调用高德地图,直辖市等,省字段一定有值,市可能为空(pro:'北京市',city:[]) 3.支付密码不用组件 <template> <view> < ...

  5. MySQL · 性能优化 · MySQL常见SQL错误用法(转自-阿里云云栖社区)

    作者:阿里云云栖社区链接:https://zhuanlan.zhihu.com/p/26043916来源:知乎著作权归作者所有,转载请联系作者获得授权. 前言 MySQL在2016年仍然保持强劲的数据 ...

  6. three.js 制作逻辑转体游戏(下)

    上一篇已经对绕非定轴转动有所了解,这篇郭先生继续说一说逻辑转体游戏的制作,这部分我们同样会遇到一些小问题,首先是根据数据渲染陷阱和目标区域,然后是对可以转动的判定,最后是获胜的判定. 1. 根据数据渲 ...

  7. Jmeter系列(55)- 详解 Throughput Controller 吞吐量控制器

    如果你想从头学习Jmeter,可以看看这个系列的文章哦 https://www.cnblogs.com/poloyy/category/1746599.html 简单介绍 自行调整该控制器下的子项的执 ...

  8. springMVC入门(一)------springMVC基本概念与安装

    springMVC简介 springMVC是一个基于MVC的web框架,属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面. springMVC安装 本例中使用 ...

  9. ubuntu apt-mirror 同步源到本地

    1.下载 apt-mirror apt-get install apt-mirror 2.修改配置 root@wangjq:/wangjq# cat /etc/apt/mirror.list##### ...

  10. Vue管理系统前端系列五自定义主题

    目录 自定义主题 1.安装「主题生成工具」 2.安装白垩主题 3.新建颜色挑选组件 自定义主题 1.安装「主题生成工具」 由于主题工具需要依赖于 node-sass,而node-sass版本兼容性并不 ...