LogMiner提供了一个处理重作日志文件并将其内容翻译成表明对数据库的逻辑操做的SQL语句的过程。LogMiner运行在Oracle版本8.1或者更高版本中。 一,如何使用Logminer: 先要安装logminer的两个包;以SYS用户运行下面两个脚本,其中第一个脚本dbmslm.sql用来建立DBMS_LOGMNR包,该包用来分析日志文件。第二个脚本dbmslmd.sql用来建立DBMS_LOGMNR_D包,该包用来建立数据字典文件。 D:\oracle\product\10.2.0\db_1\RDBMS\ADMIN>sqlplus /nolog SQL*Plus: Release 10.2.0.4.0 - Production on星期五4月10 17:49:02 2009 Copyright (c) 1982, 2007, Oracle. All Rights Reserved. SQL> conn sys/oracle as sysdba 已链接。 SQL> SQL> @dbmslm.sql 程序包已建立。 受权成功。 SQL> SQL> @dbmslmd.sql 程序包已建立。 二,建立数据字典文件 数据字典文件是一个文本文件,使用包DBMS_LOGMNR_D来建立,若是咱们要分析的数据库中的表有变化(好比表结构有变化等),影响到库的数据字典也发生变化。另一种状况是在分析另一个数据库文件的重作日志时,也必需要从新生成一遍被分析数据库的数据字典文件。 首先须要修改参数UTL_FILE_DIR ,该参数值为服务器中放置数据字典文件的目录,10g中咱们经过动态修改参数的方式来修改,而后从新启动数据库生效。其中logs_utl_file目录先期创建好。 SQL> alter system set UTL_FILE_DIR='/opt/oradata/logs_utl_file' scope=spfile; SQL> shutdown immediate 数据库已经关闭。 已经卸载数据库。 ORACLE例程已经关闭。 SQL> SQL> startup ORACLE例程已经启动。 Total System Global Area 167772160 bytes Fixed Size 1295608 bytes Variable Size 125831944 bytes Database Buffers 33554432 bytes Redo Buffers 7090176 bytes 数据库装载完毕。 数据库已经打开。 SQL> SQL> show parameter UTL_FILE NAME TYPE ------------------------------------ ------------- VALUE ------------------------------ utl_file_dir string /opt/oradata/logs_utl_file SQL> 而后建立数据字典文件: BEGIN dbms_logmnr_d.build( dictionary_filename => ' logminer_dict.ora', dictionary_location => ' /opt/oradata/logs_utl_file'); END; / OK ,能够看到在logs_ult_file中已经生成了logminer_dict.ora数据字典文件。数据字典文件是能够打开的文本文件。有兴趣能够打开看看。 建立数据字典是让logminer引用实际到内部数据字典中的部分是使用对象的名称,而不是系统内部的16进制的ID. 三,建立要分析的日志文件(在线日志或归档日志)的列表 (1)分析在线的重作日志 A。创建列表 SQL> execute dbms_logmnr.add_logfile(LogFileName => '/opt/oradata/stream1/redo01.log', options => dbms_logmnr.new); PL/SQL过程已成功完成。 B。添加其余日至文件到列表 SQL> execute dbms_logmnr.add_logfile(LogFileName => '/opt/oradata/stream1/redo02.log', options => dbms_logmnr.addfile); PL/SQL过程已成功完成。 SQL> execute dbms_logmnr.add_logfile(LogFileName => '/opt/oradata/stream1/redo03.log', options => dbms_logmnr.addfile); PL/SQL过程已成功完成。 (2)分析归档的重作日志 A。创建列表 SQL> execute dbms_logmnr.add_logfile(LogFileName => '/u01/app/oracle/arch_log/1_20_765410122.dbf', options=>dbms_logmnr.new); PL/SQL过程已成功完成。 B。添加其余日志文件到列表 SQL> execute dbms_logmnr.add_logfile(LogFileName => '/u01/app/oracle/arch_log/1_21_765410122.dbf', options=>dbms_logmnr.addfile); PL/SQL过程已成功完成。 若是你以为不须要分析已经在列表中的在线或归档日志,能够经过removefile命令删除: SQL> execute dbms_logmnr.add_logfile(LogFileName => '/u01/app/oracle/arch_log/1_21_765410122.dbf', options=>dbms_logmnr.removefile); PL/SQL过程已成功完成。 四,使用Logminer进行日志分析 无限制条件: SQL> execute dbms_logmnr.start_logmnr(DictFileName => /opt/oradata/logs_utl_file/logminer_dict.ora); PL/SQL过程已成功完成。 有限制条件: 经过对过程DBMS_LOGMNR.START_LOGMNR中的时间或者SCN参数的设置,能够缩小分析日志文件的范围: 如咱们仅仅分析2009年2月23日到2005年7月26日的日志: SQL> execute dbms_logmnr.start_logmnr( DictFileName => '/opt/oradata/logs_utl_file/logminer_dict.ora', StartTime => to_date('2009-2-23 00:00:00','YYYY-MM-DD HH24:MI:SS') EndTime => to_date(''2009-2-26 23:59:59','YYYY-MM-DD HH24:MI:SS ')); 相关的参数以下: 参数参数类型默认值含义 StartScn数字型0分析重做日志中SCN≥StartScn日志文件部分 EndScn数字型0分析重做日志中SCN≤EndScn日志文件部分 StartTime日期型1998-01-01分析重做日志中时间戳≥StartTime的日志文件部分 EndTime日期型2988-01-01分析重做日志中时间戳≤EndTime的日志文件部分 DictFileName字符型字典文件该文件包含一个数据库目录的快照。 使用该文件可使获得的分析结果是能够理解的文本形式, 而非系统内部的16进制 Options BINARY_INTEGER 0系统调试参数,实际不多使用 五,获得分析结果: 到如今为止,咱们已经分析获得了重做日志文件中的内容。动态性能视图v$logmnr_contents包含LogMiner分析获得的全部的信息。 SELECT sql_redo FROM v$logmnr_contents; 若是咱们仅仅想知道某个用户对于某张表的操做,能够经过下面的SQL查询获得,该查询能够获得用户TONY对表R_WIP_TST所做的一切工做。 SQL>; SELECT sql_redo FROM v$logmnr_contents WHERE username='SCOTT' AND TABLE_NAME='emp'; 须要强调一点的是,视图v$logmnr_contents中的分析结果仅在咱们运行过程'dbms_logmrn.start_logmnr' 这个会话的生命期中存在(若是执行了DBMS_LOGMNR.END_LOGMNR分析结果将消失)。这是由于全部的LogMiner存储都在PGA内存中,全部其余的进程是看不到它的,同时随着进程的结束,分析结果也随之消失。 若是须要,能够经过removefile命令删除日志分析文件。 SQL> execute dbms_logmnr.add_logfile(LogFileName => '/u01/app/oracle/arch_log/1_21_765410122.dbf', ptions=>dbms_logmnr.removefile); 六,使用DBMS_LOGMNR.END_LOGMNR结束日志分析过程,释放内存。 最后,使用过程DBMS_LOGMNR.END_LOGMNR终止日志分析事务,此时PGA内存区域被清除,分析结果也随之再也不存在。 SQL> execute dbms_logmnr.end_logmnr;