Oracle Logminer 分析重做日志RedoLog和归档日志ArchiveLog

在实际开发过程中,有时我们很有可能需要某个表的操作痕迹,或通过记录的SQL语句进行有目的性的数据恢复(此时POINT-IN-TIME恢复已经满足不了更细的粒度)、或仅仅是查看;

据说Oracle8i之后,就提供了Logminer日志分析工具,虽然没有GUI图形化的界面,但也阻挡不了使用他的决心。

Oracle11g下使用的情况:

(1)、数据库开启归档模式

在安装Logminer之前,我们先讲数据库设置为归档模式:

注意:如果开启日志分析功能,仅仅是分析系统默认的Redo01.log、Redo02.log、Redo03.log是不够的,因为重做日志是循环填充的方式,下一个循环周期开启就是丢失上一个周期的日志信息,势必需要将重做日志进行归档保存。

windows下利用cmd下sqlplus命令登录oracle,并查看归档模式,如果未归档,需要在mount状态下,开启归档模式,最好打开数据库:

 1 //cmd下连接数据库
 2 C:\Users\Administrator>sqlplus sys/123456@orcl as sysdba
 3
 4 //连接成功后,查看归档模式
 5 SQL> archive log list;
 6 Database log mode              No Archive Mode //非归档模式
 7 ...

 9 //关闭数据库
10 SQL> shutdown immediate;
11 ...

13 //以mount状态启动数据库
14 SQL> startup mount;
15 ...
16 SQL> alter database archivelog;//启动归档模式
17 Database altered.

19 SQL> archive log list;
20 Database log mode              Archive Mode //此时已是归档模式

22 //打开数据库
23 SQL> alter database open; 

(2)、安装Logminer

首先,需要确定您安装的oracle版本的数据库是否具备Logminer,在安装目录下查看,即$ORACLE_HOME/rdbms/admin下是否有dbmslm.sql、dbmslmd.sql,我安装目录下的两个文件:

1 D:\app\admin\product\11.2.0\dbhome_1\RDBMS\ADMIN\dbmslm.sql
2 D:\app\admin\product\11.2.0\dbhome_1\RDBMS\ADMIN\dbmslmd.sql

执行安装命令(使用具有dba的权限来执行安装,可以用sys用户登录,然后执行SQL>grant dba to SCOTT;,这样scott用户就具有dab的权限)

安装成功后,可以在PL/SQL Developer 的左边对象Objects导航中的Packages包下会找到DBMS_LOGMNR、DBMS_LOGMNR_D包,其中:

DBMS_LOGMNR:用来分析日志文件

DBMS_LOGMNR_D:用来创建数据字典文件

(3)、创建数据字典文件

数据字典文件中会包括数据库的DB_ID,以及编码格式,如果不创建数据字典文件,默认解析的日志信息均以16进制编码格式进行展示,无法直观理解,下面我们使用命令创建数据字典文件:

需要创建数据字典目录和数据字典文件

首先,创建数据字典目录

CREATE DIRECTORY utlfile AS ‘D:\app\admin\oradata\orcl\LOGMNR‘;

alter system set utl_file_dir=‘D:\\app\admin\oradata\orcl\LOGMNR‘ scope=spfile;  

同时,开启附加日志模式,关于附加日志supplemental log的解释:可以指示数据库在日志中添加额外信息到日志流中,以支持基于日志的工具,如逻辑standby、streams、GoldenGate、LogMiner。

alter database add supplemental log data;

进行到此时,需要重启下数据库,因为在添加字段目录的时候,我们使用的是‘scope=spfile‘,即下次启动时生效。

//关闭数据库
SHUTDOWN IMMEDIATE;

//启动数据库
STARTUP;

如果想验证数据字典是否设置成功,可以在命令行输入以下命令,查看:(出现下面截图所示可表示设置目录成功)

SHOW PARAMETER utl_file_dir;

创建好目录后,继续使用具有dba权限的SCOOT用户,创建数据字典文件:

EXECUTE dbms_logmnr_d.build(dictionary_filename => ‘dictionary.ora‘, dictionary_location =>‘D:\app\admin\oradata\orcl\LOGMNR‘);

(4)、分析日志文件

SCOTT用户下,对数据进行一些操作

-- 创建简单表
create table WY_TEST(ID NUMBER(10,0),USERNAME VARCHAR2(10)); 

SELECT * FROM WY_TEST; -- 此时查询内容为空

-- 插入两条数据
INSERT INTO WY_TEST(ID,USERNAME) VALUES(1,‘WY01‘);
INSERT INTO WY_TEST(ID,USERNAME) VALUES(2,‘WY02‘);
COMMIT;

SELECT * FROM WY_TEST; -- 查询验证插入是否成功

-- 修改内容
UPDATE WY_TEST SET USERNAME=‘WY03‘ WHERE ID=2;
COMMIT;

SELECT * FROM WY_TEST; -- 查询验证修改是否成功

--删除内容
DELETE FROM WY_TEST WHERE ID=2;
COMMIT;

SELECT * FROM WY_TEST; -- 此时表中内容:ID=1,USERNAME=‘WY01‘

据介绍,当表数据发生变化后,需要重新创建数据字典文件,所以,此时,我们需要重新执行下创建数据文件的语句:

EXECUTE dbms_logmnr_d.build(dictionary_filename => ‘dictionary.ora‘, dictionary_location =>‘D:\app\admin\oradata\orcl\LOGMNR‘);

此时,开始加载日志文件进行分析,您可以加载当前正在使用的日志文件,也可以像我这样,把三个重做日志文件均加载进去;

SQL> begin
 2  dbms_logmnr.add_logfile(LogFileName=>‘D:\app\admin\oradata\orcl\REDO01.LOG‘,Options=>dbms_logmnr.NEW);
 3  END;
 4  /

SQL> BEGIN
 2  dbms_logmnr.add_logfile(LogFileName=>‘D:\app\admin\oradata\orcl\REDO02.LOG‘,Options=>dbms_logmnr.ADDFILE);
 3  dbms_logmnr.add_logfile(LogFileName=>‘D:\app\admin\oradata\orcl\REDO03.LOG‘,Options=>dbms_logmnr.ADDFILE);
 4  END;
 5  /

接下来,使用Logminer对日志文件进行分析

SQL> Execute dbms_logmnr.start_logmnr(DictFileName=>‘D:\app\admin\oradata\orcl\LOGMNR\dictionary.ora‘);

执行命令成功后,我们可以在v$logmnr_contents视图中进行查看到操作的日志内容

SQL> SELECT sql_redo, sql_undo from v$logmnr_contents where seg_name=‘WY_TEST‘;

从截图中,可以看到所有执行的痕迹,以及撤销此步骤的UNDO SQL,从这点看出,日志分析还是非常有用的。

上面提到过,如果可以‘分析’当前正在使用的Redo Log,通过下面的语句查询

SELECT GROUP#,SequencE#,status,first_change# from v$LOG ORDER BY FIRST_CHANGE#;

从运行的截图中可以看到,当前使用的是Redo03.Log,所以在上面使用Logminer进行分析的时候,仅需要加载Redo03.Log日志文件进行分析即可

(5)、分析归档日志文件

我们知道,只有到Redo Log写满后进行自动切换时,如果数据库开启归档模式,会将已满的Redo Log写入到归档日志中,我们也可以手动进行切换(通常,多执行几次)

ALTER SYSTEM SWITCH LOGFILE;

我们执行后,会发现,flash_recovery_area目录下会出现orcl\ArchiveLog目录(没有设置归档的目录,默认是在flash_recovery_area下面)

注:可以通过以下方式,查询到归档日志目录

select sequence#, FIRST_CHANGE#, NEXT_CHANGE#,name from v$archived_log order by sequence# desc

此时,我只要选择将最新的归档日志进行分析,即可

SQL> begin
  2  dbms_logmnr.add_logfile(LogFileName=>‘D:\app\admin\flash_recovery_area\orcl\ARCHIVELOG\2017_08_19\O1_MF_1_18_DSH8OJF9_.ARC‘,options=>dbms_logmnr.new);
  3  end;
  4  /

从截图中可以看到,执行的效果和分析Redo Log的结果相同

欢迎大家补充指导,共同学习!

时间: 2024-10-13 15:59:44

Oracle Logminer 分析重做日志RedoLog和归档日志ArchiveLog的相关文章

oracle 11g 之LogMiner分析重做日志实践

1.安装LogMiner 以DBA用户身份运行下面2个脚本: dbmslm.sql用来创建DBMS_LOGMNR包,该包用来分析日志文件. SQL> @$ORACLE_HOME/rdbms/admin/dbmslm.sql; Package created. Grant succeeded. Synonym created. dbmslmd.sql用来创建DBMS_LOGMNR_D包,该包用来创建数据字典文件. SQL> @$ORACLE_HOME/rdbms/admin/dbmslmd.sq

ORACLE 11G 单实例 磁盘文件系统 DG 归档日志删除脚本 基于RED HAT LINUX 5.3 X86 64BIT

近期做个DG的归档日志删除, [[email protected] logs]crontab -l * 8 * * * sh /home/oracle/dbscripts/del_arc.sh 该脚本分别调用 生成 删除 校验 三个脚本 cat del_arc.sh #! /bin/bash source /home/oracle/.bash_profile sh /home/oracle/dbscripts/build_del_archivelog.sh >> /home/oracle/db

使用LogMiner分析oracle的redo日志和归档

Oracle LogMiner 是Oracle公司从产品8i以后提供的一个实际非常有用的分析工具,使用该工具可以轻松获得Oracle 在线/归档日志文件中的具体内容,特别是该工具可以分析出所有对于数据库操作的DML和DDL语句.该工具特别适用于调试.审计或者回退某个特定的事务. LogMiner分析工具实际上是由一组PL/SQL包和一些动态视图(Oracle8i内置包的一部分)组成,它作为Oracle数据库的一部分来发布是8i产品提供的一个完全免费的工具.但该工具和其他Oracle内建工具相比使

Oracle数据库从RMAN备份集片段还原指定单个归档日志进行日志挖掘分析

起因:业务已知在之前某个时间点范围内发生了可疑异常操作,希望通过日志挖掘来审查SQL动作 现状:生产库在线归档已备份后删除,RMAN归档备份已经刷出超期的备份集文件 需求:通过RMAN还原归档到线上以进行日志挖掘 定位归档日志涉及范围: select * from v$archived_log l where to_date('2018-11-12 16:18:51','yyyy-mm-dd hh24:mi:ss') between L.FIRST_TIME and L.NEXT_TIME; 假

logminer挖掘归档日志,针对DDL误操作的恢复

日志挖掘,未开启补充日志功能,利用归档对DDL操作进行恢复:        Oracle   的日志文件中,对于表等用户对象(Object),并不是保存名字,而是保存一个ID号.建立字典文件的目的就是使logminer在分析时可以将Object   ID翻译成我们所熟悉的对象名.       建立字典文件之前,先要确保数据库的初始化参数   UTL_FILE_DIR   已经正确地设置.通过命令可以查看是否有字典文件:show parameters utl_file_dir; [email pr

Oracle 归档日志

Oracle可以将联机日志文件保存到多个不同的位置,将联机日志转换为归档日志的过程称之为归档.相应的日志被称为归档日志. 一.归档日志 是联机重做日志组文件的一个副本 包含redo记录以及一个唯一的log sequence number 对日志组中的一个日志文件进行归档,如果该组其中一个损坏,则另一个可用的日志将会被归档 对于归档模式的日志切换,当日志归档完成后,下一个日志才能被覆盖或重新使用 自动归档功能如开启,则后台进程arcn在日志切换时自动完成归档,否则需要手动归档 归档日志用途 恢复数

9. Oracle 归档日志

转载自:http://blog.csdn.net/leshami/article/details/5784713 Oracle可以将联机日志文件保存到多个不同的位置,将联机日志转换为归档日志的过程称之为归档.相应的日志被称为归档日志. 一.归档日志 是联机重做日志组文件的一个副本 包含redo记录以及一个唯一的log sequence number 对日志组中的一个日志文件进行归档,如果该组其中一个损坏,则另一个可用的日志将会被归档 对于归档模式的日志切换,当日志归档完成后,下一个日志才能被覆盖

重做日志与归档日志区别

重做日志redo log file是LGWR进程从Oracle实例中的redo log buffer写入的,是循环利用的.就是说一个redo log file(group) 写满后,才写下一个.归档日志archive log是当数据库运行在归档模式下时,一个redo log file(group)写满后,由ARCn进程将重做日志的内容备份到归档日志文件下,然后这个redo log file(group)才能被下一次使用. 不管数据库是否是归档模式,重做日志是肯定要写的.而只有数据库在归档模式下,

oracle归档日志的操作

oracle利用重做日志文件记录对数据库的操作,但是重做日志文件组是循环使用的,当所有的日志文件都被填满时,系统自动切换到第一组日志文件,当然数据库管理员也可以使用命令手工切换.而在循环使用日志文件时,日志文件中已经存在的日志文件的内容将会被覆盖.为了完整的记录数据库的全部操作,orale提出了归档日志的概念. 如果是非归档日志模式,则切换日志文件时,日志文件中的内容将被新的内容覆盖:如果是归档日志模式,则切换日志文件时,系统会首先对日志文件进行归档存储,之后才允许向文件中写入新的日志内容.'