重庆思庄Oracle、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4521|回复: 2
打印 上一主题 下一主题

[工具] LogMiner监控redo,归档日志工具

[复制链接]
跳转到指定楼层
楼主
发表于 2015-12-11 17:44:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在8i以前我们是没有办法查看redo文件里面的内容的,但在9i以后,Oracle推出了logminer,通过logminer分析我们可以很清楚查看Oracle所做的任何操作,比如我删除一个表,在logminer中可以

看到很详细的操作记录.



1.LogMiner的功能:

  (1)确定数据库的逻辑损坏时间。

   通过LogMiner可以准确定位该误操作的执行时间和SCN值,然后通过基于时间恢复或者基于SCN恢复可以完全恢复该表数据。

   SQL>select scn_to_timestamp(10135546249879) from dual;
   SQL>SELECT timestamp_to_scn(to_timestamp('2013-3-27 6:06:06','yyyy-mm-dd hh24:mi:ss')) FROM dual;

  (2)确定事务级要执行的精细逻辑恢复操作。

   通过LogMiner可以取得任何用户的DML操作及相应的UNDO操作,通过执行UNDO操作可以取消用户的错误操作。

  (3)执行后续审计。

   通过LogMiner可以跟踪Oracle数据库的所有DML、DDL和DCL操作,从而取得执行这些操作的时间顺序、执行这些操作的用户等信息。

2.LogMiner不支持的数据类型和表存储属性

   bfile;
   抽象数据类型;
   集合类型(嵌套表和varray);
   参照对象;
   xmltype;
   具有LOB列的索引组织表;
   使用compress特征的表。
   除以上类型外,基本上都是支持的,不再列举

3.LogMiner的配置要求

   (1)源数据库和分析数据库必须运行在相同硬件平台上;

   (2)分析数据库可以是独立数据库或源数据库;

   (3)分析数据库的版本不能低于源数据库的版本;

   (4)分析数据库与源数据库必须具有相同的字符集;

4.注意事项

   (1)LogMiner字典必须在源数据库中生成

   (2)当分析多个重做日志和归档日志时,它们必须是同一个源数据库的重做日志和归档日志

   (3)当分析多个重做日志和归档日志时,它们必须具有相同的resetlogs scn

   (4)当分析的重做日志和归档日志必须在Oracle8.0版本以上

5.什么是补充日志,补充日志的作用是什么?

  重做日志用于实现例程恢复和介质恢复,这些操作所需要的数据被自动记录在重做日志中。但是,重做应用可能还需要记载其他列信息到重做日志中,记录其他列的日志过程被称为补充日



   默认情况下,Oracle数据库没有提供任何补充日志,从而导致默认情况下LogMiner无法支持以下特征:

  (1)索引簇、链行和迁移行;

  (2)直接路径插入;

  (3)摘取LogMiner字典到重做日志;

  (4)跟踪DDL;

  (5)生成键列的SQL_REDO和SQL_UNDO信息;

  (6)LONG和LOB数据类型。

因此,为了充分利用LogMiner提供的特征,必须激活补充日志。在数据库级激活补充日志的示例如下:

   SQL> alter database add supplemental log data;

        数据库已更改。
注意:激活不用重启数据库,数据库联机即可。


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

沙发
 楼主| 发表于 2015-12-11 17:45:11 | 只看该作者
*********************安装与配置**************************************
1.使用logminer需要运行如下两个文件
$ORACLE_HOME/rdbms/admin/dbmslm.sql
$ORACLE_HOME/rdbms/admin/dbmslmd.sql
SQL> connect sys/sys as sysdba
Connected.
SQL> @/u01/app/oracle/product/10.2.0/db_1/rdbms/admin/dbmslm.sql
Package created.
SQL> @/u01/app/oracle/product/10.2.0/db_1/rdbms/admin/dbmslmd.sql
Package created.

2.修改初始化参数utl_file_dir,指定分析数据的存放处
SQL>alter system set utl_file_dir='/u01/logmine_dir' scope=spfile;
SQL>shutdown immediate
SQL>startup

root>mkdir -p /u01/logmine_dir
root>chown -R oracle:oinstall /u01/logmine_dir

3.创建数据字典文件
begin
sys.dbms_logmnr_d.build(dictionary_filename =>'mylogmine.ora',dictionary_location =>'/u01/logmine_dir',options>=>dbms_logmnr_d.store_in_flat_file);
end;
mylogmine.ora是给字典文件起的文件名(可任意),字典文件的作用是将Oralce内部处理使用的对象编码和内部数据类型转换为可读的对象名称和类型.例如这个SQL
INSERT INTO HR.JOBS(JOB_ID, JOB_TITLE, MIN_SALARY, MAX_SALARY)  VALUES('IT_WT','Technical Writer', 4000, 11000);
若没有创建数据字典文件的文件的话,logminer出来的记录内容如下:
insert into "UNKNOWN"."OBJ# 45522"("COL 1","COL 2","COL 3","COL 4") values
(HEXTORAW('45465f4748'),HEXTORAW('546563686e6963616c20577269746572'),
HEXTORAW('c229'),HEXTORAW('c3020b'));

4.这个时候我们使用某个用户登录数据库后删除某个表
SQL>create table hr.t1 as select * from hr.test;
SQL>drop table hr.t1;
SQL>alter system switch logfile;
这个时候会产生一个归档日志文件,刚才删除表的操作就在这个文件里
+FRA/orcl/archivelog/2015_12_11/        下面的新生产的文件

5.分析归档日志
创建列表
begin
  sys.dbms_logmnr.add_logfile(LogFileName => '+FRA/orcl/archivelog/2015_12_11/thread_1_seq_49.357.898139077',
                              Options     => dbms_logmnr.new);
end;
这里的归档日志文件thread_1_seq_49.357.898139077就是我们刚才switch生成的日志文件.
当然还可以添加其他归档日志,看分析的需要,我们这里只分析一个归档日志文件.
添加其他归档日志分析的过程如下:
begin
  dbms_logmnr.add_logfile(LogFileName => '+FRA/orcl/archivelog/2015_12_11/thread_1_seq_49.357.898139237',
                          Options     => dbms_logmnr.addfile);
end;
6.开始使用LogMiner进行日志分析

分析整个日志文件(没有任何条件)
begin
  sys.dbms_logmnr.start_logmnr(DictFileName =>'/u01/logmine_dir/mylogmine.ora');
end;

若大概知道某个操作发生的时间,可以按照需要时间分析的过程如下:
begin
  sys.dbms_logmnr.start_logmnr(DictFileName =>'/u01/logmine_dir/mylogmine.ora',
                              startTime => to_date('2012-07-04 15:00:00','YYYY-MM-DD HH24:MI:SS'),
                              endTime => to_date('2012-07-04 16:00:00','YYYY-MM-DD HH24:MI:SS')
                              );
end;
我们这里分析的是整个日志文件,分析完成后,查看V$LOGMNR_CONTENTS试图的内容就是我们刚才分析得到的内容.注意V$LOGMNR_CONTENTS的内容是保留在PGA中的,查看这个试图需要在跟执行分

析的过程在一个session中,否则在另外开一个session是查看不到的,而且会报ORA-01306错误.
从V$LOGMNR_CONTENTS视图中可以查看得到我们刚才删除表的操作:
SQL>select sql_redo from V$LOGMNR_CONTENTS
    where upper(sql_redo) like '%HR.T1%'
                                                -----注意大写
7.结束分析
begin
  sys.dbms_logmnr.end_logmnr;
end;

使用logminer的一些说明:
1.分析日志所在的数据库平台必须跟产生日志的数据库平台保持一致;
2.分析日志所在的数据库可以跟产生日志的数据库完全独立,或者是两者是同一个数据库;
3.分析日志所在的数据库的版本比如高于产生日志的数据库的版本;
4.分析日志所在的数据库的字符集必须跟产生日志的数据库的字符集保持一致;
5.logminer数据字典文件必须在产生日志的数据库生成.
回复 支持 反对

使用道具 举报

板凳
发表于 2015-12-11 19:05:49 | 只看该作者
能看到具体的分析例子就好了.

实际在另外的机器去做过分析没有?

数据字典,从9i开始,就可以不用创建了.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2024-5-13 04:21 , Processed in 0.106579 second(s), 22 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表