LogMiner是个功能非常强大的工具,该工具分析任何Oracle 8及其以后版本产生的重作日志文件,可以得到大量的关于数据库活动的信息。其中一个最重要的用途就是不用全部恢复数据库就可以恢复数据库的某个变化。该工具还可用来监视或者审计用户的活动,可以利用LogMiner工具察看谁曾经修改了那些数据以及这些数据在修改前的状态。
LogMiner 工具即可以用来分析在线,也可以用来分析离线日志文件,即可以分析本身自己数据库的重作日志文件,也可以用来分析其他数据库的重作日志文件。
1.LogMiner工具实际上是由两个新的PL/SQL内建包((DBMS_LOGMNR 和 DBMS_ LOGMNR_D)和四个V$动态性能视图(视图是在利用过程DBMS_LOGMNR.START_LOGMNR启动LogMiner时创建)组成.安装 LogMiner,要执行以下两个脚本:
SYS>@$ORACLE_HOME/rdbms/admin/dbmslm.sql;创建DBMS_LOGMNR包,该包用来分析日志文件.
SYS>@$ORACLE_HOME/rdbms/admin/dbmslmd.sql; 创建DBMS_LOGMNR_D包,该包用来创建数据字典文件.
SYS>alter database add supermental log data;
2.如何使用LogMiner?
①创建数据字典.在使用LogMiner工具分析redo log文件之前,可以使用DBMS_LOGMNR_D 包将数据字典导出为一个文本文件。该字典文件是可选的,否则LogMiner解释出来的语句中关于数据字典中的部分(如表名、列名等)和数值都将是16进制的形式,我们是无法直接理解的。
首先要修改参数UTL_FILE_DIR,指定数据字典的存放路径,必须重启数据库才能生效.
SYS>show parameter utl_file_dir;
root@star~# mkdir -p /u02/lm_log 创建多级目录,将会被指定为数据字典的存放路径.
root@star~# chown -R oracle.oinstall /u02/lm_log 更改目录所属用户和组.
root@star~# cd /u02
root@star~# ls -l 查看目录的权限和归属.
SYS>alter system set UTL_FILE_DIR='/u02/lm_log' scope=spfile;
重新启动数据库,使新加的参数生效,然后创建数据字典文件:
SYS> sqlplus / as sysdba;
SYS> execute dbms_logmnr_d.build(
dictionary_filename => ' v863dict.ora',
dictionary_location => '/u02/lm_log');
②对要分析的日志创建列表.Oracle的重作日志分为两种,在线(online)和离线(offline)归档日志文件.
A.分析在线重作日志文件
㈠创建列表
SYS>execute dbms_logmnr.add_logfile(
LogFileName=>' /u02/lm_log/redo01.log',
Options=>dbms_logmnr.new);
㈡添加其它日志文件到列表
SYS> execute dbms_logmnr.add_logfile(
LogFileName=>' /u02/lm_log/redo02.log',
Options=>dbms_logmnr.addfile);
㈢也可以从列表中移除日志文件
SYS> execute dbms_logmnr.add_logfile(
LogFileName=>' /u02/lm_log/redo02.log',
Options=>dbms_logmnr.removefile);
B.分析离线日志文件
㈠创建列表
SYS> execute dbms_logmnr.add_logfile(
LogFileName=>'/u02/lm_log/archive/arch01.001',
Options=>dbms_logmnr.new);
㈡添加其它日志文件到列表
SYS> execute dbms_logmnr.add_logfile(
LogFileName=>'/u02/lm_log/archive/arch02.001',
Options=>dbms_logmnr.addfile);
③设置日志分析的范围
A.无限制条件,日志分析没有起始时间.
SYS>execute dbms_logmnr.start_logmnr(
DictFileName=>'/u02/lm_log/v863dict.ora');
B.有限制条件,指定日志分析的起始时间.
SYS>execute dbms_logmnr.start_logmnr(
DictFileName => ' /u02/lm_log/v863dict.ora ',
StartTime => to_date('2012-7-18 00:00:00','YYYY-MM-DD HH24:MI:SS'),
EndTime => to_date(''2012-7-18 23:59:59','YYYY-MM-DD HH24:MI:SS '));
另外,通过设置起始SCN和截至SCN,也可以指定日志分析的起始时间范围.
SYS> execute dbms_logmnr.start_logmnr(
DictFileName => ' /u02/lm_log/v863dict.ora',
StartScn => 20,
EndScn => 50);
3.参数含义和相关视图
StartScn 和EndScn 是数值型,代表日志文件的序号.分析重作日志中,文件的序号介于 StartScn 和EndScn 之间.
DictFileName 字符型(VARCHAR2) 字典文件,该文件包含一个数据库目录的快照。使用该文件的好处?使得到的分析结果是可理解的文本形式,而非系统内部的16进制.
StartTime 和EndTime 是日期型(Date) .分析重作日志中,日志文件的时间戳介于StartTime 和EndTime之间.
日志分析的有关视图:
V$logmnr_contents 显示日志分析的结果信息.
V$logmnr_dictionary 显示日志分析的多个字典文件.
V$logmnr_parameters 显示lomnr的参数.logmnr_logs .
V$logmnr_logs 显示日志分析的日志列表信息.
SYS> select sql_redo from v$logmnr_contents;
SYS> select * from V$logmnr_logs;