前几天去面试ORACLE DBA 面试官问我这样一个问题:在生产环境中,有一个表,里面没有日期相关的字段,最后一次修改这个表可能在一个月前,你如何找出这个表最后修改的记录。我听到这个题目蒙了,我想到了如果能够分析数据库归档日志就好了,于是就这样答了一句,就答不上来了,回来后上网查了下才知道可以通过logminger分析,下面是我今天整理的使用笔记

1.安装LOGMNR包,脚本在$ORACLE_HOME/rdbms/admin路径下

SQL> @/u01/app/oracle/product/11.2.0/rdbms/admin/dbmslm.sql

Package created.

Grant succeeded.

Synonym created.

SQL> @/u01/app/oracle/product/11.2.0/rdbms/admin/dbmslmd.sql

Package created.

Synonym created.

SQL> @/u01/app/oracle/product/11.2.0/rdbms/admin/dbmslms.sql

Package created.

No errors.

Grant succeeded.

SQL>

2.设定UTL_FILE_DIR的初始值,该参数值为服务器中放置数据字典文件的目录,若过设置的目录不存在,需要创建。

SQL> alter system set utl_file_dir='/u01/app/oracle/dict/logs' scope=spfile;

System altered.

SQL> host mkdir -p /u01/app/oracle/dict/logs

SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup

ORACLE instance started.

Total System Global Area  434249728 bytes

Fixed Size                  2214096 bytes

Variable Size             339740464 bytes

Database Buffers           88080384 bytes

Redo Buffers                4214784 bytes

Database mounted.

Database opened.

重启完成检查修改是否生效

SQL> show parameter utl_file_dir

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

utl_file_dir                         string      /u01/app/oracle/dict/logs

3.通过oracle提供的包dbms_logmnr_d创建数据字典文件,通过调用存储过程build来创建,下面贴出了,该过程调用的变量名,这里传入两个变量的值就可以了,变量dictionary_filename为生成字典的名字,变量dictionary_location就是utl_file_dir设置的值

PROCEDURE  build

(dictionary_filename IN VARCHAR2 DEFAULT '',

dictionary_location IN VARCHAR2 DEFAULT '',

options IN NUMBER DEFAULT 0);

在创建数据字典文件前,首先创建一个测试表用作实验分析步骤如下

(1)首先切换下日志,当然这不是必须的

SQL> alter system switch logfile;

System altered.

(2)查看当前在线日志number

SQL> select group#,status from v$log;

GROUP# STATUS

---------- ----------------

1 CURRENT

2 INACTIVE

3 ACTIVE

(3)创建测试表

SQL> create table test_1 (id int, name varchar2(10));

Table created.

(4)插入3行测试数据

SQL> insert into test_1 values (1,'a');

1 row created.

SQL> insert into test_1 values (2,'b');

1 row created.

SQL> insert into test_1 values (3,'c');

1 row created.

SQL> commit;

Commit complete.

(5)我们知道当commit的时候,一定会触发lgwr进程写日志,所以查询当前日志组的文件名,member的值就是我们需要分析的日志,这里1号日志组有2个成员,由于日志成员互为镜像,所以使用其中的一个成员来分析就可以了。

SQL> col member for a30;

SQL> select group#,member from v$logfile where group#=(select group# from v$log where status='CURRENT');

GROUP# MEMBER

---------- ------------------------------

1 +DATA/orcl/onlinelog/group1_1.

ora

1 +FRA/orcl/onlinelog/group1_2.o

ra

(6)执行下面语句生成字典到/u01/app/oracle/dict/logs/dict.ora

SQL> execute dbms_logmnr_d.build(dictionary_filename => 'dict.ora',dictionary_location => '/u01/app/oracle/dict/logs');

PL/SQL procedure successfully completed.

存储过程执行完成后到/u01/app/oracle/dict/logs这个目录下验证是否生成了dict.ora文件

[oracle@localhost logs]$ pwd;ls

/u01/app/oracle/dict/logs

dict.ora

4.数据字典文件成功生成后就可以通过调用dbms_logmnr包提供的存储过程add_logfile来添加需要分析的redo和归档日志,下面是存储过程add_logfile的变量

PROCEDURE add_logfile(

LogFileName    IN  VARCHAR2,

OptionsIN  BINARY_INTEGER default ADDFILE );

执行下面命令添加日志文件

SQL> execute dbms_logmnr.add_logfile(logfilename=>'+FRA/orcl/archivelog/2013_08_16/thread_1_seq_20.321.823621023',options=>dbms_logmnr.new);

PL/SQL procedure successfully completed.

5.日志文件添加完成后,调用dbms_logmnr.start_logmnr过程分析该日志,这个过程只需要传入一个变量值,就是前面创建的数据字典名。如果日志比较大可能分析的时间较长

SQL> execute dbms_logmnr.start_logmnr(dictfilename=>'/u01/app/oracle/dict/logs/dict.ora');

PL/SQL procedure successfully completed.

6. 执行完成后我们可以从v$logmnr_contents视图中得到刚才分析的结果

SQL> select sql_redo from v$logmnr_contents where table_name='TEST_1';

SQL_REDO

--------------------------------------------------------------------------------

create table test_1 (id int, name varchar2(10));

insert into "SYS"."TEST_1"("ID","NAME") values ('1','a');

insert into "SYS"."TEST_1"("ID","NAME") values ('2','b');

insert into "SYS"."TEST_1"("ID","NAME") values ('3','c');

7.退出logmnr

SQL> execute dbms_logmnr.end_logmnr;

PL/SQL procedure successfully completed.

在前面反复的实验过程中我又重新创建了测试表发现分析出来的结果没有我们执行的sql,我在网上查了一些资料才发现,如果要分析新的对象必须重新创建数据库字典,注意,v$logmnr_contents内容保存的日志的内容存放在pga中,只在当前会话有效,如果想长期保存分析,可以在当前会话用create table tablename as select * from v$logmnr_contents语句来持久保存。

如果只想获取dml的操作可以通过执行下面语句进行分析:

SQL> execute dbms_logmnr.start_logmnr (options=>dbms_logmnr.dict_from_online_catalog);

如果想添加多个日志列表,例如添加一个归档日志如下:

SQL> execute dbms_logmnr.add_logfile(logfilename=>'+FRA/orcl/archivelog/2013_08_16/thread_1_seq_23.324.823621999',options=>dbms_logmnr.addfile);

限制日志分析内容,例如分析2013/8/16的如下:

EXECUTE dbms_logmnr.start_logmnr(DictFileName => '/u01/data1/oracle/logs/dict.ora ',  StartTime => to_date('2013-08-16 00:00:00','YYYY-MM-DD HH24:MI:SS'), EndTime => to_date('2013-08-16 23:59:59','YYYY-MM-DD HH24:MI:SS '));

oracle 日志解析工具,Oracle logminer 日志分析工具使用相关推荐

  1. Java性能调优工具:MAT内存分析工具,上万字带你彻底了解

    MAT内存分析工具 MAT是MemoryAnalyzerTool的简称,它是一款功能强大的Java堆内存分析器,可以用于查找内存泄漏以及查看内存消耗情况.MAT是 基于Eclipse开发的一款免费的性 ...

  2. 发布即巅峰:Java性能调优六大工具:MAT内存分析工具

    MAT内存分析工具 MAT是MemoryAnalyzerTool的简称,它是一款功能强大的Java堆内存分析器,可以用于查找内存泄漏以及查看内存消耗情况.MAT是 基于Eclipse开发的一款免费的性 ...

  3. oracle 内存分析工具,IDE 中的分析工具

    IDE 中的分析工具 Oracle Solaris Studio IDE 提供的交互式图形分析工具可用于检查在 IDE 内部运行的项目的性能.分析工具使用 Oracle Solaris Studio ...

  4. mysql 二进制日志 解析c++_mysql二进制日志文件恢复数据库

    二进制日志的文件的作用 mysql二进制日志文件用来记录所有用户对数据库操作,即记录用户对数据库操作的sql语句.如果有此文件,当数据库发生意外时,可以通过此文件查看到用户在此文件记录的时间段内用户所 ...

  5. mysql slow log 分析工具_mysql slow log分析工具的比较

    mysql 中的 slow log 是用来记录执行时间较长(超过 long_query_time 秒)的 sql 的一种日志工具. 启用 slow log 在 my.cnf 中设置 [mysqld] ...

  6. wms地图绘制工具_地图空间分析工具MapViewer下载-地图空间分析(MapViewer)下载v8.4.406 官方版-西西软件下载...

    地图空间分析工具MapViewer是一款地图空间制作软件,可让用户轻松制作出版品质的专题地图.使用最直观的功能和特性精确显示数据分布.用户的数据是独一无二的,用户需要最好的地图绘制软件!有对这款软件感 ...

  7. android代码流分析工具,视频码流分析工具(Elecard StreamAnalyzer)下载 v4.0.171116 官方版 - 比克尔下载...

    Elecard StreamAnalyzer是一个专业的视频码流分析工具,拥有码流错误报告.TS错误侦测和基于ETSI TR101-290的分析功能,能够对编码器媒体流进行深入的句法分析,支持H.26 ...

  8. linux程序分析工具下载,linux 程序分析工具

    http://blog.csdn.net/denny_233/article/details/7477282 2012 linux程序分析工具介绍(一)--"/proc" 写在最前 ...

  9. oracle怎么解析sql,oracle SQL解析步骤小结

    1 The syntax of the SQL statement is verified. SQL的语法检查 2 The data dictionary is searched to verify ...

  10. oracle如何解析json,oracle 解析json格式

    1. CREATE OR REPLACE PACKAGE PKG_ANALYSE_COMMON IS -- AUTHOR : YZCHEN -- CREATED : 2013/11/26 14:12: ...

最新文章

  1. git 小乌龟 更新分支_时光机--git--现代程序员必备的星舰
  2. ALTER TABLE causes auto_increment resequencing, resulting in duplicate entry ’1′ for key
  3. C++的iostream标准库介绍
  4. Android 自定义Button按钮显示样式(正常、按下、获取焦点)
  5. 对RESTful Web API的理解与设计思路
  6. 记录备份2020-07-13 - 清除多余无用的Windows10环境变量
  7. xss绕过字符过滤_IE8 xss filter bypass (xss过滤器绕过)
  8. mysql ignore-columns_坑 - 当insert ignore遇到not null
  9. Puppeteer -headless Chrome 的 Node.js API
  10. Git环境配置(案例:clone bert源码到本地仓库)
  11. python 确定字符互异
  12. 手机怎样看WiFi的密码
  13. VM虚拟机安装Linux系统
  14. MyIM服务端聊天记录(网络编程作业)
  15. 19深度探秘搜索技术_基于slop参数实现近似匹配以及原理剖析和相关实验
  16. Spread / Reast 操作符(...arr / ...obj)
  17. 下一个五年,存储的生意在哪里?
  18. 用正点原子的精英版与onenet云平台连接
  19. 汉诺塔(Hanoi) ——递归思想
  20. 20181212股票早盘

热门文章

  1. 浅谈Delphi过程与函数03 - 零基础入门学习Delphi22
  2. 由杭州恶性撞人事件想到的
  3. 男人的爱只有一次----女孩你珍惜了吗
  4. python缩进格式错误修改_Python,意外的缩进错误解析,Pythonunexpectedindent,解决,方法...
  5. React-Native 仿喜马拉雅APP项目笔记(多环境配置 项目配置路径 堆栈式导航)
  6. Redis搭建及介绍
  7. win10右下角的天气怎么关闭
  8. PHP 简单的页面跳转提示
  9. PHP树形结构数据增加每层的级别
  10. php 计算两点地理坐标的距离