`
ahuzl007
  • 浏览: 25740 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

Logminer使用方法(10.2.0)

阅读更多

1.  dict_from_online_catalog mode

dict_from_online_catalog具体操作又分为两种:分析online redo logfile,分析archived logfile.

 

 

1.1  分析online redo logfile

 

准备数据

建表
create table test_logmnr (
id number(5),
name varchar2(20)
);
插值
insert into test_logmnr values (222,'test2');
 

 

1.1.1  将redo log 添加到logminer中,注意第一次添加要用 dbms_logmnr.new
SQL> execute dbms_logmnr.add_logfile(LOGFILENAME =>'/oracle/oradata/monster/redo01.log', OPTIONS =>dbms_logmnr.new);

PL/SQL procedure successfully completed.

  这里需要说明的是,不一定三个online redo log都加,这里只是个例子,按照需要添加即可

添加redo02.log, 这会就是 dbms_logmnr.addfile了
SQL> execute dbms_logmnr.add_logfile(LOGFILENAME =>'/oracle/oradata/monster/redo02.log', OPTIONS =>dbms_logmnr.addfile);

PL/SQL procedure successfully completed.
 
添加redo03.log
SQL> execute dbms_logmnr.add_logfile(LOGFILENAME =>'/oracle/oradata/monster/redo03.log', OPTIONS =>dbms_logmnr.addfile);

PL/SQL procedure successfully completed.
 
1.1.2  开始分析
SQL> execute DBMS_LOGMNR.START_LOGMNR(OPTIONS => dbms_logmnr.dict_from_online_catalog);

PL/SQL procedure successfully completed.
 
1.1.3  从v$logmnr_contents中查找SQL_REDO和SQL_UNDO
SQL> select TIMESTAMP, SQL_REDO, SQL_UNDO from v$logmnr_contents where USERNAME = 'SCOTT';

TIMESTAMP
-------------------
SQL_REDO
--------------------------------------------------------------------------------
SQL_UNDO
--------------------------------------------------------------------------------
2010/07/15 00:34:31
set transaction read write;


2010/07/15 00:34:31
insert into "SCOTT"."TEST_LOGMNR"("ID","NAME") values ('222','test2');
delete from "SCOTT"."TEST_LOGMNR" where "ID" = '222' and "NAME" = 'test2' and RO
WID = 'AAANymAAEAAAAb0AAC';

2010/07/15 00:34:39
commit;

 

1.2  分析archived log

1.2.1  存档redo log, 当然前提是数据库处于archive log mod e
SQL> alter system switch logfile;
也可以用:
SQL> alter system archive log current;
 
Insert data to test table
insert into test_logmnr values (333,'test3');

 

1.2.2  确认刚刚生成的archived log , 并确认一下时间,以分辨数据
[oracle@rac02 oracle]$ cd oradata/monster/archive/
[oracle@rac02 archive]$ ls -ltr | tail -2
-rw-r----- 1 oracle oinstall 52027904 Jul 14 22:00 1_433_704572097.arc
-rw-r----- 1 oracle oinstall 16630784 Jul 15 01:56 1_434_704572097.arc
[oracle@rac02 archive]$ date
Thu Jul 15 01:58:13 JST 2010

1.2.3  将archive log添加到logminer
SQL> execute dbms_logmnr.add_logfile(LOGFILENAME =>'/oracle/oradata/monster/archive/1_434_704572097.arc ', OPTIONS =>dbms_logmnr.new);

PL/SQL procedure successfully completed.

 

1.2.4  开始分析
SQL> execute DBMS_LOGMNR.START_LOGMNR(OPTIONS => dbms_logmnr.dict_from_online_catalog);

PL/SQL procedure successfully completed.
 
1.2.5  从v$logmnr_contents中查找SQL_REDO和SQL_UNDO(多余的数据就省掉了)
SQL> select TIMESTAMP, SQL_REDO, SQL_UNDO from v$logmnr_contents where USERNAME = 'SCOTT';

TIMESTAMP
-------------------
SQL_REDO
--------------------------------------------------------------------------------
SQL_UNDO
--------------------------------------------------------------------------------
2010/07/15 01:55:23
set transaction read write;


2010/07/15 01:55:23
insert into "SCOTT"."TEST_LOGMNR"("ID","NAME") values ('333','test3');
delete from "SCOTT"."TEST_LOGMNR" where "ID" = '333' and "NAME" = 'test3' and RO
WID = 'AAANymAAEAAAAb0AAD';

2010/07/15 01:55:24
commit;
 

 

2.  dict_from_redo_logs mode

准备数据

插值
insert into test_logmnr values (444,'test4');
 

2.1  添加archived log

我觉得,这个mode比较扯,扯就扯在这个添加archived log的过程上,各位看官自己看吧

 

2.1.1  准备要添加的archived log

准备好archived log,这个过程会自动存档redo log,至于存档几次,那就不好说啦
SQL> execute dbms_logmnr_d.build(options=> dbms_logmnr_d.store_in_redo_logs);

PL/SQL procedure successfully completed.
 
由上面的过程引发的存档信息会反映到v$archived_log里,注意红色数字的间隔,按理说archived log的编号是连续的,间隔就代表生成了多个,但间隔又不固定,你说扯不扯,还望高人指点一下迷津啊!
SQL> select name from v$archived_log where dictionary_begin='YES';

NAME
------------------------------------------------------------------------------------------------------------------------
/opt/ora10g/flash_recovery_area/SINGLE/archivelog/2010_07_09/o1_mf_1_18 _63fplys3_.arc
/opt/ora10g/flash_recovery_area/SINGLE/archivelog/2010_07_18/o1_mf_1_24 _645vgq4d_.arc
/opt/ora10g/flash_recovery_area/SINGLE/archivelog/2010_07_18/o1_mf_1_28 _645vyodl_.arc
/opt/ora10g/flash_recovery_area/SINGLE/archivelog/2010_07_18/o1_mf_1_36 _645x3s23_.arc
/opt/ora10g/flash_recovery_area/SINGLE/archivelog/2010_07_18/o1_mf_1_38 _645x8v45_.arc
/opt/ora10g/flash_recovery_area/SINGLE/archivelog/2010_07_18/o1_mf_1_40 _645xd76w_.arc
/opt/ora10g/flash_recovery_area/SINGLE/archivelog/2010_07_18/o1_mf_1_43 _645xw17j_.arc
/opt/ora10g/flash_recovery_area/SINGLE/archivelog/2010_07_19/o1_mf_1_46 _646vx8m4_.arc

8 rows selected.

 

2.1.2 确认要添加的archived log(这次我们添加7月19日的)

 

SQL> !ls -ltr /opt/ora10g/flash_recovery_area/SINGLE/archivelog/2010_07_19
合計 47520
-rw-r----- 1 oracle dba 39141888 7月 19 06:18 o1_mf_1_45_646vx3lr_.arc
-rw-r----- 1 oracle dba 9451520 7月 19 06:18 o1_mf_1_46_646vx8m4_.arc 

 

2.1.3 添加archived log到logminer

加o1_mf_1_46_646vx8m4_.arc
SQL> execute dbms_logmnr.add_logfile(logfilename=> '/opt/ora10g/flash_recovery_area/SINGLE/archivelog/2010_07_19/o1_mf_1_46_646vx8m4_.arc', options=> dbms_logmnr.new);

PL/SQL procedure successfully completed.

 这里要注意的是,要先添加o1_mf_1_ 46 _646vx8m4_.arc(即显示在v$archived_log里的), 再添加o1_mf_1_45_646vx3lr_.arc,否则会出错。

为什么我非要多添加一个o1_mf_1_45_646vx3lr_.arc呢?因为我知道,刚刚插入的444,‘test4’数据就在这个archived log中。

 

再追加o1_mf_1_45_646vx3lr_.arc
SQL> execute dbms_logmnr.add_logfile(logfilename=> '/opt/ora10g/flash_recovery_area/SINGLE/archivelog/2010_07_19/o1_mf_1_45_646vx3lr_.arc', options=> dbms_logmnr.addfile);

PL/SQL procedure successfully completed.

 

2.1.4 开始分析

 

SQL> execute dbms_logmnr.start_logmnr(options=> dbms_logmnr.dict_from_redo_logs);

PL/SQL procedure successfully completed.

 

2.1.5 从 v$logmnr_contents中查找SQL_REDO和SQL_UNDO

 

SQL> select TIMESTAMP, SQL_REDO, SQL_UNDO from v$logmnr_contents where USERNAME = 'SCOTT';

TIMESTAMP
-------------------
SQL_REDO
--------------------------------------------------------------------------------
SQL_UNDO
--------------------------------------------------------------------------------

2010-07-19 06:17:35
insert into "SCOTT"."TEST_LOGMNR"("ID","NAME") values ('444','test4');
delete from "SCOTT"."TEST_LOGMNR" where "ID" = '444' and "NAME" = 'test4' and RO
WID = 'AAAM6eAAEAAADo8AAF';

2010-07-19 06:17:35
commit;
 

 

3.  Dictory mode

Dictory mode的优点是可以分析其他DB或是Instance的log. 只要你有那个目标库的数据字典 XXXX.ora文件。缺点就是你必须要有这个 XXXX.ora文件

 

3.1  set utl_file_dir parameter

    utl_file_dir一般默认为空

SQL> show parameter utl_file_dir

NAME                                       TYPE            VALUE
------------------------------------ ----------- ----------------------------
utl_file_dir                               string

 

    想写scope=both  => 不行,  想立即生效  => 不行,  乖乖重起DB吧

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

System altered.

 

    设定完后确认一下

SQL> show parameter utl_file_dir

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

 

3.2  生成XXXX.ora数据字典文件

dictionary_location必须是先前指定的utl_file_dir值

 

SQL> execute DBMS_LOGMNR_D.BUILD(
  2  dictionary_filename => 'test_logmnr.ora',
  3  dictionary_location => '/home/oracle/chou',
  4  options => DBMS_LOGMNR_D.STORE_IN_FLAT_FILE);

PL/SQL procedure successfully completed.

 

确认XXXX.ora文件已生成,还不小呢,足有20MB啊,这只是我的test环境,生产环境那就更大了吧
[oracle@rac02 chou]$ ls -ltr /home/oracle/chou
-rw-r--r-- 1 oracle oinstall 22137597 Jun 30 19:31 test_logmnr.ora

 

3.3  开始logminer过程  

 

3.3.1 分析online redo log

 

3.3.1.1  添加redo01.log
SQL> execute dbms_logmnr.add_logfile(LOGFILENAME =>'/oracle/oradata/monster/redo01.log', OPTIONS =>dbms_logmnr.new);

PL/SQL procedure successfully completed.

 

追加redo02.log
SQL> execute dbms_logmnr.add_logfile(LOGFILENAME =>'/oracle/oradata/monster/redo02.log', OPTIONS =>dbms_logmnr.addfile);

PL/SQL procedure successfully completed.

 

追加redo03.log
SQL> execute dbms_logmnr.add_logfile(LOGFILENAME =>'/oracle/oradata/monster/redo03.log', OPTIONS =>dbms_logmnr.addfile);

PL/SQL procedure successfully completed.

 

3.3.1.2 开始分析  (指定DICTFILENAME很重要 )
SQL> execute DBMS_LOGMNR.START_LOGMNR(DICTFILENAME => '/home/oracle/chou/test_logmnr.ora' );

PL/SQL procedure successfully completed.
 
3.3.1.3  从v$logmnr_contents里找SQL
SQL> select TIMESTAMP, SQL_REDO, SQL_UNDO from v$logmnr_contents where USERNAME = 'SCOTT';

TIMESTAMP
-------------------
SQL_REDO
--------------------------------------------------------------------------------
SQL_UNDO
--------------------------------------------------------------------------------
2010/07/15 00:34:31
set transaction read write;


2010/07/15 00:34:31
insert into "SCOTT"."TEST_LOGMNR"("ID","NAME") values ('222','test2');
delete from "SCOTT"."TEST_LOGMNR" where "ID" = '222' and "NAME" = 'test2' and RO
WID = 'AAANymAAEAAAAb0AAC';

2010/07/15 00:34:39
commit;

 
如果不指定 DICTFILENAME, 会怎样呢,下面为您呈现

开始分析
SQL> execute dbms_logmnr.start_logmnr();

PL/SQL procedure successfully completed.
 
查找SQL
SQL> select TIMESTAMP, SQL_REDO, SQL_UNDO from v$logmnr_contents where USERNAME = 'SCOTT';

TIMESTAMP
-------------------
SQL_REDO
--------------------------------------------------------------------------------
SQL_UNDO
--------------------------------------------------------------------------------
2010/07/15 00:34:31
set transaction read write;


2010/07/15 00:34:31
insert into "UNKNOWN "."OBJ# 56486 "("COL 1 ","COL 2 ") values (HEXTORAW('323232'),HEXTORAW('7465737432') );
delete from "UNKNOWN "."OBJ# 56486 " where "COL 1" = HEXTORAW('323232') and "COL 2" = HEXTORAW('7465737432') and ROWID = 'AAANymAAEAAAAb0AAC';

2010/07/15 00:34:39
commit;

 
区别我就不说了吧

 

 

 

3.3.2  分析archived log

 

3.3.2.1  添加archived log , arc文件的位置有点怪吧,是我瞎copy的
SQL> execute DBMS_LOGMNR.ADD_LOGFILE(
2 LOGFILENAME => '/home/oracle/chou/1_419_704572097.arc',
3 OPTIONS => dbms_logmnr.new);

PL/SQL procedure successfully completed.

3.3.2.2 开始分析
SQL> execute DBMS_LOGMNR.START_LOGMNR(
2 DICTFILENAME => '/home/oracle/chou/test_logmnr.ora');

PL/SQL procedure successfully completed.

 

3.3.2.3  确认 v$logmnr_contents
SQL> select TIMESTAMP, SQL_REDO, SQL_UNDO from v$logmnr_contents
2 where USERNAME = 'SCOTT' and OPERATION = 'DELETE';

TIMESTAMP
-------------------
SQL_REDO
------------------------------------------------------------------------------------------------------------------------
SQL_UNDO
------------------------------------------------------------------------------------------------------------------------
2010/06/30 19:09:43
delete from "SCOTT"."TEST_LOGMNR" where "ID" = '222' and "NAME" = 'tester1' and ROWID = 'AAANymAAEAAAAb0AAB';
insert into "SCOTT"."TEST_LOGMNR"("ID","NAME") values ('222','tester1');

 
完了。

 

分享到:
评论

相关推荐

    oracle日志分析工具LogMiner使用.

    下面是对 LogMiner 的详细介绍和使用方法。 一、LogMiner 的架构 LogMiner 的架构主要包括三个部分:日志挖掘器(LogMiner)、日志分析器(Log Analyzer)和日志报告器(Log Reporter)。日志挖掘器负责从日志文件...

    oracle日志分析工具LogMiner使用

    ### Oracle日志分析工具LogMiner使用详解 #### 一、概述 Oracle LogMiner是Oracle数据库提供的一个强大工具,用于分析重做日志文件,提取数据库中的...希望本文能帮助您更好地理解和掌握Oracle LogMiner的使用方法。

    Oracle日志管理logminer使用

    ### Oracle日志管理logminer使用 #### 一、Oracle日志管理概述 Oracle数据库通过日志记录了所有对数据的更改操作,这对于确保数据的一致性和完整性至关重要。Oracle中的日志主要包括重做日志(Redo Logs)和归档...

    LogMiner的使用

    ### LogMiner的使用 #### 一、LogMiner简介 **LogMiner**是Oracle数据库提供的一种强大工具,主要用于分析重做日志文件(在线重做日志和归档重做日志),以获取数据库中发生的事务详情。这对于进行数据库逻辑恢复...

    超级简单的ORACLE LOGMINER使用步骤

    超级简单的ORACLE LOGMINER使用简单步骤,一看就会。

    logminer如何安装配置使用

    使用LogMiner时,DBA首先需要配置数据字典,然后指定要分析的日志文件范围,并启动LogMiner进行分析。分析完成后,通过查询v$logmnr_contents等视图获取结果。这种强大的工具使得对Oracle数据库的操作跟踪和审计变得...

    oracle日志分析工具LogMiner的使用

    以下将详细介绍LogMiner的使用步骤及关键知识点。 1. **安装LogMiner** 在使用LogMiner之前,需要执行两个SYS用户的脚本,分别是`dbmslm.sql`和`dbmslmd.sql`。这两个脚本分别用于创建DBMS_LOGMNR包和DBMS_LOGMNR_...

    使用LOGMINER恢复提交后的数据之总结

    Oracle的LOGMINER工具是一个强大的分析工具,尤其在数据恢复和审计方面...掌握LOGMINER的使用方法,对于数据库管理员来说,能显著提升在问题出现时的响应速度和解决能力,减少对数据库服务的影响,保障数据的安全性。

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

    ### Oracle Logminer 使用和安装步骤详解 #### 一、Oracle Logminer 概述 Oracle Logminer 是一个强大的工具,用于挖掘 Oracle 数据库 Redo 日志中的数据更改信息。通过 Logminer,用户可以追踪数据库表的变化情况...

    Oracle 9i LogMiner工具使用说明

    除了基本的使用方法之外,LogMiner还支持一些高级功能,比如: - **分析多个数据库的重做日志文件**:LogMiner不仅可以分析本数据库的重做日志文件,还可以分析其他数据库的重做日志文件。这对于跨数据库的审计和...

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

    Logminer 基本使用步骤 <1>. Specify a LogMiner dictionary. 指定Logminer字典 <2>. Specify a list of redo log files for analysis. 指定需要挖掘的redo或者archivelog日志文件 <3>. Start LogMiner. 开始日志...

    浅谈LogMiner的使用方法

    浅谈LogMiner的使用方法 LogMiner是Oracle提供的一个功能强大且实用的工具,能够帮助DBA对数据库进行事务回退、数据恢复和问题诊断。下面将详细介绍LogMiner的使用方法和相关知识点。 一、LogMiner的概念和特点 ...

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

    本文介绍了使用 Oracle LogMiner 进行日志分析的方法,并强调了数据库版本、DB NAME 和生成的数据字典的 DBID 一致性问题的重要性。同时,本文也提供了使用 nid 工具修改 DB NAME 和 DBID 的方法,以便与日志来源库...

    Oracle logMiner

    - **LogMiner结构**:LogMiner使用V$LOGMNR_CONTENTS视图提供分析结果,它包含了从redo日志中解析出的SQL语句、事务信息和时间戳等。 2. **使用LogMiner的过程** - **启动LogMiner**:通过执行DBMS_LOGMNR包中的...

    Oracle LogMiner

    要使用 LogMiner,首先需要进行安装,步骤包括以 SYS 用户身份运行两个初始化脚本: - `$ORACLE_HOME/rdbms/admin/dbmslsm.sql` - `$ORACLE_HOME/rdbms/admin/dbmslsmd.sql` 这些脚本会创建必要的包和数据字典文件...

    logminer安装与配置10g图解

    在IT领域,Oracle数据库的LogMiner工具是一个用于分析重做...LogMiner作为一个强大的数据库分析工具,其在数据库管理中的作用不容小觑,熟练掌握其安装和配置方法,对于提高数据库运维效率、保障数据安全具有重要意义。

Global site tag (gtag.js) - Google Analytics