合 Oracle日志挖掘工具LogMiner的使用
Tags: Oracle备份恢复日志挖掘LogMiner数据挖掘
简介
众所周知,所有对用户数据和数据字典的改变都记录在Oracle的Redo日志中,因此,Redo日志包含了所有进行恢复操作所需要的信息。但是,原始的Redo日志文件无法看懂,所以,Oracle从8i以后提供了一个非常有用的分析工具,称为LogMiner。使用该工具可以轻松获得Redo日志文件(包含归档日志文件)中的具体内容。特别是该工具可以分析出所有对于数据库的DML操作(INSERT、UPDATE、DELETE等)语句。Oracle 9i后可以分析DDL语句,另外还可分析得到一些必要的回滚SQL语句。LogMiner一个最重要的用途就是不用全部恢复数据库就可以恢复数据库的某个变化。该工具特别适用于调试、审计或者回退某个特定的事务。
LogMiner工具既可以用来分析在线日志,也可以用来分析离线日志文件,既可以分析本身自己数据库的重作日志文件,也可以用来分析其它数据库的重作日志文件。当分析其它数据库的重作日志文件时,需要注意的是,LogMiner必须使用被分析数据库实例产生的字典文件,而不是安装LogMiner的数据库产生的字典文件,另外,必须保证安装LogMiner数据库的字符集和被分析数据库的字符集相同。源数据库(Source Database)平台必须和分析数据库(Mining Database)平台一样。
Oracle通过LogMiner工具对Redo日志进行挖掘,显示出一系列可读的信息,该过程称为日志挖掘。LogMiner通过V$LOGMNR_CONTENTS
视图显示Redo日志中的信息。
总的说来,LogMiner工具的主要用途有:
1、跟踪数据库的变化:可以离线地跟踪数据库的变化,而不会影响在线系统的性能
2、回退数据库的变化:回退特定的变化数据,减少Point-In-Time Recovery的执行
3、优化和扩容计划:可通过分析日志文件中的数据以分析数据的增长模式
4、确定数据库的逻辑损坏时间:准确定位操作执行的时间和SCN
5、确定事务级要执行的精细逻辑恢复操作,可以取得相应的Undo操作
6、执行后续审计
安装LogMiner工具
在默认情况下,Oracle已经安装了LogMiner工具。若是没有安装,则可以运行下面两个脚本:
1 2 | $ORACLE_HOME/rdbms/admin/dbmslm.sql $ORACLE_HOME/rdbms/admin/dbmslmd.sql |
这两个脚本必须均以SYS用户身份运行。其中第一个脚本用来创建DBMS_LOGMNR包,该包用来分析日志文件。第二个脚本用来创建DBMS_LOGMNR_D包,该包用来创建数据字典文件。若要使普通用户具有日志挖掘的权限,则可以执行如下的SQL进行赋权:
1 | GRANT EXECUTE ON DBMS_LOGMNR TO LHR_TEST; |
脚本执行完毕后,LogMiner包含两个PL/SQL包和几个视图:
1、DBMS_LOGMNR_D包,包括一个用于提取数据字典信息的过程,即DBMS_LOGMNR_D.BUILD()过程,还包含一个重建LogMiner表的过程,DBMS_LOGMNR_D.SET_TABLESPACE。在默认情况下,LogMiner的表是建在SYSTEM表空间下的。 可以设置单独的表空间:
1 2 | create tablespace ts_LOGMNR datafile '/sda4/u01/app/oracle/oradata/orcllinux/logmnr.dbf' size 1G autoextend on next 2M ; exec dbms_logmnr_d.set_tablespace('ts_logmnr'); |
2、DBMS_LOGMNR包,它有3个存储过程:
- ADD_LOGFILE(NAME VARCHAR2,OPTIONS NUMBER) 用来添加或删除用于分析的日志文件
- START_LOGMNR(START_SCN NUMBER,END_SCN NUMBER,START_TIME NUMBER,END_TIME NUMBER,DICTFILENAME VARCHAR2,OPTIONS NUMBER) 用来开启日志分析,同时确定分析的时间或SCN窗口以及确认是否使用提取出来的数据字典信息
- END_LOGMNR()存储过程用来终止分析会话,它将回收LogMiner所占用的内存
与LogMiner相关的数据字典视图
- V$LOGHIST:显示历史日志文件的一些信息
- V$LOGMNR_DICTIONARY:因为LOGMINER可以有多个字典文件,所以该视图显示字典文件信息
- V$LOGMNR_PARAMETERS:显示LOGMINER的参数
- V$LOGMNR_LOGS:显示用于分析的日志列表信息
- V$LOGMNR_CONTENTS:LOGMINER结果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | SELECT * FROM V$LOGMNR_CONTENTS ; SELECT * FROM V$LOGMNR_LOGS ; SELECT * FROM V$LOGMNR_DICTIONARY ; SELECT * FROM V$LOGMNR_PARAMETERS ; SELECT * FROM V$LOGMNR_LOGFILE ; SELECT * FROM V$LOGMNR_PROCESS ; SELECT * FROM V$LOGMNR_TRANSACTION ; SELECT * FROM V$LOGMNR_REGION ; SELECT * FROM V$LOGMNR_CALLBACK ; SELECT * FROM V$LOGMNR_SESSION ; SELECT * FROM V$LOGMNR_LATCH ; SELECT * FROM V$LOGMNR_DICTIONARY_LOAD ; SELECT * FROM V$LOGMNR_SYS_OBJECTS ; SELECT * FROM V$LOGMNR_SYS_DBA_SEGS ; SELECT * FROM V$LOGMNR_EXTENTS ; SELECT * FROM V$LOGMNR_DBA_OBJECTS ; SELECT * FROM V$LOGMNR_OBJECT_SEGMENTS ; SELECT * FROM V$LOGMNR_STATS; |
LogMiner的数据字典
为了完全地转换Redo日志中的内容,LogMiner需要访问一个数据库字典。LogMiner使用该字典将Oracle内部的对象标识符和数据类型转换为对象名称和外部的数据格式。没有字典,LogMiner将使用16进制字符显示内部对象ID。