`
maincoolbo
  • 浏览: 527573 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

oracle 日志挖掘 logminer

 
阅读更多
导读:
一、先听段故事吧~
二,logminer的基本方法
三、实际中有可能用到的例子


一、先听段故事吧~
p109

oracle重做日志文件包含了对用户数据和数据库的数据字典所做的所有改变。
1,日志挖掘的意义:
·准确定位错误发生的时间点,然后采取相应的补救措施

·还原表,将表恢复到先前一个状态,然后用已存档的日志文件向前回滚

·性能协调和容量规划

·事后审核



2,注意事项:
·重做日志文件必须和运行logminer的数据库有相同的字符集

·logminer 必须运行在生成正在分析的重做日志文件的硬件平台上

·数据库必须运行在archvielog模式

·不能在共享服务器环境中做logminer操作



3,logminer的局限
不支持以下内容

·数据类型LONG和LOB

·简单的和嵌套的数据提取类型(ADTs)

·集合(嵌套表和varrays)

·对象Refs

·索引结构的表(IOTs)



4,如何安装DBMS_LOGMNR_D过程?
10G中创建DBMS_LOGMNR_D过程的sql

SQL> START /opt/oracle/product/10.2.0/db_1/rdbms/admin/dbmslmd.sql



二,logminer的基本方法
步骤1,获取数据字典的平面文件(意思就是把数据字典内容映射到一个文本文件里面!)
alter system set utl_file_dir=’/mc/oracle/logmnr’ scope=spfile   <==设置utl_file_dir;这个需要重启oracle

shutdown immediate;

startup

sqlplus ‘/as sysdba’

execute dbms_logmnr_d.build('dictionary.ora','/mc/oracle/logmnr',options => dbms_logmnr_d.store_in_flat_file);

host

oracle@mmloyal [/mc/oracle/logmnr]# ll -h

total 27M

-rw-r--r-- 1 oracle dba 27M Apr  7 00:40 dictionary.ora   <==这就是数据字典的平面文件!



步骤2,指定要分析的重做日志文件
sys@MC> execute dbms_logmnr.add_logfile( logfilename =>'/opt/oracle/flash_recovery_area/MC/archivelog/2010_04_07/o1_mf_1_523_5vrgkmnd_.arc',options => dbms_logmnr.new);



PL/SQL procedure successfully completed.



步骤3,查看将要分析那个日志
select * from v$logmnr_logs;



步骤4,移走不想挖掘的日志文件
sys@MC> execute dbms_logmnr.add_logfile( logfilename =>'/opt/oracle/flash_recovery_area/MC/archivelog/2010_04_07/o1_mf_1_522_5vrgf9dm_.arc',options => dbms_logmnr.removefile);



PL/SQL procedure successfully completed.



步骤5,启动logminer

这里要制定刚才创建的数据库字典文件,要不然分析重做日志后将以16进制显示数据对象,到时候你就傻眼了~
注意:若没有制定平面文件字典名称,那么指定dict_from_redo_logs或者dict_from_online_catalog

sys@MC> execute dbms_logmnr.add_logfile( logfilename =>'/opt/oracle/flash_recovery_area/MC/archivelog/2010_04_07/o1_mf_1_523_5vrgkmnd_.arc',options => dbms_logmnr.new);



PL/SQL procedure successfully completed.



sys@MC> exec dbms_logmnr.start_logmnr(dictfilename =>'/mc/oracle/logmnr/dictionary.ora');  <==这里要知道字典文件


PL/SQL procedure successfully completed.



Tips:只挖掘那些提交成功的sql(options选项)
exec dbms_logmnr.start_logmnr(dictfilename =>'/mc/oracle/logmnr/dictionary.ora',options => dbms_logmnr.committed_data_only);      <==这里的options还有好多选项,用的时候再谷歌一下,这会就不废话了。



Tips:挖掘某时间范围内的数据
exec dbms_logmnr.start_logmnr(

dictfilename => ‘/mc/oracle/logmnr/dictionary.ora’,

starttime => to_date(’02-Apr-2010 09:30:00’,’DD-MON-YYYY HH:MI:SS’),

endtime => to_date(’02-Apr-2010 19:30:00’,’DD-MON-YYYY HH:MI:SS’));



Tips:挖掘某个SCN范围内的日志
exec dbms_logmnr.start_logmnr(

dictfilename => ‘/mc/oracle/logmnr/dictionary.ora’,

startscn => 19009,

endscn => 2220390);



步骤6,查看日志挖掘的结果
select * from v$logmnr_contents          <==结果按scn号排列



Tips: 使用logminer执行对象级的恢复操作
column sql_redo format a4000

column sql_undo format a4000

select sql_redo,sql_undo from v$logmnr_contents where rownum<3

说明:
sql_redo 列记录的sql代表原来的操作
sql_undo列记录的sql代表要撤销上面操作的方法(这些sql都是logmnr构建的!)


步骤7,结束logminer会话
sys@MC> exec dbms_logmnr.end_logmnr;



PL/SQL procedure successfully completed.



三、实际中有可能用到的例子
在2010-4-7 3:00~5:00我创建了表a还插入数据还修改了数据。。现在呢就是想通过日志挖掘把我这些动作呈现一下啊哈哈!
查看归档日志(当然最好的办法是看v$archived_log  是这个视图吗??)
步骤1:
root@mmloyal [/opt/oracle/flash_recovery_area/MC/archivelog/2010_04_07]# ll -rt

total 3316

-rw-r----- 1 oracle dba 3369984 Apr  7 00:52 o1_mf_1_522_5vrgf9dm_.arc

-rw-r----- 1 oracle dba   12288 Apr  7 00:54 o1_mf_1_523_5vrgkmnd_.arc

-rw-r----- 1 oracle dba    5120 Apr  7 00:54 o1_mf_1_524_5vrglfbh_.arc



sys@MC> conn mctest3/*****

Connected.

步骤2:切换并归档日志
mctest3@MC> alter system archive log current;

步骤3:创建a表
mctest3@MC> create table a(id int,name varchar2(64))

Table created.



mctest3@MC> insert into  a values('1','1')

mctest3@MC> update a set id='2',name='2' where id='1';

mctest3@MC> commit;

mctest3@MC> select * from a;



步骤4:再切换并归档日志
mctest3@MC> alter system archive log current;



root@mmloyal [/opt/oracle/flash_recovery_area/MC/archivelog/2010_04_07]# ll -rt

total 8316

-rw-r----- 1 oracle dba 3369984 Apr  7 00:52 o1_mf_1_522_5vrgf9dm_.arc

-rw-r----- 1 oracle dba   12288 Apr  7 00:54 o1_mf_1_523_5vrgkmnd_.arc

-rw-r----- 1 oracle dba    5120 Apr  7 00:54 o1_mf_1_524_5vrglfbh_.arc

-rw-r----- 1 oracle dba 5070848 Apr  7 03:29 o1_mf_1_525_5vrqo3vw_.arc

-rw-r----- 1 oracle dba   34304 Apr  7 03:33 o1_mf_1_526_5vrqwpz4_.arc



步骤5:创建字典文件
命令要写在一行,不能换行;再就是用绝对路径~

sys@MC> exec dbms_logmnr_d.build(dictionary_filename => 'mcdict.ora',dictionary_location => '/mc/oracle/logmnr');



LogMnr Dictionary Procedure started

LogMnr Dictionary File Opened

Procedure executed successfully - LogMnr Dictionary Created

PL/SQL procedure successfully completed.



步骤6:添加归档日志文件
sys@MC> exec dbms_logmnr.add_logfile(logfilename => '/opt/oracle/flash_recovery_area/MC/archivelog/2010_04_07/o1_mf_1_526_5vrqwpz4_.arc',options => dbms_logmnr.new);



PL/SQL procedure successfully completed.



步骤7:再加归档日志文件
sys@MC> exec dbms_logmnr.add_logfile(logfilename => '/opt/oracle/flash_recovery_area/MC/archivelog/2010_04_07/o1_mf_1_525_5vrqo3vw_.arc',options => dbms_logmnr.addfile);



PL/SQL procedure successfully completed.



步骤8:启动挖掘,并限定在某一时间范围内
sys@MC> exec dbms_logmnr.start_logmnr(dictfilename => '/mc/oracle/logmnr/mcdict.ora',starttime => to_date('07-Apr-2010 03:00:00', 'DD-MON-YYYY HH:MI:SS'),endtime => to_date('07-Apr-2010 03:55:00', 'DD-MON-YYYY HH:MI:SS'));



PL/SQL procedure successfully completed.



步骤9:查询该时间范围里面对表A做了哪些操作
注意了:查询v$logmnr_contents的内容只能在当前会话里面操作
sys@MC> select SCN,sql_redo,sql_undo from v$logmnr_contents  where table_name = 'A';



   SCN         SQL_REDO                                                  SQL_UNDO

---------------   --------------------------------------------------         -----------------------------------

  11699235    create table a(id int,name varchar2(64));



步骤10:统计上面时间范围内数据库对表的修改情况
sys@MC> COL SEG_OWNER FORMAT A10

sys@MC> COL SEG_NAME FORMAT A50

sys@MC> COL HITS FORMAT 999

sys@MC> SELECT SEG_OWNER,SEG_NAME,COUNT(*) AS HITS

     FROM V$LOGMNR_CONTENTS WHERE SEG_NAME NOT LIKE '%$%'

     GROUP BY SEG_OWNER,SEG_NAME;



SEG_OWNER  SEG_NAME                                          HITS

-----------------   ----------------------------------------- ----

SYS         SMON_SCN_TIME                                      58

MCTEST3    A                                                     1

SYSMAN     MGMT_STRING_METRIC_HISTORY                      2

SYS         LOGMNR_BUILDLOG                                   1

SYSMAN     MGMT_METRICS_RAW,SYS_IOT_OVER_62005            262

SYSMAN     MGMT_SYSTEM_PERFORMANCE_LOG                  376

SYSMAN     MGMT_CURRENT_METRICS,SYS_IOT_OVER_62008       7



步骤11:结束日志挖掘:
sys@MC> exec dbms_logmnr.end_logmnr;



PL/SQL procedure successfully completed.

分享到:
评论

相关推荐

    oracle日志分析工具LogMiner使用.

    LogMiner 的架构主要包括三个部分:日志挖掘器(LogMiner)、日志分析器(Log Analyzer)和日志报告器(Log Reporter)。日志挖掘器负责从日志文件中提取日志记录,日志分析器对日志记录进行分析和处理,而日志报告...

    【数据库】Oracle异机logminer日志分析-.docx

    Oracle 异机 LogMiner 日志分析 Oracle LogMiner 是一个功能强大且常用的日志分析工具,能够便捷地从在线或归档日志中获取内容。通常情况下,在数据库本机上进行日志分析,通过数据字典文件来解析,配置过程需要...

    Oracle 日志挖掘(LogMiner)使用详解

    Logminer依赖于2个包:DBMS_LOGMNR和DBMS_LOGMNR_D,Oracle 11g默认已安装 Logminer 基本使用步骤 &lt;1&gt;. Specify a LogMiner ... 开始日志挖掘 &lt;4&gt;. Request the redo data of interest. 查询V$LOGMNR_CONTENTS获

    Oracle redo 异常暴增 日志挖掘 logminer

    日志挖掘Logminer的基本使用步骤包括: 1. 启动Logminer:通过`DBMS_LOGMNR`包中的`ADD_LOGFILE`、`START_LOGMINER`等过程来开启日志分析。 2. 分析日志:Logminer会解析redo日志,提取出其中的SQL语句、事务信息和...

    oracle日志挖掘方法

    ### Oracle日志挖掘方法 #### 一、概述 在Oracle数据库管理中,日志挖掘(Log Mining)是一项非常重要的功能,它能够帮助我们追踪数据库活动并发现潜在的问题或异常行为。通过日志挖掘,我们可以详细了解数据库中...

    oracle归档日志挖掘详细步骤.docx

    总的来说,Oracle数据库归档日志挖掘涉及多个步骤,包括切换日志、选择分析时间范围、添加日志文件、启动和查询分析,以及关闭LogMiner。通过理解并遵循这些步骤,用户可以有效地挖掘和分析归档日志,从而更好地管理...

    Oracle LogMiner

    2. **日志挖掘**:LogMiner读取重做日志文件,从中解析出具体的SQL语句和事务状态信息,如提交或回滚。 3. **输出结果**:LogMiner将解析后的信息以特定格式输出,便于用户进一步分析和处理。 #### 三、LogMiner的...

    基于LogMiner的Oracle数据库日志分析.pdf

    Oracle 数据库除了具有强大数据组织、存储、查询及处理的基本功能外,还提供了许多与应用及管理有关的辅助工具,日志挖掘就是其中之一。Oracle 数据库 采取先写日志再修改数据的方式,用户对系统数据的增加、删除、...

    Oracle LogMiner日志挖掘技术全解析

    Oracle Redo Log就像Oracle数据库的录像带,记录了数据库中的所有改变,Oracle Logminer工具可以有效地挖掘并且呈现出Redo Log中的事务变化,从而可以实现数据恢复、Oracle Redo Log机制的研究、数据库监控和审计、...

    Oracle Logminer

    总的来说,Oracle Logminer 是一个强大的分析工具,能够深入挖掘数据库的日志信息,帮助管理员进行故障排查、数据恢复和审计工作。在进行日志分析时,正确配置和理解其限制是成功利用Logminer的关键。

    Oracle 10g中LogMiner的使用.pdf

    使用LogMiner进行日志挖掘和分析的步骤如下: 1. **选择时间段**:首先确定需要分析的日志时间段,例如通过查询`V$LOG_HISTORY`视图来查看日志档案的时间分布。 2. **启动日志挖掘**:使用DBMS_LOGMNR包的START_...

    Oracle+Logminer使用和安装步骤及恢复例子

    Oracle Logminer 是一个强大的工具,用于挖掘 Oracle 数据库 Redo 日志中的数据更改信息。通过 Logminer,用户可以追踪数据库表的变化情况,这对于数据分析、审计、故障诊断等场景非常有用。 #### 二、Oracle ...

    logminer笔记

    在Oracle数据库管理中,LogMiner是一个强大的工具,用于解析和分析重做日志文件,以便于理解数据库中发生的事务性操作。通过对Redo Log的深入挖掘,DBA和开发人员能够洞察数据库的内部活动,这对于故障排查、性能...

    logminer安装与配置10g图解

    在IT领域,Oracle数据库的LogMiner工具是一个用于分析重做日志文件的强大工具,它可以帮助DBA和开发人员理解数据库事务的详细信息,对于数据库性能调优、故障诊断以及数据恢复等方面具有重要意义。本文将根据提供的...

    ORACLE数据库体系架构视频教程详细完整版

    第六章:日志挖掘 logminer 第七章:管理undo 第八章: 检查点 checkpoint 第九章:实例恢复机制 第二部分:Oracle存储架构 第十章: 数据字典和动态视图 第十一章:Oracle的存储架构 第十二章:Oracle中表的几种...

    Oracle DBA 课件

    Oracle数据库的物理结构包括数据文件、重做日志文件和控制文件,而逻辑结构则由表空间、段、区和块等组成,这些逻辑元素封装了物理文件中的数据。理解这些层次对于数据库的设计、管理和问题排查至关重要。 学习...

    如何使用log miner分析oracle日志

    当我们不小心误操作致使数据库数据丢失、改变时, 需要对数据库对象做基于时间点的恢复,找到我们需要的数据,这个时间点不能认为精确确定,我们可以通过对oracle日志进行分析,而获得无操作的精确时间点。...

    LogMiner数据挖掘工具在HIS系统中的应用.pdf

    LogMiner是Oracle数据库提供的一个日志分析工具,它能够记录数据库变化的详细信息,并允许数据库管理员对这些信息进行分析,以回退不当操作或审查事务历史。LogMiner的应用不仅限于数据库日常监控和管理,还可以在...

Global site tag (gtag.js) - Google Analytics