因为某次偶然事故,想要看看究竟发生了什么,于是用到了logminer——查看归档日志中的SQL记录。

首先需要用SYSDBA安装LogMiner,执行:
$ORACLE_HOME/rdbms/admin/dbmslm.sql
$ORACLE_HOME/rdbms/admin/dbmslmd.sql.

创建字典文件:

DECLARE
BEGIN
    dbms_logmnr_d.build(dictionary_filename => 'logmnr_dic.ora',
                        dictionary_location => 'F:\ORCL\ARC');
END;

该文件几十兆到几百兆不等,视数据库大小而定,创建时间也由数秒至数分钟不等:

bash-3.00$ ls -lh l*
-rw-r--r--   1 oratest  dba          80M Aug 24 13:28 logmnr_dic.ora
bash-3.00$ ls -lh l*
-rw-r--r--   1 oratest  dba         136M Aug 24 13:38 logmnr_dic.ora
bash-3.00$ ls -lh l*
-rw-r--r--   1 oratest  dba         169M Aug 24 13:43 logmnr_dic.ora
bash-3.00$ ls -lh l*
-rw-r--r--   1 oratest  dba         190M Aug 24 13:47 logmnr_dic.ora
bash-3.00$ ls -lh l*
-rw-r--r--   1 oratest  dba         247M Aug 24 13:56 logmnr_dic.ora

该字典文件实际上是一系列SQL。
如果不希望在正式环境中安装logminer而又想要用,那就克隆一套环境,然后修改该字典文件。一般,在正式环境创建字典文件拷贝过来就可以了。

该文件的第一句SQL就是创建字典表,包含了数据相关信息:
CREATE_TABLE DICTIONARY_TABLE ( … );

将接下来的INSERT语句做调整。

bash-3.00$ sqlplus '/ as sysdba'

SQL*Plus: Release 9.2.0.6.0 - Production on Fri Aug 24 13:16:38 2007

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

Connected to:
Oracle9i Enterprise Edition Release 9.2.0.6.0 - 64bit Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.6.0 - Production

SQL> DECLARE
  2  BEGIN
  3      dbms_logmnr.add_logfile(logfilename => '/usr/tmp/1_93286.dbf',
  4                              options     => dbms_logmnr.NEW);
  5  END;
  6  /

PL/SQL procedure successfully completed.

SQL> DECLARE
  2  BEGIN
  3      dbms_logmnr.start_logmnr(dictfilename => '/usr/tmp/logmnr_dic.ora');
  4  END;
  5  /

PL/SQL procedure successfully completed.

可以从v$logmnr_logs和v$logmnr_contents分别查看加载的日志文件和SQL REDO内容。