ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Oracle中使用LogMiner分析日志信息

Oracle中使用LogMiner分析日志信息

原创 Linux操作系统 作者:luoqun_520 时间:2011-03-10 09:21:40 0 删除 编辑

 LogMiner是集成在Oracle8i开始提供的用于日志分析工具,它包括DBMS_LOGMNRDBMS_LOGMNR_D两个PACKAGE,通过该工具可以分析重做日志和归档日志中的所有事务变化,并能准确地确定各种DMLDDL操作的具体时间和SCN值。对重做日志和归档日志进行分析的目的是为了恢复由于执行了误操作而丢失的数据。

使用LogMiner可实现:①确定数据逻辑损坏的时间。例如,用户执行了DROP TABLETRUNCATE TABLE命令等误操作后,使用LogMiner可以准确定位执行这些误操作的具体时间。注意:Oracle8i只能还原DML操作,不能还原DDL操作;Oracle9i可以还原DDL以及DML操作。②跟踪用户执行的事务变化操作。使用LogMiner不仅可以跟踪用户所执行的各种DML操作和DDL操作,而且还可以取得数据变化。③跟踪表的DML操作,使用LogMiner可以跟踪在表上所发生的所有事务变化。

下面以Oracle10G for Windows 2003/NT为例说明如何使用LogMiner对重做日志和归档日志进行分析。本文进行的所有操作均在该环境下验证通过.

一、    前提条件

必须是归档模式

SQL> archive log list

数据库日志模式            存档模式

自动存档             启用

存档终点            c:\archived

最早的联机日志序列     14

下一个存档日志序列   16

当前日志序列           16

二、    生成归档日志

下面以分析TEST表的DDLDML操作为例,介绍使用LogMiner分析重做日志和归档日志的全过程。我们首先执行以下语句在表TEST上执行DDL以及DML操作,并生成归档日志:

SQL> alter system switch logfile;

系统已更改。

SQL> create table test(id int);

表已创建。

SQL> alter system switch logfile;

系统已更改。

SQL> insert into test values(1);

已创建 1 行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系统已更改。

SQL> update test set id=100;

已更新 1 行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系统已更改。

SQL> delete from test;

已删除 1 行。

SQL> alter system switch logfile;

系统已更改。

 

三、    参数配置

在日志分析过程会使用到数据字典,一般是先设置UTL_FILE_DIR参数删除数据字典文件,日后进行日志分析,当然在oracle10G中可使用在线数据字典,不需要设置UTL_FILE_DIR参数。

字典文件用于存放表及对象ID号之间的对应关系。当使用字典文件时,它会在表名和对象ID号之间建立一一对应的关系。因此需要注意,如果用户建立了新表之后,并且将来可能会对该表进行日志分析,那么就需要重新建立字典文件,以将其对象名及对象ID号存放到字典文件中。

修改参数文件

添加参数:UTL_FILE_DIR=C:\ logmnr 目录logmnr必须事先手工建立,该目录用于存放产生的字典文件,目录名称可以自定

SQL> alter system set UTL_FILE_DIR='c:\logmnr' scope=spfile;

系统已更改。

重启数据库

重启之后参数设置才能生效。

SQL> shutdown immediate

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

SQL> startup

ORACLE 例程已经启动。

Total System Global Area  167772160 bytes

Fixed Size                  1247900 bytes

Variable Size              83887460 bytes

Database Buffers           79691776 bytes

Redo Buffers                2945024 bytes

数据库装载完毕。

数据库已经打开。

四、    建立字典文件

 

ORACLE 10G中可以使用在线数据字典。

SQL> begin

  2  dbms_logmnr_d.build(

  3  dictionary_filename=>'dict.ora',

  4  dictionary_location=>'c:\logmnr');

  5  end;

  6  /

PL/SQL 过程已成功完成。

注意:参数dictionary_filename用以指定字典文件的文件名;参数 dictionary_location用于指定存放字典文件所在的目录,该目录必须与初始化参数UTL_FILE_DIR的值一致。如果指定的字典文件名dict.ora已经存在,则应在执行此操作前将其彻底删除(从垃圾箱中删除),否则执行该过程将失败。

五、    建立日志分析列表

 

查看重做日志文件

在对表TEST操作过程中,产生了4个重做日志文件。可通过时间查找重做日志文件。

SQL> select name,first_time,next_time from v$archived_log where first_time>to_da

te('2011-03-07 14:30:00','yyyy-mm-dd hh24:mi:ss');

NAME                                     FIRST_TIME          NEXT_TIME

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

C:\ARCHIVED\ARC00012_0741453732.001      2011-03-07 14:39:16 2011-03-07 14:39:45

C:\ARCHIVED\ARC00013_0741453732.001      2011-03-07 14:39:45 2011-03-07 14:40:20

C:\ARCHIVED\ARC00014_0741453732.001      2011-03-07 14:40:20 2011-03-07 14:41:10

C:\ARCHIVED\ARC00015_0741453732.001      2011-03-07 14:41:10 2011-03-07 14:41:26

 

填加要分析的重做日志文件

SQL> begin

  2  dbms_logmnr.add_logfile(

  3  options=>dbms_logmnr.new,

  4  logfilename=>'c:\archived\ARC00012_0741453732.001');

  5  end ;

  6  /

PL/SQL 过程已成功完成。

SQL>  begin

  2   dbms_logmnr.add_logfile(

  3   options=>dbms_logmnr.addfile,

  4   logfilename=>'c:\archived\ARC00013_0741453732.001');

  5  end;

  6  /

PL/SQL 过程已成功完成。

 

另外两个文件以此方法添加,但是options参数的值必须是dbms_logmnr.addfile,使用dbms_logmnr.new,则会覆盖之前添加的日志文件,视图v$logmnr_logs只能查看最后一次添加的日志文件。

添加完成后可以通过动态性能视图v$logmnr_logs查看日志分析列表中有哪些待分析的日志文件。

 SQL> select filename from v$logmnr_logs;

FILENAME

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

c:\archived\ARC00012_0741453732.001

c:\archived\ARC00013_0741453732.001

c:\archived\ARC00014_0741453732.001

c:\archived\ARC00015_0741453732.001

 

如果有很多的日志文件需要分析,可把每次分析的结果存储到物理表中,分批次进行分析。

六、    启动LogMiner执行分析

 

分析重做日志和归档日志

三种分析方法

 

1、直接分析

SQL> execute dbms_logmnr.start_logmnr(dictfilename=>' c:\logmnr\dict.ora ');

PL/SQL 过程已成功完成。

2、提取特定时间的日志,也可以是SCN.

SQL>  begin

dbms_logmnr.start_logmnr(

dictfilename=>'c:\logmnr\dict.ora',

 starttime=>to_date('2011-03-07 14:39:16','yyyy-mm-dd hh24:mi:ss'),

endtime=>to_date('2011-03-07 14:41:10','yyyy-mm-dd hh24:mi:ss'));

end;

/

PL/SQL 过程已成功完成。

3、使用在线数据字典:

SQL>exec dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);

PL/SQL 过程已成功完成。

查看日志分析结果

 

SQL> select scn,operation,sql_redo,sql_undo from v$logmnr_contents WHERE  seg_na

me='TEST';

 

       SCN OPERATIO SQL_REDO                       SQL_UNDO

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

   1378844 DDL      create table test(id int);

   1378862 INSERT   insert into "SYS"."TEST"("ID") delete from "SYS"."T

                     values ('1');                 EST" where "ID" = '1

                                                   ' and ROWID = 'AAAMs

                                                   cAABAAAO7iAAA';

 

   1378906 UPDATE   update "SYS"."TEST" set "ID" = update "SYS"."TEST"

                     '100' where "ID" = '1' and RO set "ID" = '1' where

                    WID = 'AAAMscAABAAAO7iAAA';     "ID" = '100' and RO

                                                   WID = 'AAAMscAABAAAO

                                                   7iAAA';

 

通过结果得到对表TEST所做DDLDML操作的准确时间,以及数据的变化情况,对数据库的恢复和审计等提供准确、有效的参考信息。

注意:v$logmnr_contents内容保存了日志的内容,只在当前会话有效,如果想长期保存分析,可以在当前会话用create table tablename as select * from v$logmnr_contents语句来持久保存。

七、    结束分析,释放PGA内存资源

SQL> exec dbms_logmnr.end_logmnr;

PL/SQL 过程已成功完成。

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12751636/viewspace-688885/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2010-07-14

  • 博文量
    15
  • 访问量
    21067