oracle的asmcmd获取归档日志,分析oracle的联机日志和归档日志
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的联机日志和归档日志相关推荐
- c oracle日志分析,oracle 日志分析
1. 确定那个日志文件 2.日志分析[@more@] SQL> show parameter utl NAME TYPE VALUE ------------------------------ ...
- 日志分析系统分类有哪些_Java开发日志规范
打印日志是一门艺术,但长期被开发同学所忽视.日志就像车辆保险,没人愿意为保险付钱,但是一旦出了问题都又想有保险可用.我们打印日志的时候都很随意,可是用的时候会吐槽各种 SB 包括自己!写好每一条日志吧 ...
- linux awk 日志分析,Linux Awk使用案例总结 nginx日志统计
文章目录 [隐藏] 一.Nginx日志分析 知识点: 数组 数组是用来存储一系列值的变量,可通过索引来访问数组的值. Awk中数组称为关联数组,因为它的下标(索引)可以是数字也可以是字符串. 下标通常 ...
- elk日志分析系统_部署ELK企业内部日志分析系统
部署ELK企业内部日志分析系统 一.实验环境 二.基本环境部署 1.IP地址配置 2.主机名配置三台节点hosts文件要一致 [root@yichen-els-node1 ~]# cat /etc/h ...
- awstats linux日志分析,Linux环境下安装部署AWStats日志分析系统实例
AWStats是使用Perl语言开发的一款开放性日志分析系统,可分析Apache网站服务器的访问日志,还可以用来分析Samba.Vsftpd.IIS等日志信息. 此文章主要讲解如何在linux系统下安 ...
- python日志分析工具_基于Python3的Web日志分析小工具
PyWebLog 网站日志分析小工具 环境 Python3.5 Mysql 预览 安装 pip install pymysql pip install flask 导入日志 python Log.py ...
- 我的日志分析之道:简单的Web日志分析脚本
前言 长话短说,事情的起因是这样的,由于工作原因需要分析网站日志,服务器是windows,iis日志,在网上找了找,github找了找,居然没找到,看来只有自己动手丰衣足食. 那么分析方法我大致可分为 ...
- oracle exist 10053,Oracle中利用10053事件来分析Oracle是如何做出最终的执行计划
我们都知道Oracle从10g开始SQL语句选择什么样的执行方式,是全表扫描,还是走索引的依据是执行代价.那么我们怎么可以去看执行代价的信息呢?通过10053事件可以Oracle依据的执行代价和如何做 ...
- java tomcat 日志分析工具_设计一个Tomcat访问日志分析工具
常使用web服务器的朋友大都了解,一般的web server有两部分日志: 一是运行中的日志,它主要记录运行的一些信息,尤其是一些异常错误日志信息 二是访问日志信息,它记录的访问的时间,IP,访问的资 ...
最新文章
- NLP NER HMM CRF讲的较好的知乎
- On the Old, the New —— 用sql语句生成语句的例子
- opencv 金字塔图像分割
- 如何修改Fiori Launchpad里Tile计数调用的时间间隔
- 内部类、包、修饰符、代码块
- CentOS上搭建Nginx + Mono 运行 asp.net
- less编译工具koala(考拉)和rem的使用
- css中相对定位和绝对定位
- 马斯克:如果我不担任CEO 特斯拉就会完蛋
- 自定义控件-----输入框
- 图像处理常见算法(C++/OpenCV)
- html百度地图秘钥,如果获取百度地图API密钥?
- 「回血赠书」Python入门书单,新年全力扬帆
- 张小龙讲座_微信背后的产品观(20120724)
- 解决 zsh:command not found
- 事件的三个阶段:捕获阶段 目标阶段 冒泡阶段
- 开源项目推荐 | 面向智慧城市的计算机视觉算法基准测试 Benchmark for Smart City上线
- 离线条件下dbeaver连接oracle数据库
- HDU6581 Vacation (HDU2019多校第一场1004)
- Android实现画板工具 (实现涂写、清除、擦除、保存功能)
热门文章
- Js+DVML:很酷实用的右键弹出菜单
- python0x80070005拒绝访问_PowerShell启用winrm失败:拒绝访问 0x80070005 -2147024891
- java 多线程不安全_多线程并发为什么不安全
- pip安装了 但是python找不到_python安装完毕后,用pip安装提示找不到ssl模块怎么解决?...
- VueRouter源码详细解读
- 三款免费实用的文件夹同步/备份软件推荐 (SyncToy/FreeFileSync/Compare Advance)
- MyBatis与Hibernate比较
- java(eclipse)和数据库(mysql)的连接
- Opencv2.4.9源码分析——HoughLinesP
- ASP.NET开发,从二层至三层,至面向对象 (4)