本文主要是介绍Oracle LogMiner详细讲解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一:相关概念
1.Logminer是什么?
LogMiner是Oracle数据库提供的一个工具,它用于分析重做日志和归档日志所记载的事务操作。
Logminer是oracle从8i开始提供的用于分析重做日志信息的工具,它包括DBMS_LOGMNR和DBMS_LOGMNR_D两个package,后边的D是字典的意思。它既能分析redo log file,也能分析归档后的archive log file。在分析日志的过程中需要使用数据字典,一般先生成数据字典文件后使用,10g版本还可以使用在线数据字典
Logminer也可以分析其它数据库的重做日志文件,但是必须使用重做日志所在数据库的数据字典,否则会出现无法识别的乱码。另外被分析数据库的操作系统平台最好和当前Logminer所在数据库的运行平台一样,且block size相同
2.LogMiner的功能:
(1)确定数据库的逻辑损坏时间。
通过LogMiner可以准确定位该误操作的执行时间和SCN值,然后通过基于时间恢复或者基于SCN恢复可以完全恢复该表数据。
SQL>selectscn_to_timestamp(10135546249879) from dual;
SQL>SELECTtimestamp_to_scn(to_timestamp('2013-3-27 6:06:06','yyyy-mm-ddhh24:mi:ss')) FROM dual;
(2)确定事务级要执行的精细逻辑恢复操作。
通过LogMiner可以取得任何用户的DML操作及相应的UNDO操作,通过执行UNDO操作可以取消用户的错误操作。
(3)执行后续审计。
通过LogMiner可以跟踪Oracle数据库的所有DML、DDL和DCL操作,从而取得执行这些操作的时间顺序、执行这些操作的用户等信息。
3.LogMiner的安装方法:
(1)创建DBMS_LOGMNR:@D:\app\wangxianwei\product\11.2.0\dbhome_1\RDBMS\ADMIN\dbmslm.sql
(2)创建DBMS_LOGMNR_D:@D:\app\wangxianwei\product\11.2.0\dbhome_1\RDBMS\ADMIN\dbmslmd.sql
4.LogMiner不支持的数据类型和表存储属性
bfile;
抽象数据类型;
集合类型(嵌套表和varray);
参照对象;
xmltype;
具有LOB列的索引组织表;
使用compress特征的表。
除以上类型外,基本上都是支持的,不再列举
5.LogMiner的配置要求
(1)源数据库和分析数据库必须运行在相同硬件平台上;
(2)分析数据库可以是独立数据库或源数据库;
(3)分析数据库的版本不能低于源数据库的版本;
(4)分析数据库与源数据库必须具有相同的字符集;
6.注意事项
(1)LogMiner字典必须在源数据库中生成
(2)当分析多个重做日志和归档日志时,它们必须是同一个源数据库的重做日志和归档日志
(3)当分析多个重做日志和归档日志时,它们必须具有相同的resetlogsscn
(4)当分析的重做日志和归档日志必须在Oracle8.0版本以上
7.什么是补充日志,补充日志的作用是什么?
重做日志用于实现例程恢复和介质恢复,这些操作所需要的数据被自动记录在重做日志中。但是,重做应用可能还需要记载其他列信息到重做日志中,记录其他列的日志过程被称为补充日志
默认情况下,Oracle数据库没有提供任何补充日志,从而导致默认情况下LogMiner无法支持以下特征:
(1)索引簇、链行和迁移行;
(2)直接路径插入;
(3)摘取LogMiner字典到重做日志;
(4)跟踪DDL;
(5)生成键列的SQL_REDO和SQL_UNDO信息;
(6)LONG和LOB数据类型。
因此,为了充分利用LogMiner提供的特征,必须激活补充日志。在数据库级激活补充日志的示例如下:
SQL>alter database add supplemental log data;
数据库已更改。
注意:激活不用重启数据库,数据库联机即可。
二、LogMiner两种使用类型,一种是使用源数据库的数据字典分析DML操作,别一种是摘取LogMiner数据字典到字典文件分析DDL操作。
1.1使用源数据库的数据字典(Onlinecatalog)来分析DML操作
在做实验之前,检查下suppplemental logging:
SQL> SELECT SUPPLEMENTAL_LOG_DATA_MIN FROMV$DATABASE;
SUPPLEME
--------
YES
如果是YES 或者IMPLICIT则表明已经生效了,否则需要启动:
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOGDATA;
Database altered.
1.2、建立日志分析列表:
添加要分析的日志文件
SQL> execute
dbms_logmnr.add_logfile(logfilename=>'日志文件',options=>dbms_logmnr.new);
继续添加
SQL>execute
dbms_logmnr.add_logfile(logfilename=>'日志文件',options=>dbms_logmnr.addfile);
需要特别注意的是,继续添加OPTIONS选项是ADDFILE
移除分析日志文件
SQL> execute
dbms_logmnr.remove_logfile(logfilename=>'日志文件');
1.3、启动LogMiner
SQL> execute
dbms_logmnr.start_logmnr(Options =>DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG)
1.4、查看日志分析结果
SQL> selectusername,scn,timestamp,sql_redo from v$logmnr_contents
1.5、结束LogMiner
SQL>dbms_logminer.end_logmnr;
2.摘取LogMiner字典到字典文件分析DDL操作
2.1、使用字典文件,请查看数据库是否配置utl_file_dir,这个参数为字典文件的目录。配置该参数后,需要重启数据库
SQL> show parameter utl;
NAME TYPE VALUE
------------------------------------ -----------------------
create_stored_outlines string
utl_file_dir string
SQL> alter system setutl_file_dir='D:/oracle/logminer' scope=spfile;
System altered.
需要特别注意的是:修改此参数后需要重启数据库,切记!!!!
2.2、建立字典文件:
SQL> execute
dbms_logmnr_d.build('文件名.ora','文件位置',dbms_logmnr_d.store_in_flat_file);
2.3、建立日志分析列表:
添加要分析的日志文件
SQL> execute
dbms_logmnr.add_logfile(logfilename=>'日志文件',options=>dbms_logmnr.new);
继续添加
SQL> execute
dbms_logmnr.add_logfile(logfilename=>'日志文件',options=>dbms_logmnr.addfile);
需要特别注意的是,继续添加OPTIONS选项是ADDFILE
移除分析日志文件
SQL> execute
dbms_logmnr.remove_logfile(logfilename=>'日志文件');
2.4、启动LogMiner
SQL> execute
dbms_logmnr.start_logmnr(
dictfilename=>'D:文件',
options=>dbms_logmnr.ddl_dict_tracking
);
2.5、查询分析日志结果:
SQL> selectusername,scn,timestamp,sql_redo from v$logmnr_contents;
需要特别注意的是,v$logmnr_contents内容保存了日志的内容,只在当前会话有效,
2.6、结束LogMiner
SQL> execute dbms_logmnr.end_logmnr;
友情提示:DBMS_LOGMINER包中的方法及参数详见两个创建SQL
这篇关于Oracle LogMiner详细讲解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!