因为某次偶然事故,想要看看究竟发生了什么,于是用到了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内容。