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状态下,开启归档模式,最好打开数据库:
//cmd下连接数据库
C:\Users\Administrator>sqlplus sys/@orcl as sysdba //连接成功后,查看归档模式
SQL> archive log list;
Database log mode No Archive Mode //非归档模式
... //关闭数据库
SQL> shutdown immediate;
... //以mount状态启动数据库
SQL> startup mount;
...
SQL> alter database archivelog;//启动归档模式
Database altered. SQL> archive log list;
Database log mode Archive Mode //此时已是归档模式 //打开数据库
SQL> alter database open;
(2)、安装Logminer
首先,需要确定您安装的oracle版本的数据库是否具备Logminer,在安装目录下查看,即$ORACLE_HOME/rdbms/admin下是否有dbmslm.sql、dbmslmd.sql,我安装目录下的两个文件:
D:\app\admin\product\11.2.\dbhome_1\RDBMS\ADMIN\dbmslm.sql
D:\app\admin\product\11.2.\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(,),USERNAME VARCHAR2()); SELECT * FROM WY_TEST; -- 此时查询内容为空 -- 插入两条数据
INSERT INTO WY_TEST(ID,USERNAME) VALUES(,'WY01');
INSERT INTO WY_TEST(ID,USERNAME) VALUES(,'WY02');
COMMIT; SELECT * FROM WY_TEST; -- 查询验证插入是否成功 -- 修改内容
UPDATE WY_TEST SET USERNAME='WY03' WHERE ID=;
COMMIT; SELECT * FROM WY_TEST; -- 查询验证修改是否成功 --删除内容
DELETE FROM WY_TEST WHERE ID=;
COMMIT; SELECT * FROM WY_TEST; -- 此时表中内容:ID=,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
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);
end;
/

从截图中可以看到,执行的效果和分析Redo Log的结果相同
欢迎大家补充指导,共同学习!
Oracle Logminer 分析重做日志RedoLog和归档日志ArchiveLog的更多相关文章
- DBA_Oracle LogMiner分析重做和归档日志(案例)
2014-08-19 Created By BaoXinjian
- Oracle归档日志与非归档日志的切换及路径设置
--==================== -- Oracle 归档日志 --==================== Oracle可以将联机日志文件保存到多个不同的位置,将联机日志转换为归档日志的 ...
- Oracle logminer 分析redo log(TOAD与PLSQL)
Oracle logminer 分析redo log Oracle 11g r2 RAC centos 6.5 设置时间格式 select to_char(sysdate,'yyyy-mm-dd hh ...
- ORACLE 11G 单实例 磁盘文件系统 DG 归档日志删除脚本 基于RED HAT LINUX 5.3 X86 64BIT
近期做个DG的归档日志删除, [oracle@.local logs]crontab -l * 8 * * * sh /home/oracle/dbscripts/del_arc.sh 该脚本分别调用 ...
- 【Oracle】开、关、删归档日志(archivelog)
归档日志:当redo日志发生切换时,归档进程(ARCn)会把redo日志自动归档,产生归档日志. 1.启动归档模式 –确定数据库为非归档模式 SYS@LGR> archive log list; ...
- Oracle数据库重做日志及归档日志的工作原理说明
Oracle数据库重做日志及归档日志的工作原理: lgwr进程将redo log buffer中的重做数据写入到redo log中,此时的redo log分组,每当一个redo log group写满 ...
- oracle归档日志的操作
oracle利用重做日志文件记录对数据库的操作.可是重做日志文件组是循环使用的,当所有的日志文件都被填满时,系统自己主动切换到第一组日志文件,当然数据库管理员也能够使用命令手 ...
- oracle 归档日志总结
Oracle 归档模式和非归档模式 归档模式和非归档模式 在DBA部署数据库之初,必须要做出的最重要决定之一就是选择归档模式(ARCHIVELOG)或者非 归档模式(NOARCHIVELOG )下运行 ...
- Oracle 归档日志管理
一.Oracle日志介绍 1.Oracle日志分类 分三大类: Alert log files--警报日志,Trace files--跟踪日志(用户和进程)和 redo log ...
随机推荐
- JAVA每日一旅
1.关于final关键字 final修饰的成员变量为基本数据类型时,在赋值之后无法改变.当final修饰的成员变量为引用数据类型时,在赋值后其指向地址无法改变,但是对象内容还是可以改变的. final ...
- Daily Scrum - 11/26
Meeting Minutes 今天是Sprint 3第一天,任烁向我们交代了他那边的代码情况,他这两天回学校有点事,人千和章玮暂时先熟悉一下他写的那部分,正在试图将代码merge起来.重阳实现了进度 ...
- FPGA---Basys3(实验内容汇总贴)
前言 本博文为FPGA---Basys3入门板的实验汇总帖子. 实验指导书 实验源码github地址 实验目录 组合逻辑电路设计 编码器 比较器 全加器 时序逻辑电路设计 D 触发器的实现 同步复位的 ...
- 原生 js 封装get ,post, delete 请求
现在的项目中都在用VUE 以及react 等MVC, MVVM 框架. 丢弃了原始的JQ .不可能为了个$.ajax();而把JQ引进来吧. 在vue1的开发中 提供了 vueResouce, vu ...
- php排序学习之-冒泡排序
原理:对一组数据,比较相邻数据的大小,将值小数据在前面,值大的数据放在后面. (以下都是升序排列,即从小到大排列) 举例说明: $arr = array(6, 3, 8, 2, 9, 1); $a ...
- c语言基础——基本数据类型
1.基本数据类型是什么?包括有哪些代表?除了基本数据类型还有什么其他类型形式? (1)基本数据类型--用于描述基本的数据 (数.日期等) (2)有整型.实型.字符型.枚举类型等等 ========== ...
- 51Nod 1199 Money out of Thin Air (树链剖分+线段树)
1199 Money out of Thin Air 题目来源: Ural 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 收藏 关注 一棵有N个节点的树,每 ...
- 解决 Previous operation has not finihsed; run ‘cleanup’ if it was interrupted Please execute the ‘Cleanup’ command
更新时遇到这个问题,解决方法如下: 把根目录下的.svn目录删除掉,再checkout,然后就会出现下面的加version的action. 疯吻IT
- jupyter notebook添加Anaconda虚拟环境的python kernel
之前在自己博客上写了一个如何通过自建配置文件,让jupyter notebook可以调用conda虚拟环境的python解释器. 今天介绍一种更加简单的方式,无需手动配置文件,利用ipykernel可 ...
- 5: EL 表达式小结
1.EL表达式的语法格式很简单: 以前编写jsp代码时,如果要获取表单中的用户名,一般使用 <%=request.getParameter("name")%> ,这样 ...