oracle之二日志挖掘log miner
日志挖掘 log miner
6.1 log miner的作用:
数据库恢复中有时会需要对Redo log进行分析, 要会使用log miner,以便确定要恢复的时间点或SCN
6.2 有两种日志挖掘方法 针对DML和DDL,整理如下 :
6.2.1 对语句DML进行日志挖掘:
1)添加database补充日志
SQL>ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
//注意:通过PL/SQL包的DML的日志挖掘,这步要先执行,在此之后的DML操作才能从日志里挖到。
2)确定要分析的日志范围,添加日志,分析
SQL>execute dbms_logmnr.add_logfile(logfilename=>'归档日志',options=>dbms_logmnr.new); //第一个要加载的日志文件
SQL>execute dbms_logmnr.add_logfile(logfilename=>'补充日志',options=>dbms_logmnr.addfile); //可以反复添加补充多个日志文件
3)执行logmnr 分析
SQL>execute dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);
4)查询分析结果,可以设置时间格式,也可以在显示方式里再确定格式.
SQL>select username,scn,timestamp,sql_redo from v$logmnr_contents where seg_name='表名';
5)关闭日志分析
SQL>execute dbms_logmnr.end_logmnr;
例
session1 sys:
11:33:20 SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
session2 scott:
09:44:08 SQL> create table a (id int);
09:44:20 SQL> insert into a values(1);
09:44:29 SQL> update a set id=5;
09:44:45 SQL> commit;
09:44:47 SQL> delete a; //delete这条没有commit,我们要证明uncommit的DML操作也写入了日志。
这个session2留着,换session1进入sys
session1 sys:
11:32:12 SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARCHIVED STATUS FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- -------- ---------------- ------------- -----------
1 1 26 52428800 2 NO CURRENT 2257870 2012-7-23 9
2 1 25 52428800 2 YES INACTIVE 2257866 2012-7-23 9
3 1 23 52428800 2 YES INACTIVE 2257862 2012-7-23 9
4 1 24 52428800 2 YES INACTIVE 2257864 2012-7-23 9
//上面a 表的DML操作都写进了current组里,记住sequence#是26号。然后手工切换当前日志到archive里。
11:32:18 SQL> alter system switch logfile;
11:33:00 SQL> /
11:33:02 SQL> /
11:33:02 SQL> /
11:33:09 SQL> select name from v$archived_log;
/u01/disk1/timran/arch_1_789252862_21.log
/u01/disk1/timran/arch_1_789252862_22.log
/u01/disk1/timran/arch_1_789252862_23.log
/u01/disk1/timran/arch_1_789252862_24.log
/u01/disk1/timran/arch_1_789252862_25.log
/u01/disk1/timran/arch_1_789252862_26.log
/u01/disk1/timran/arch_1_789252862_27.log
/u01/disk1/timran/arch_1_789252862_28.log
/u01/disk1/timran/arch_1_789252862_29.log
62 rows selected
//切换后,sequence#26的日志的应该对应的是/u01/disk1/timran/arch_1_789252862_26.log
11:33:48 SQL> execute dbms_logmnr.add_logfile(logfilename=>'/u01/data/urpdb/redo03.log',options=>dbms_logmnr.new);
11:34:13 SQL> execute dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);
11:34:49 SQL>select scn,to_char(timestamp,'yyyy-mm-dd hh24:mi:ss') timestamp,sql_redo from v$logmnr_contents where seg_name='AA';
SCN TIMESTAMP SQL_REDO
---------- ------------------- --------------------------------------------------------------------------------
2258232 2012-07-23 09:43:16 drop table a purge;
2258334 2012-07-23 09:44:20 create table a (id int);
2258341 2012-07-23 09:44:28 insert into "SCOTT"."A"("ID") values ('1');
2258349 2012-07-23 09:44:46 update "SCOTT"."A" set "ID" = '5' where "ID" = '1' and ROWID = 'AAANBAAAEAAAAGEA
2258353 2012-07-23 09:44:52 delete from "SCOTT"."A" where "ID" = '5' and ROWID = 'AAANBAAAEAAAAGEAAA';
6.2.2 对DDL的操作的log miner:
1)如果是第一次做,先要建好logmnr目录,
设置logmnr 参数,存放数据字典文件dict01.ora
$ mkdir /home/oracle/logmnr
SQL> alter system set utl_file_dir='/home/oracle/logmnr' scope=spfile;
2)建立数据字典文件dict.ora
SQL> execute dbms_logmnr_d.build('dict01.ora','/home/oracle/logmnr',dbms_logmnr_d.store_in_flat_file);
3)添加日志分析
SQL> alter system switch logfile;
SQL> execute dbms_logmnr.add_logfile(logfilename=>'归档文件',options=>dbms_logmnr.new);
SQL> execute dbms_logmnr.add_logfile(logfilename=>'归档文件',options=>dbms_logmnr.addfile);
4)执行分析
SQL> execute dbms_logmnr.start_logmnr(dictfilename=>'/home/oracle/logmnr/dict01.ora',options=>dbms_logmnr.ddl_dict_tracking);
5)查看分析结果
SQL> select username,scn,to_char(timestamp,'yyyy-mm-dd hh24:mi:ss'),sql_redo from v$logmnr_contents WHERE USERNAME ='SCOTT' and lower(sql_redo) like '%table%';
6)关闭日志分析
SQL> execute dbms_logmnr.end_logmnr;
例子将在053的不完全恢复一节中演示。
在oracle11g 的EM里已加入了有关log miner的功能,可根据时间段由oracle自动选择需要的日志,比较方便,但只有提交的事务信息,看来是从transaction的角度设计的。
EM-->Availability-->Manage-->View and Manage Transctions
oracle之二日志挖掘log miner的更多相关文章
- oracle (9I/10G/11G)数据库日志挖掘(审计误操作)
文档结构: 资料来自官方网站: https://docs.oracle.com/cd/E11882_01/server.112/e22490/logminer.htm#SUTIL019 来自论坛: h ...
- oracle日志挖掘
oracle日志挖掘是一种十分强大的数据恢复技术,只要你保障你的归档日志和重做日志是完整的,那么就可以将你的数据恢复到任何时刻.简单叙述一下日志挖掘的基本原理,然后进行一个简单的小实验. 日志挖掘时基 ...
- Oracle 联机重做日志文件(ONLINE LOG FILE)
--========================================= -- Oracle 联机重做日志文件(ONLINE LOG FILE) --================== ...
- Oracle 日志挖掘(LogMiner)使用
Logminer依赖于2个包:DBMS_LOGMNR和DBMS_LOGMNR_D,Oracle 11g默认已安装 Logminer 基本使用步骤 <1>. Specify a LogMin ...
- Oracle重做日志和日志挖掘
重做日志-Redo log 首先给出参考资料: 1.Oracle官网-Managing the Redo Log 为什么需要redo log 内存中数据修改后,不必立即更新到磁盘---效率 由日志完成 ...
- A shallow summary of oracle log miner
Sometimes, we should recover one or more rows data which is deleted carelessly by users, but it is n ...
- 7.26实习培训日志-Oracle SQL(二)
Oracle SQL(二) 条件表达式 CASE 语句 或者DECODE 函数,两者均可实现 IF-THEN-ELSE 的逻辑,相比较而言,DECODE 更加简洁 SELECT last_name , ...
- logminer日志挖掘
参考自:https://blog.csdn.net/yes_is_ok/article/details/79296614 原文转自:http://blog.itpub.net/26736162/vie ...
- 日志挖掘针对DML语句
作用: 针对用户的误操作,比如更改数据错误,误删除表等,可以用日志挖掘的方式,跟踪哪个用户什么时候做的操作,并进行数据还原. 一.前期准备: 1.添加最小补充日志,能够记录到更详细的信息,为日志挖掘分 ...
随机推荐
- DRF基础操作流程
Django Rest_Framework 核心思想: 缩减编写api接口的代码 -->DRF Django REST framework是一个建立在Django基础之上的Web 应用开发框架, ...
- CPF 入门教程(一)
CPF netcore跨平台UI框架 开发之前,你需要先安装VS2019.为什么要vs2019?因为VS2019才能支持netcore3.0以上,netcore3.0之后才能发布独立的程序,之前的都只 ...
- 安全可靠国产系统背景下的应用开发应有.NET Core的一席之地
在中美当前背景下的安全可靠国产系统(简称安可),安可产业要实现技术自主可控,需要在四个层面逐步实现:基础硬件设施,如芯片.服务器.存储.交换机.路由器:底层软件,包括操作系统.数据库.中间件等:应用软 ...
- HTTP基本原理-Network各列标签的含义
第一列 Name:请求的名称,一般会将URL的最后一部分内容当作名称 第二列 Status:响应的状态码,显示为 200,则代表相应是正常的.通过状态码,我们可以判断发送了请求之后是否得到了正常的相应 ...
- Http请求的三个常见问题
我们做的大多数项目,必不可少的需要向后台发送请求获取数据,常用的http请求就是post请求和get请求 那么引出一个最常见的问题——Q:post请求和get请求有什么区别? A: 从语义上我们可以这 ...
- 开源流数据公司 StreamNative 推出 Pulsar 云服务,推进企业“流优先”进程
Apache 顶级项目 Pulsar 背后的开源流数据公司 StreamNative 宣布,推出基于 Apache Pulsar 的云端服务产品--StreamNative Cloud.该产品的发布, ...
- 特性预览:Apache 顶级项目 Apache Pulsar 2.6.1 版本
在正式分享 2.6.1 版本更新细节之前,冉小龙首先为我们分享了两个相关 PIP 的内容. 一个是 PIP-47 中关于「基于时间来进行版本更新」的计划.该 PIP 提出后,从 2.5.0 版本到目前 ...
- 【小白学PyTorch】4 构建模型三要素与权重初始化
文章目录: 目录 1 模型三要素 2 参数初始化 3 完整运行代码 4 尺寸计算与参数计算 1 模型三要素 三要素其实很简单 必须要继承nn.Module这个类,要让PyTorch知道这个类是一个Mo ...
- Sql 注入----学习笔记
先了解下CRLF,CRLF常用在分隔符之间,CR是carriage retum(ASCII 13,\r) LF是Line Feed (ASCII 10,\n), \r\n这两个字符类似于回车是用于换行 ...
- python好用的测试库-Nose
前序: python除了unittest,还有一款更快捷的nose,nose可以说是对unittest的一种简化吧,但是他不需要unittest那种必须有固有的格式,他只需要文件,类名,方法名等含有t ...