[生产库实战] 如何合理的使用logmnr进行日志挖掘,并对生产库影响最小化

Oracle Logmnr这个工具怎么用这里就不详细说,可以查看官方文档,网上的文档也一大堆,自己找吧。我这里就直接上干货了。

--创建Oracle目录

select * from dba_directories;

create directory archivelog_dir as ‘/archivelog1/temp_archivelog/‘;

--grant read, write on directory archivelog_dir to zhanghui;

--归档日志路径信息表(tmp_archive_log),主要是保存要挖掘日志的路径

--注:要为该表加状态标志位,0为未挖掘,1为已挖掘

create table tmp_archive_log as

select name, 0 flag from v$archived_log

where first_time>=to_date(‘2012-12-25 13:55:00‘,‘yyyy-mm-dd hh24:mi:ss‘)

and first_time<to_date(‘2012-12-25 15:05:00‘,‘yyyy-mm-dd hh24:mi:ss‘);

--为挖掘日志出的内容创建表,并根据具体需要选择要提取的字段

create table zhanghui.logmnr_contents

as

select timestamp,log_id,seg_owner,seg_name,table_name,username,operation,sql_redo,sql_undo from v$logmnr_contents where 1=2;

--批量处理挖掘日志,只分析几个归档日志手动处理还好,如果要分析上百个,还手动搞,那就傻了,所以做事的讲究方法,2分钟1.5G的归档,分析两个小时的,怎么玩?

--注:由于挖掘出的日志内容保存在内存中,操作会话退出就丢失了,故这里采用单个日志挖掘,然后将数据保存到一张表中,完成后commit。以免对DB的memory造成冲击,影响性能,生产库操作一定要保证不影响业务的情况下进行各类操作。

$ sqlplus / as sysdba

create procedure proc_logmnr_batch
IS
  vCur                      sys_refcursor;
  v_sql_dirarclog           varchar2(2000);
  v_sql_arclog              varchar2(2000);
begin
  open vCur for select name from zhanghui.tmp_archive_log where flag=0;
  loop
    fetch vCur
      into v_sql_dirarclog;
    exit when vCur%notfound;
  v_sql_arclog:=‘begin sys.dbms_logmnr.add_logfile (logfilename=>‘‘‘||v_sql_dirarclog||‘‘‘,options=>sys.dbms_logmnr.NEW); end;‘;
  execute immediate v_sql_arclog;
  begin sys.dbms_logmnr.start_logmnr(options =>dbms_logmnr.dict_from_online_catalog); end;
    insert into /*+ append */ zhanghui.logmnr_contents 
    select timestamp,log_id,seg_owner,seg_name,table_name,username,operation,sql_redo,sql_undo from 
    v$logmnr_contents
    --where table_name=‘<TABLE_NAME>‘ and OPERATION=‘DELETE‘;
  begin sys.dbms_logmnr.end_logmnr; end;
  UPDATE zhanghui.tmp_archive_log set flag = 1 where name= v_sql_dirarclog;
  commit;
  end loop;
    --跑完了发条短信,调用短信接口
    close vCur;
EXCEPTION
  WHEN OTHERS THEN
    ROLLBACK;
    --报错了发条短信,调用短信接口
    --dbms_output.put_line(sqlerrm); 
END proc_logmnr_batch;

--采用操作系统调用存储过程脚本

$cat proc_logmnr_batch.sh

#!/bin/bash
sqlplus / as sysdba <<EOF
set newpage 0
set linesize 1000             
set pagesize 0
spool proc_logmnr_batch.txt;
exec proc_logmnr_batch;
spool off
quit;
EOF

--赋予执行权限

$chmod +x proc_logmnr_batch.sh

--后台调用执行

$nohup ./proc_logmnr_batch.sh &

好了,等收到处理完成的短信,登录数据库查看即可。

时间: 2024-09-30 11:06:26

[生产库实战] 如何合理的使用logmnr进行日志挖掘,并对生产库影响最小化的相关文章

[生产库实战] 如何使用触发器对生产库上亿级大表进行实时同步

触发器迁移数据和MV的原理相同,通过在源表创建Trigger,记录源表的DML操作日志,然后通过存储过程同步DML受影响的记录,达到目标表和源表数据一致的效果.此方法只是对Prebuilt MV操作的一个补充.物化视图/在线重定义对DML频繁的大表进行处理时,存在一个弊端,主要是在全量初始化这个步骤上,比如: 本应该多块扫描,直接路径读效率很高的,但由于个别数据块在内存造成单块读; 或由于DML操作相对频繁,可能读到的数据需要与undo构造一致性读数据块的几率也较高,此时查看等待事件都是采用单块

屌炸天实战 MySQL 系列教程(四)【秒杀七年经验 LowB工程师】 主从复制、读写分离、模拟宕机、备份恢复方案生产环境实战

第一篇:屌炸天实战 MySQL 系列教程(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:屌炸天实战 MySQL 系列教程(二) 史上最屌.你不知道的数据库操作 第三篇:屌炸天实战 MySQL 系列教程(三)你不知道的 视图.触发器.存储过程.函数.事物.索引.语句 第四篇:屌炸天实战 MySQL 系列教程(四) 主从复制.读写分离.模拟宕机.备份恢复方案生产环境实战 去年公司有一个七年PHP开发经验的工程师,想要跳槽. 去国内某知名互联网公司面试后,被虐惨了,非要我给他讲讲什么是主从

logminer实战之生产环境写入数据字典,dg环境查询拷贝日志,测试环境进行挖掘,输出结果

应客户需要,对某一天的日志进行挖掘,分析日均归档日志切换数量20增长至40的原因,是什么表的dml操作导致的日志量剧增,最终定位某个应用(需要客户自己进行甄别) 操作说明及介绍: 1.客户10.2.0.5 rac 两节点,一套10.2.0.5 dg单实例环境,一套测试库(测试库与dg在同一台主机,且测试库是一年前历史时期的生产库的备库) 2.根据对生产环境最小化原则,在主库只进行创建数据字典,并不在主库进行日志挖掘 3.根据操作简便,dg与测试库在同一台主机上,本次使用dg环境视图查询日志文件,

组件化-动态库实战

http://www.cocoachina.com/articles/19136 组件化-动态库实战 sasukeo·2017-04-27阅读数 22643 本文来自南栀倾寒,作者 sasukeo 起因 理论功底 动态库和静态库 介绍 静态库和动态库的区别 举个例子, iOS 项目中使用 Embeded Framework 静态库和动态库如何构建和加载 静态库和动态库依赖关系 Xcode 项目结构 iOS 依赖管理事实上的标准 解决问题 制作动态库 剖析下动态库 Framework 吧 回过头来

生产服务器环境最小化安装后 Centos 6.5优化配置备忘

本文 centos 6.5 优化 的项有18处: 1.centos6.5最小化安装后启动网卡 2.解决SSH远程链接访问慢优化 3.更新系统源并且升级系统 4.系统时间更新和设定定时任 5.修改ip地址.网关.主机名.DNS 6.关闭selinux,清空iptables 7.创建普通用户并进行sudo授权管理 8.修改SSH端口号和屏蔽root账号远程登陆 9.锁定关键文件系统(禁止非授权用户获得权限) 10.精简开机自启动服务 11.调整系统文件描述符大小 12.设置系统字符集 13.清理登陆

日志挖掘Logmnr

日志挖掘 9.1 日志中数据用途 所有对用户数据以及数据字典的改变全部被保存在联机日志中.当然nologging,insert/*+append+/情况比较特殊除外,因此归档日志可以用来做数据库的恢复.为了数据库中的日志含有用的信息,一般需要启用最小化的追加日志的属性(alter database add supplemental log data;) 以下列举了日志的常用功能: 1)  恢复数据库的逻辑灾难.比如,在增加员工工资时,应该增加10%,但是却增加了100%,这就需要进行基于时间点逻

C#窗体皮肤制作(二):创建窗体库项目以及最小化、最大化、关闭按钮的实现

很高兴有朋友关注这篇博客,同时也十分抱歉让关注的朋友久等了,隔上一篇博客也有3个月没有更新,主要是由于3月份辞职,4月份初离职到期离开了北京高德,来到了上海张江.目前新工作也处于熟悉当中,希望大家能体谅.刚好这周末有点时间,我就接着写写,这篇博客主要是针对初学者,希望给为他们能提供一种较易理解的窗体皮肤制作思路,记得自己当初学习C#编程的时候也是摸着石头过河. 闲话少说,我还是接着上篇博客继续写,上次说明了下如何收集图片资源,这次就以360安全卫士来做示例进行模仿,本来也想过模仿下qq,但是qq

[生产库实战] 采用存储过程对生产线历史表数据进行归档

生产线历史数据归档是数据库运维的一项日常基本工作.在建表设计时,通常都将数据流水表(如:日志.用户登录历史,软件下载记录,用户属性更改历史表等)设计为范围分区表.间隔分区表(11G),当超过业务要求的保留范围时,此数据基本是静态数据且应用程序再不对其进行访问,但有可能会由于某些特殊要求需要手动查询.在这个情况下,都将其数据从生产库归档至历史库,并对其进行压缩保存,如果超出特殊要求查询的范围,那就直接将其导出压缩备份到磁带. 在Oracle数据库中,用做表数据归档操作的方法很多,如:exp/imp

Muduo网络库实战(二):实现服务器与客户端的连接

1. 方案的确定 1)基本需求 用户1000+, IO压力不大: 多个客户端打开网站,输入查询字符串strclient,发送给服务器=>服务器接收客户端发过来的数据并处理,将结果返回给客户端: 2)并发网络服务程序设计方案 详见:<Muduo_网络库使用手册>的1.6节-<详解Muduo多线程模型> @ muduo中TcpServer模式的选择:多线程模式 模式一:单线程,accept与TcpConnection用同一个线程做IO; 模式二:多线程,accept与EventL