logminer和配置

安装logminer

以sqlplus / as sysdba登录系统数据库系统,ORACLE默认安装logminer,如果没有安装,执行SQL脚本安装

--安装logminer

SQL>@$ORACLE_HOME/rdbms/admin/dbmslm.sql

--安装logminer所需要的数据字典

SQL>@$ORACLE_HOME/rdbms/admin/dbmslmd.sql

普通用户执行logminer需要进行赋权

--使TEST1用户具备执行logminer的权限

GRANT EXECUTE ON DBMS_LOGMNR TO TEST1

为logminer创建单独的表空间

默认情况下logminer生成的表和数据都是在system表空间下,很容易就把system撑爆从而引发问题。

因此需要创建单独的表空间,并制定logminer使用该表空间:

EXECUTE DBMS_LOGMNR_D.SET_TABLESPACE('logmnrts$')

跟踪ddl语句

EXECUTE DBMS_LOGMNR.START_LOGMNR(OPTIONS =>DBMS_LOGMNR.DDL_DICT_TRACKING);

--当使用Online catalog时,是不能使用该参数的

设置数据字典

使用logminer需要指定数据字典,在没有数据字典的情况下表,表名和字段名都会显示为Object#1111和col#1,col#2,阅读起来非常的不方便。可以提取数据字典文件,或者使用当前数据库的联机目录作为字典源,目的都是能让logminer“知道”表名和表的字段名

将数据字典提取为Flat File

以sqlplus / as sysdba登录,修改数据库spfile参数,并重启数据库(生产环境慎用!)

ALTER SYSTEM SET UTL_FILE_DIR ='/home/oracle' SCOPE=SPFILE;

SHUTDOWN IMMEDIATE;

STARTUP;

--登录数据库提取

EXECUTE DBMS_LOGMNR_D.BUILD('dictionary.ora', '/home/oracle');

要特别注意一个问题,我在测试环境上执行这条命令以后,ORACLE大概卡顿了20分钟,最后返回一个提示信息:总线错误(吐核)……还吐核。。你咋不再来二两花生米呢

其实那个错误,从日志里看应该是core dumped,内核已转储,也就是确实遇到了系统问题。此时服务器能正常使用,但是所有跟oracle用户的功能都废了,自然也包括数据库服务器。执行reboot重启也是长时间无反应,接了个显示器一看,服务器已经在那里装死了。16核64G服务器配置应该也不算低。我现在还不确定这个问题是服务器本身就有错误,还是那条命令导致的,反正我是强烈建议在生产环境上慎用。如果真要执行的话,最好先跟信息中心那边协商好,万一真出问题了能直接到机房去按电源重启。

反正我是最后按电源重启解决

将数据字典提取为Redo Log

这种方式用的比较广泛,大多是异地挖掘,比如数据是在生产环境数据库上,把归档日志拷贝到本地数据库服务器上,只要本地数据库开启了归档并且处于OPEN状态就可以进行分析。但是要注意必须有对应的数据字典。

网络上很多说法都是用DBMS_LOGMNR_D.BUILD把数据字典提取到挖掘数据库的在线日志中,但是我自己试了不行,我觉得原因就是拷贝的归档日志文件中并不包含对应的数据字段,最后解析出来的SQL都是unknown,col#,object#。另外一种可能,就是归档期间内有数据库的重启、重建表空间等操作,导致归档的数据字典和当前的不一致了。因此以后还是做好数据字典的备份

--开启附加日志,提取需要

ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;

--提取字典

EXECUTE DBMS_LOGMNR_D.BUILD(OPTIONS=>DBMS_LOGMNR_D.STORE_IN_REDO_LOGS);

使用联机日志作为数据源(推荐)

EXECUTE DBMS_LOGMNR.START_LOGMNR(OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG);

使用联机日志作为数据源,是最快的方式,但是局限是如果表上发生过ddl语句,那么就无法分析ddl之前的SQL。因为联机日志在ddl之后就失效了。

至此logminer的安装完成

分析在线日志

SQL> select member from v$logfile;

MEMBER

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

+DATA01/xxxxxx/onlinelog/redo_01_01.log

+DATA01/xxxxxx/onlinelog/redo_02_01.log

+DATA01/xxxxxx/onlinelog/redo_03_01.log

+DATA01/xxxxxx/onlinelog/redo_04_01.log

+DATA01/xxxxxx/onlinelog/redo_05_01.log

+DATA01/xxxxxx/onlinelog/redo_05_02.log

+DATA01/xxxxxx/onlinelog/redo_06_01.log

+DATA01/xxxxxx/onlinelog/redo_06_02.log

+DATA01/xxxxxx/onlinelog/redo_07_01.log

+DATA01/xxxxxx/onlinelog/redo_07_02.log

+DATA01/xxxxxx/onlinelog/redo_08_01.log

MEMBER

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

+DATA01/xxxxxx/onlinelog/redo_08_02.log

+DATA01/xxxxxx/onlinelog/redo_03_02.log

+DATA01/xxxxxx/onlinelog/redo_02_02.log

+DATA01/xxxxxx/onlinelog/redo_01_02.log

+DATA01/xxxxxx/onlinelog/redo_04_02.log

16 rows selected.

SQL>

依次添加所有的日志文件:

execute dbms_logmnr.add_logfile('+DATA01/xxxxxx/onlinelog/redo_01_01.log',dbms_logmnr.new);

execute dbms_logmnr.add_logfile('+DATA01/xxxxxx/onlinelog/redo_02_01.log',dbms_logmnr.addfile);

execute dbms_logmnr.add_logfile('+DATA01/xxxxxx/onlinelog/redo_03_01.log',dbms_logmnr.addfile);

使用联机日志开始执行分析

exec dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog+dbms_logmnr.committed_data_only);

将日志内容写入物理表

create table usr_logmnr.logmnr201912212053 as select * from v$logmnr_contents;

然后就可以查询usr_logmnr.logmnr201912212053中的内容了。

挖掘归档日志

当联机日志达到指定大小后就会转为归档日志,

首先通过rman查看要进行挖掘的归档日志

[root@xxx~]# su - grid

Last login: Sat Dec 21 20:37:10 CST 2019

l[grid@xxx~]$ ls

dbbackup oradiag_grid

[grid@xxx~]$ asmcmd

ASMCMD> cd +arch01/xxx/archivelog/2019_12_16

ASMCMD> ls

thread_1_seq_2361.776.1027125235

thread_1_seq_2362.775.1027134727

thread_1_seq_2363.773.1027134739

thread_1_seq_2364.771.1027157227

thread_1_seq_2365.769.1027157873

ASMCMD>

登录rman拷贝要进行挖掘的归档日志

[oracle@xxx archlog]$ rman target /

RMAN> copy archivelog '+arch01/xxx/archivelog/2019_12_16/thread_1_seq_2361.776.1027125235' to '/home/oracle/archlog/thread_1_seq_2361.776.1027125235';

RMAN> exit

也可以在sqlplus中通过SQL执行查询归档日志:

SELECT NAME FROM V$ARCHIVED_LOG

--执行查询后,复制需要进行挖掘的归档日志即可

然后开始分析拷贝的归档日志,或者也可以直接增加归档日志

--增加拷贝的归档日志:

execute dbms_logmnr.add_logfile('/home/oracle/archivelog/2019_12_16/thread_1_seq_2361.776.1027125235',dbms_logmnr.new);

--或者可以直接增加归档目录里的日志文件

execute dbms_logmnr.add_logfile('+arch01/xxx/archivelog/2019_12_16/thread_1_seq_2361.776.1027125235',dbms_logmnr.new);

PL/SQL procedure successfully completed.

--执行分析,注意这里仍然使用的联机的数据字典

SQL> exec dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog+dbms_logmnr.committed_data_only);

PL/SQL procedure successfully completed.--将分析结果写入数据表中

SQL> create table logmnr201912212121 as select * from v$logmnr_contents;

然后可以查看归档日志的内容:

select * from logmnr201912212121

批量增加分析文件

当要分析的日志文件比较多时,可以批量增加文件

--获取开始文件:+ARCH01/xxxxx/archivelog/2019_12_22/thread_1_seq_2581.1061.1027675395

SELECT NAME FROM V$ARCHIVED_LOG WHERE DICTIONARY_BEGIN='YES';

--获取结束文件:+ARCH01/xxxxx/archivelog/2019_12_22/thread_1_seq_2582.1060.1027675397

SELECT NAME FROM V$ARCHIVED_LOG WHERE DICTIONARY_END='YES';

--当要增加的归档文件比较多时,使用一下SQL生成语句,然后批量执行

select 'execute dbms_logmnr.add_logfile(''' || l.NAME || '''' || ',dbms_logmnr.addfile);' from V$ARCHIVED_LOG l WHERE l.FIRST_TIME > to_date('2019-12-17 08:00:00','yyyy-mm-dd hh24:mi:ss') and l.FIRST_TIME < to_date('2019-12-17 18:00:00','yyyy-mm-dd hh24:mi:ss')

--拷贝SQL执行结果,然后在命令行下批量执行。注意,你在哪里执行的lgominer,就在哪里执行这些语句,因为logminer的结果是分会话的,不同的会话不能访问彼此的数据

--如果文件不多,也可以手动一个一个添加

EXECUTE DBMS_LOGMNR.ADD_LOGFILE(LOGFILENAME => '+ARCH01/xxxxx/archivelog/2019_12_22/thread_1_seq_2581.1061.1027675395', OPTIONS => DBMS_LOGMNR.NEW);

EXECUTE DBMS_LOGMNR.ADD_LOGFILE( LOGFILENAME => '+ARCH01/xxxxx/archivelog/2019_12_22/thread_1_seq_2582.1060.1027675397', OPTIONS => DBMS_LOGMNR.ADDFILE);

--开始执行分析

SQL> exec dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog+dbms_logmnr.committed_data_only);

结束分析

logmnr分析的结果,在另一个会话中是查询不到的,当分析结束后,建议关闭当前分析过程。释放PGA内存区域

execute DBMS_LOGMNR.END_LOGMNR

oracle的asmcmd获取归档日志,分析oracle的联机日志和归档日志相关推荐

  1. c oracle日志分析,oracle 日志分析

    1. 确定那个日志文件 2.日志分析[@more@] SQL> show parameter utl NAME TYPE VALUE ------------------------------ ...

  2. 日志分析系统分类有哪些_Java开发日志规范

    打印日志是一门艺术,但长期被开发同学所忽视.日志就像车辆保险,没人愿意为保险付钱,但是一旦出了问题都又想有保险可用.我们打印日志的时候都很随意,可是用的时候会吐槽各种 SB 包括自己!写好每一条日志吧 ...

  3. linux awk 日志分析,Linux Awk使用案例总结 nginx日志统计

    文章目录 [隐藏] 一.Nginx日志分析 知识点: 数组 数组是用来存储一系列值的变量,可通过索引来访问数组的值. Awk中数组称为关联数组,因为它的下标(索引)可以是数字也可以是字符串. 下标通常 ...

  4. elk日志分析系统_部署ELK企业内部日志分析系统

    部署ELK企业内部日志分析系统 一.实验环境 二.基本环境部署 1.IP地址配置 2.主机名配置三台节点hosts文件要一致 [root@yichen-els-node1 ~]# cat /etc/h ...

  5. awstats linux日志分析,Linux环境下安装部署AWStats日志分析系统实例

    AWStats是使用Perl语言开发的一款开放性日志分析系统,可分析Apache网站服务器的访问日志,还可以用来分析Samba.Vsftpd.IIS等日志信息. 此文章主要讲解如何在linux系统下安 ...

  6. python日志分析工具_基于Python3的Web日志分析小工具

    PyWebLog 网站日志分析小工具 环境 Python3.5 Mysql 预览 安装 pip install pymysql pip install flask 导入日志 python Log.py ...

  7. 我的日志分析之道:简单的Web日志分析脚本

    前言 长话短说,事情的起因是这样的,由于工作原因需要分析网站日志,服务器是windows,iis日志,在网上找了找,github找了找,居然没找到,看来只有自己动手丰衣足食. 那么分析方法我大致可分为 ...

  8. oracle exist 10053,Oracle中利用10053事件来分析Oracle是如何做出最终的执行计划

    我们都知道Oracle从10g开始SQL语句选择什么样的执行方式,是全表扫描,还是走索引的依据是执行代价.那么我们怎么可以去看执行代价的信息呢?通过10053事件可以Oracle依据的执行代价和如何做 ...

  9. java tomcat 日志分析工具_设计一个Tomcat访问日志分析工具

    常使用web服务器的朋友大都了解,一般的web server有两部分日志: 一是运行中的日志,它主要记录运行的一些信息,尤其是一些异常错误日志信息 二是访问日志信息,它记录的访问的时间,IP,访问的资 ...

最新文章

  1. NLP NER HMM CRF讲的较好的知乎
  2. On the Old, the New —— 用sql语句生成语句的例子
  3. opencv 金字塔图像分割
  4. 如何修改Fiori Launchpad里Tile计数调用的时间间隔
  5. 内部类、包、修饰符、代码块
  6. CentOS上搭建Nginx + Mono 运行 asp.net
  7. less编译工具koala(考拉)和rem的使用
  8. css中相对定位和绝对定位
  9. 马斯克:如果我不担任CEO 特斯拉就会完蛋
  10. 自定义控件-----输入框
  11. 图像处理常见算法(C++/OpenCV)
  12. html百度地图秘钥,如果获取百度地图API密钥?
  13. 「回血赠书」Python入门书单,新年全力扬帆
  14. 张小龙讲座_微信背后的产品观(20120724)
  15. 解决 zsh:command not found
  16. 事件的三个阶段:捕获阶段 目标阶段 冒泡阶段
  17. 开源项目推荐 | 面向智慧城市的计算机视觉算法基准测试 Benchmark for Smart City上线
  18. 离线条件下dbeaver连接oracle数据库
  19. HDU6581 Vacation (HDU2019多校第一场1004)
  20. Android实现画板工具 (实现涂写、清除、擦除、保存功能)

热门文章

  1. Js+DVML:很酷实用的右键弹出菜单
  2. python0x80070005拒绝访问_PowerShell启用winrm失败:拒绝访问 0x80070005 -2147024891
  3. java 多线程不安全_多线程并发为什么不安全
  4. pip安装了 但是python找不到_python安装完毕后,用pip安装提示找不到ssl模块怎么解决?...
  5. VueRouter源码详细解读
  6. 三款免费实用的文件夹同步/备份软件推荐 (SyncToy/FreeFileSync/Compare Advance)
  7. MyBatis与Hibernate比较
  8. java(eclipse)和数据库(mysql)的连接
  9. Opencv2.4.9源码分析——HoughLinesP
  10. ASP.NET开发,从二层至三层,至面向对象 (4)