Oracle LogMiner 是Oracle公司从产品8i以后提供的一个实际非常有用的分析工具,使用该工具可以轻松获得Oracle 重作日志文件(归档日志文件)中的具体内容,特别是,该工具可以分析出所有对于数据库操作的DML(insert、update、delete等)语句,另外还可分析得到一些必要的回滚SQL语句。该工具特别适用于调试、审计或者回退某个特定的事务,从9i可以也可以分析ddl语句了(幸福吧)。今天我要讲的是oracle10g,所以dml和ddl语句都是可以分析到的。
LogMiner分析工具实际上是由一组PL/SQL包和一些动态视图(Oracle8i内置包的一部分)组成,它作为Oracle数据库的一部分来发布,是8i产品提供的一个完全免费的工具。但该工具和其他Oracle内建工具相比使用起来显得有些复杂,主要原因是该工具没有提供任何的图形用户界面(GUI)。本文将详细介绍如何安装以及使用该工具。
一、LogMiner的用途
3. 优化和扩容计划:可通过分析日志文件中的数据以分析数据增长模式。
[oracle@IM-8-201 admin]$ pwd /oracle/ora10/product/rdbms/admin [oracle@IM-8-201 admin]$ sqlplus / as sysdba SQL*Plus: Release 10.2.0.4.0 - Production on Mon Nov 21 00:13:51 2011 Copyright (c) 1982, 2007, Oracle. All Rights Reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> @dbmslm.sql Package created. Grant succeeded. SQL> @dbmslmd.sql Package created.
SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. SQL> startup; ORACLE instance started. Total System Global Area 1577058304 bytes Fixed Size 2084264 bytes Variable Size 385876568 bytes Database Buffers 1174405120 bytes Redo Buffers 14692352 bytes Database mounted. Database opened. SQL> show parameter UTL_FILE NAME TYPE ------------------------------------ ---------------------- VALUE ------------------------------ utl_file_dir string /oradata/logs_utl_file --这里现在出来我们修改的目录了吧
SQL> EXECUTE dbms_logmnr.ADD_LOGFILE(LOGFILENAME=>'/oraarch/1_2_763121338.dbf',OPTIONS=>dbms_logmnr.new); PL/SQL procedure successfully completed. --还可以继续添加归档日志文件 SQL> EXECUTE dbms_logmnr.add_logfile(LogFileName=>'/oraarch/1_3_763121338.dbf',Options=>dbms_logmnr.addfile); PL/SQL procedure successfully completed.
SQL> EXECUTE dbms_logmnr.start_logmnr(DictFileName=>'/oradata/logs_utl_file/jscn.ora');
到现在为止,我们已经分析得到了日志文件中的内容。动态性能视图v$logmnr_contents包含LogMiner分析得到的所有的信息。
SQL> SELECT sql_redo FROM v$logmnr_contents;如果我们仅仅想知道某个用户对于某张表的操作,可以通过下面的SQL查询得到,该查询可以得到用户TONY对表R_WIP_TST所作的一切工作。
SQL>SELECT sql_redo FROM v$logmnr_contents WHERE username='TONY' AND table_name='R_WIP_TST';
SQL> EXECUTE dbms_logmnr.add_logfile(LogFileName=>'/oraarch/1_2_763121338.dbf',Options=>dbms_logmnr.REMOVEFILE);6)分析完,退出logminer
SQL> exec dbms_logmnr.END_LOGMNR; PL/SQL procedure successfully completed.