[Oracle]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 created SQL> alter system set utl_executefile_dir = '/home/oracle/logmnr' scope=spfile;
(4)生成数据字典文件(可选)
在使用LogMiner工具之前,可以使用dbms_logmnr_d.build创建一个数据字典文件,创建该文件的目的是将数据字典导出为一个文本文件,该文件是可选的,但是如果没有该文件,LogMiner解释出的关于数据字典中的部分,如表名、列名、元数据将会以16进制的形式展现,我们是无法理解的。
需要注意的是,如果我们要分析的数据库中的表发生了变化,影响到数据字典信息也发生了变化,那么我们在进行分析时,就需要重新生成数据字典文件。
创建数据字典文件需要以dba身份进行,创建到上面建好的logmnr文件中
begin
dbms_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 list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /home/app/oracle/oradata/orcl/arch_log
Oldest online log sequence 50
Next log sequence to archive 53
Current log sequence 53
(2)查看数据字典存放位置
SQL> show parameter utl_file_dir NAME 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 list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /home/app/oracle/oradata/orcl/arch_log
Oldest online log sequence 50
Next log sequence to archive 53
Current log sequence 53
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /home/app/oracle/oradata/orcl/arch_log
Oldest online log sequence 51
Next log sequence to archive 54
Current log sequence 54
(6)创建数据字典文件
begin
dbms_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]$ ls
1_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 ('','lijiaman'); delete from "LIJIAMAN"."TEST06" where "ID" = '' and "NAME" = 'lijiaman' and ROW
2017/4/25 2 INSERT USERS insert into "LIJIAMAN"."TEST06"("ID","NAME") values ('','wangyujie'); delete from "LIJIAMAN"."TEST06" where "ID" = '' and "NAME" = 'wangyujie' and RO
[Oracle]LogMiner工具小结的更多相关文章
- Linux 常用工具小结:(5) lftp工具使用
Linux 常用工具小结:(1) lftp工具使用. 这里会按照一些比较常用的功能列出,并举一个具体的例子逐一解释功能. 通常使用ftp过程是登陆ftp,浏览ftp内容,下载ftp文件,或者上传ftp ...
- 1、图解Oracle Logminer配置使用
LogMiner配置使用手册 1 Logminer简介 1.1 LogMiner介绍 Oracle LogMiner 是Oracle公司从产品8i以后提供的一个实际非常有用的分析工具,使用该工具可以轻 ...
- oracle logminer全解析
今天写篇原创的,把在工作中遇到的logminer问题总结下 (1)简介: logminer 工具即可以用来分析在线,也可以用来分析离线日志文件,即可以分析本身自己数据库的重作日志文件,也可以用来分析其 ...
- 总结:基于Oracle Logminer数据同步
第 1 页 共 20 页 出自石山园主,博客地址:http://www.cnblogs.com/shishanyuan LogMiner 配置使用手册 1 Logminer 简介 1.1 LogMin ...
- Oracle TRCA 工具(转)
本篇文章主要介绍了"Oracle TRCA 工具 说明 ",主要涉及到Oracle TRCA 工具 说明 方面的内容,对于Oracle TRCA 工具 说明 感兴趣的同学可以参考一 ...
- Oracle TRCA 工具 说明 10046
本篇文章主要介绍了"Oracle TRCA 工具 说明 ",主要涉及到Oracle TRCA 工具 说明 方面的内容,对于Oracle TRCA 工具 说明 感兴趣的同学可以参考一 ...
- 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 ...
- Python自然语言处理工具小结
Python自然语言处理工具小结 作者:白宁超 2016年11月21日21:45:26 目录 [Python NLP]干货!详述Python NLTK下如何使用stanford NLP工具包(1) [ ...
- Oracle客户端工具出现“Cannot access NLS data files or invalid environment specified”错误的解决办法
Oracle客户端工具出现"Cannot access NLS data files or invalid environment specified"错误的解决办法 方法一:参考 ...
随机推荐
- KoaHub.JS用于Node.js的cron作业调度程序代码
node-schedule A cron-like and not-cron-like job scheduler for Node. Node Schedule Announcement: ...
- SQL一次查出相关类容避免长时间占用表(上)
/* server: db: EDI */ -- 以下案例多次查询同一张表,仅有组合条件Name+Direction不同 --可以使用一次查出相关类容避免长时间占用表 USE EDI GO DECLA ...
- 浅谈python 手机crash和app crash循环执行问题
----------------引子---------------- app自动化测试人员经常遇见的问题,第一:手机抛的异常导致脚本循环停止!!!!!!!!第二:app抛的异常导致脚本循环停止!!!! ...
- 机器学习基石 4 Feasibility of Learning
机器学习基石 4 Feasibility of Learning Learning is Impossible? 机器学习:通过现有的训练集 \(D\) 学习,得到预测函数 \(h(x)\) 使得它接 ...
- final 、finally 和 finalize()的区别
1. final 是一个关键字.可以修饰数据.方法.类. 1)final 数据:final 用来修饰一个永不改变的编译时常量,或者运行时初始化但是不希望被改变的常量.一个既是 static又是 fin ...
- Fibonacci数列前n项值的输出(运用递归算法)
1.斐波那契数列: 又称黄金分割数列,指的是这样一个数列:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ... 在数学上,斐波纳契数列以如下被以递归的方法 ...
- JavaScript实现常见排序算法
列表 冒泡排序 选择排序 插入排序 快速排序 希尔排序 归并排序 冒泡排序 // 输入:[5, 6, 3, 4, 8, 0, 1, 4, 7] // 输出:[0, 1, 3, 4, 4, 5, 6, ...
- 分享几个不错的Android开源音视频播放器
整理了一下Github上几个开源的音视频播放器项目,有兴趣的同学可以clone代码去研究学习. UniversalMusicPlayer https://github.com/googlesamp ...
- Arrays工具类的实用功能
- csvkit---python一个牛逼到不行的csv处理库
先吐槽一下:不管是百度还是谷歌,查来查去除了官方文档之外就没有任何可以借鉴的例子,虽然官方文档写的挺好的.但是我一直以为是在python语言的方式运行的,结果是以命令行的方式运行的,搞得我还以为这个库 ...