千家信息网

LogMiner工具小结

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,(一)LogMiner工具的作用Logminer工具主要用来分析redo log和archive log文件。通过该工具,可以轻松获得Oracle redo log和archive log文件的具体内
千家信息网最后更新 2026年11月01日LogMiner工具小结

(一)LogMiner工具的作用
Logminer工具主要用来分析redo log和archive log文件。通过该工具,可以轻松获得Oracle redo log和archive log文件的具体内容,甚至,可以获得用户对数据库进行的DDL、DML操作。另外还可分析得到一些需要回滚的sql语句。该工具特别适合调试、审计以及回退某个特定的对象。Logminer的作用总结如下:
1.跟踪数据库的变化,可以离线跟踪数据的变化,而不会影响在线的性能;
2.回退数据库的变化,回退特定的变化的数据,减少point-in-time recovery的执行 ;
3.确定事物级要执行的精细逻辑恢复操作,通过查询log,取得需要的undo语句;
4.审计,查看具体用户对数据库做的具体操作。

注意:
1.LogMiner不支持IOT表、Long、LOB及集合类型;

(二)如何使用
(1)安装LogMiner
通常在安装数据库后就已经安装了Logminer,要查看数据库是否安装了LogMiner,只需查看数据库中是否已经有了dbms_logmnr和dbms_logmnr_d这2个package,如果有了,则已经安装,如果没有,执行下面两个脚本即可:

$ORACLE_HOME/rdbms/admin/dbmslm.sql$ORACLE_HOME/rdbms/admin/dbmslmd.sql

需要注意,两个脚本须用DBA用户身份运行。第1个脚本用来创建dbms_logmnr包,该包用来分析日志文件,第2个脚本用来创建dbms_logmnr_d包,该包用来创建数据字典文件。

创建完成后数据库中将多出4个procedure和3个view,具体如下:
1. dbms_logmnr_d.build :创建一个数据字典文件;
2. dbms_logmnr.add_logfile :添加日志文件以供分析;
3. dbms_logmnr.start_logmnr :开始分析日志文件;
4. dbms_logmnr.end_logmnr :结束分析日志文件;

1.v$logmnr_dictionary :显示字典文件的信息;
2.logmnr_logs :在LogMiner启动时显示要分析的日志列表;
3.logmnr_contents :Logminer启动后,可以使用该view查看日志文件的内容。
需要注意,这里的view是session相关,其它session是查看不到的,仅仅可以在当前session中查看。

(2)如果要分析归档数据,需要数据库需处于归档模式下,通过如下命令查看归档模式

SQL> archive log list;数据库日志模式            存档模式自动存档             启用存档终点            /home/app/oracle/oradata/orcl/arch_log最早的联机日志序列     46下一个存档日志序列   49当前日志序列           49

(3)创建数据字典之前需要修改spfile参数utl_executefile_dir,由于是静态参数需要重启数据库

SQL> create directory utlfile as '/home/oracle/logmnr'; Directory createdSQL> alter system set utl_executefile_dir = '/home/oracle/logmnr' scope=spfile;

(4)生成数据字典文件(可选)
在使用LogMiner工具之前,可以使用dbms_logmnr_d.build创建一个数据字典文件,创建该文件的目的是将数据字典导出为一个文本文件,该文件是可选的,但是如果没有该文件,LogMiner解释出的关于数据字典中的部分,如表名、列名、元数据将会以16进制的形式展现,我们是无法理解的。
需要注意的是,如果我们要分析的数据库中的表发生了变化,影响到数据字典信息也发生了变化,那么我们在进行分析时,就需要重新生成数据字典文件。
创建数据字典文件需要以dba身份进行,创建到上面建好的logmnr文件中

begindbms_logmnr_d.build(dictionary_filename=>'dict.ora',dictionary_location=>'/home/oracle/logmnr',options=>dbms_logmnr_d.store_in_flat_file);end;/

(5)加入需要分析的日志文件
LogMiner可以对重做日志文件(redo log)和归档日志文件(archive log)进行分析,加入要分析的日志文件使用dbms_logmnr.add_logfile过程,第一个文件使用参数dbms_logmnr.NEW参数,后面的文件使用dbms_logmnr.ADDFILE参数。
step1:创建列表,添加第1个文件:

BEGIN  dbms_logmnr.add_logfile(logfilename=>'/home/app/oracle/oradata/orcl/arch_log/1_49_936489730.dbf',options=>dbms_logmnr.NEW);END;/

step2:添加其它文件到列表

BEGIN  dbms_logmnr.add_logfile(logfilename=>'/home/app/oracle/oradata/orcl/arch_log/1_50_936489730.dbf',options=>dbms_logmnr.ADDFILE);  dbms_logmnr.add_logfile(logfilename=>'/home/app/oracle/oradata/orcl/arch_log/1_51_936489730.dbf',options=>dbms_logmnr.ADDFILE);END;/

(6)使用Logminer文件进行分析

LogMiner分析日志文件可以设置限制条件,也可不设置限制条件,不设置限制条件会对加载的全部日志文件进行分析,设置了限制条件,只会对符合条件的日志进行分析。

(6.1)不限制条件

EXECUTE dbms_logmnr.start_logmnr(dictfilename=>'/home/oracle/logmnr/dict.ora');

(6.2)有限制条件

通过对dbms_logmnr.start_logmnr中几个不同参数的设置,可以缩小要分析的日志文件的范围,通过设置起始时间和终止时间参数,我们可以限制只
分析某一个时间段内的日志文件。
参数:

参数 类型 默认值 解释

-------------- ----------- -------------- ------------------------------------------------
StartScn number 0 分析日志文件中scn > StartScn的日志文件
EndScn number 0 分析日志文件中scn < EndScn的日志文件
StartTime date 1998-01-01 分析日志文件中时间戳 > StartTime的日志文件
EndTime date 2988-01-01 分析日志文件中时间戳 < EndTime的日志文件
DictFileName varchar() 数据字典文件的位置

(7)观察分析结果
通过第(6)步,我们已经得到了重做日志文件的内容,通过动态数据字典v$logmnr_contents可以查看到所有的信息。

select * from v$logmnr_contents;

v$logmnr_contents的部分栏位信息:

栏位 解释
--------------------------- ------------------------------------

SCN 查询的特定数据的SCN号
TIMESTAM 数据改变发生的时间
COMMIT_TIMESTAMP 数据改变提交的时间
SEG_OWNER 数据发生改变的段名称
SEG_NAME 段的所有者的名称
SEG_TYPE 数据发生改变的段类型
SEG_TYPE_NAME 数据发生改变的段类型名称
TABLE_SPACE 变化段的表空间
ROW_ID 数据变化行的ID
SESSION_INFO 数据发生变化时会话信息
OPERATION 日志中记录的操作
SQL_REDO 日志中记录的指定行变化的SQL语句(正向操作)
SQL_UNDO 为重做日志记录回退或恢复制定行变化的SQL语句

(三)一次LogMiner使用测试

(1)查看归档,下一个归档log是53

SQL> archive log listDatabase log mode           Archive ModeAutomatic archival           EnabledArchive destination           /home/app/oracle/oradata/orcl/arch_logOldest online log sequence     50Next log sequence to archive   53Current log sequence           53

(2)查看数据字典存放位置

SQL> show parameter utl_file_dirNAME            TYPE        VALUE-------------   --------    -----------------------utl_file_dir    string      /home/oracle/LOGMNR

(3)创建一张测试用的表

SQL> create table test06   2  (  3  id number,  4  name varchar(15)  5  ); Table created SQL> insert into test06 values(1,'lijiaman'); 1 row inserted SQL> insert into test06 values(2,'wangyujie'); 1 row inserted

(4)将redo归档

SQL> alter system switch logfile; System altered

(5)查看归档情况

SQL> archive log listDatabase log mode           Archive ModeAutomatic archival           EnabledArchive destination           /home/app/oracle/oradata/orcl/arch_logOldest online log sequence     50Next log sequence to archive   53Current log sequence           53SQL> archive log list;Database log mode           Archive ModeAutomatic archival           EnabledArchive destination           /home/app/oracle/oradata/orcl/arch_logOldest online log sequence     51Next log sequence to archive   54Current log sequence           54

(6)创建数据字典文件

begindbms_logmnr_d.build(dictionary_filename=>'dictionary.ora',dictionary_location=>'/home/oracle/LOGMNR',options=>dbms_logmnr_d.store_in_flat_file);end;/

(7)添加要分析的归档日志文件
(7.1)先到OS上找到归档文件:

[oracle@localhost LOGMNR]$ cd /home/app/oracle/oradata/orcl/arch_log[oracle@localhost arch_log]$ ls1_49_936489730.dbf  1_50_936489730.dbf  1_51_936489730.dbf  1_52_936489730.dbf  1_53_936489730.dbf

(7.2)创建归档日志文件列表

SQL> begin  2  dbms_logmnr.add_logfile(LogFileName => '/home/app/oracle/oradata/orcl/arch_log/1_53_936489730.dbf',Options => dbms_logmnr.new);  3  end;  4  / PL/SQL procedure successfully completed

(7.3)如果不确定待分析的数据是否在上面添加的归档日志文件中,可以多添加几个

BEGIN  dbms_logmnr.add_logfile(logfilename=>'/home/app/oracle/oradata/orcl/arch_log/1_51_936489730.dbf',options=>dbms_logmnr.ADDFILE);  dbms_logmnr.add_logfile(logfilename=>'/home/app/oracle/oradata/orcl/arch_log/1_52_936489730.dbf',options=>dbms_logmnr.ADDFILE);END;/PL/SQL procedure successfully completed

(8)开始分析

SQL> EXECUTE dbms_logmnr.start_logmnr(dictfilename=>'/home/oracle/LOGMNR/dictionary.ora'); PL/SQL procedure successfully completed

(9)查看结果

SQL> select c.timestamp,c.operation,c.table_space,c.sql_redo,c.sql_undo  from v$logmnr_contents c where c.seg_owner='LIJIAMAN';                                                                                                                                                                                                                                                                                 TIMESTAMP   OPERATION   TABLE_SPACE   SQL_REDO                                                                         SQL_UNDO                                                                         ----------- ----------- ------------- ----------------------------------------------------------------------   --------------------------------------------------------------------------------         2017/4/25 2 DDL                                                                                                                                                                                                                               create table test06                                                                                                                                                                                     (                                                                                                                                                                                                       id number,                                                                                                                                                                                              name varchar(15)                                                                                                                                                                                        )                                                                                                                                                                                                       ;                                                                                                                                                                                                                                                                                                                                                                         2017/4/25 2 INSERT      USERS         insert into "LIJIAMAN"."TEST06"("ID","NAME") values ('1','lijiaman');     delete from "LIJIAMAN"."TEST06" where "ID" = '1' and "NAME" = 'lijiaman' and ROW        2017/4/25 2 INSERT      USERS         insert into "LIJIAMAN"."TEST06"("ID","NAME") values ('2','wangyujie');    delete from "LIJIAMAN"."TEST06" where "ID" = '2' and "NAME" = 'wangyujie' and RO



文件 数据 日志 分析 字典 数据库 变化 参数 条件 限制 工具 信息 时间 模式 类型 脚本 语句 存档 内容 名称 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 手冲咖啡和咖啡机区别 互联网科技企业 广东猪兼强互联网科技有限公司 互联网是第几次科技革命的成果 互联网科技活动banner 互联网科技有限公司经营范围 云电互联网科技 上海致骋互联网科技 左右互联网络科技 互联网科技公司做什么 新华互联网科技2019 移动互联网科技公司 互联网媒体平台算高科技产业 乌鲁木齐新华智原互联网科技学校 东莞新华互联网科技学校 从那以后互联网科技有限公司 银川新华互联网科技学校是国营吗 互联网科技的前景 互联网领先科技成果宣传视频 伍佰万互联网科技是干嘛的 重生之互联网科技帝国 互联网科技公司名称 深圳市运趣互联网科技有限公司 中国的互联网科技企业的崛起 消费医药和互联网科技 华中科技大学互联网的牛人 互联网科技快讯热点 张家口科技产业互联网平台 保山浩联互联网科技有限公司 东风日产互联网科技公司叫什么
0