使用Oracle的logminer工具进行日志挖掘

时间:2023-01-06 07:43:11
Logminer是 oracle从8i开始提供的用于分析重做日志信息的工具,它包括DBMS_LOGMNR和DBMS_LOGMNR_D两个package,后边的D是字典的意思。它既能分析redo log file,也能分析归档后的archive log file。在分析日志的过程中需要使用数据字典,一般先生成数据字典文件后使用, 10g版本还可以使用在线数据字典。
*_V3ji BsK%B0
)v5O8M0`*V.Q0Logminer可以分析其它 数据库的重做日志文件,但是必须使用重做日志所在数据库的数据字典,否则会出现无法识别的乱码。另外被分析数据库的操作系统平台最好和当前Logminer所在数据库的运行平台一样,且block size相同。
G*IZ2[:K8m*g0 ITPUB个人空间0^']Ya`1M~
1、运行以下2个脚本安装logminer功能,一般数据库都已经 安装好了: ITPUB个人空间o ^7f)[n q)wK

NtQ] pR2hAB8I f0p5b2@/u01/app/oracle/product/10.2/rdbms/admin$ ls -l dbmsl*
[({c-mb d0-rw-r--r--   1 oracle   oinstall      17246 Oct 27 2006  dbmslm.sql
wX H$Zgp5?,r0-rw-r--r--   1 oracle   oinstall       4663 Oct 27 2006  dbmslmd.sql ITPUB个人空间3B7gDqn7zErX
ITPUB个人空间Zt4d4r ~F
2、要生成数据字典文件,首先要修改一个utl_file_dir参数,修改为*或者想存放数据字典文件位置的目录:
Guwk i}E.n0
b!^?1Q'`&UE0u0SQL> show parameter utl_file_dir
|-B-z?&Q/u0
-^b,}7Wt)GK0NAME                                 TYPE        VALUE ITPUB个人空间{SIY-K.RW-n0E^zl
------------------------------------ ----------- ------------------------------
{y(oA%P6f)G0De*y0utl_file_dir                         string
J|{]4E3{)s Y0
y$rJe:ld h0SQL> alter system set utl_file_dir='*' scope=spfile; ITPUB个人空间EY)I8J7O?1S
ITPUB个人空间w(P;bx"]%r I.G
System altered. ITPUB个人空间U'am|X O
ITPUB个人空间(I8o3rX B3h
SQL> shutdown immediate ITPUB个人空间(T^4~B Q5X)ao(E:s
Database closed.
$hRA,t$g0Database dismounted.
CzOy-q/z@0ORACLE instance shut down. ITPUB个人空间9w|9asUkg,[n
SQL> startup
i&XBEdWvu0ORACLE instance started.
a,q*D-Olf3U RP8K0 ITPUB个人空间'c0dz,r-m(Aqh
3、生成数据字典文件 ITPUB个人空间)VV B'ef
ITPUB个人空间s QO1^oZ
SQL> show parameter utl_file_dir ITPUB个人空间i(RRpn2P Eh
ITPUB个人空间2UY-Xg ?xu
NAME                                 TYPE        VALUE
:W*{'R^iv kZ0------------------------------------ ----------- ------------------------------ ITPUB个人空间+y}-RI^w#[
utl_file_dir                         string      *
3h&k7J:c7[ `9}v T2c0SQL> EXECUTE dbms_logmnr_d.build(dictionary_filename => 'dict20090625.dat',dictionary_location => '/orabak');
KfdW rb0
t8Nl*o8D#nT7LRY0PL/SQL procedure successfully completed.
$`7b;ntK6\.b"pf3l0 ITPUB个人空间B]ST+O1xY'l3l
4、可以先设置使用的表空间
s O5nr1J0 ITPUB个人空间$iA3rH~y;U#wyf!O
SQL> EXECUTE DBMS_LOGMNR_D.SET_TABLESPACE('erp')  
$Pp)f#M"C,c3R3T-Ee^0 ITPUB个人空间%BJpCz&h"g
PL/SQL procedure successfully completed.
-l/Y i8zv/K:C_"Q2w0 ITPUB个人空间KZ2w!k6XJI"p
5、填加要分析的日志文件 ITPUB个人空间0wv E:]VT

Yxcx6sz%cC0SQL> EXECUTE DBMS_LOGMNR.ADD_LOGFILE(LogFileName=>'/orabak/testarch/1_89802_640266118.dbf',Options=>dbms_logmnr.new);
D$^+Nr1D.j*B8s-C0
G-W6z k&ab0PL/SQL procedure successfully completed. ITPUB个人空间3sw"xt T1DFy
ITPUB个人空间A*@gB8VZ)Ii
6、可以继续填加,用dbms_logmnr.removefile可以删除 ITPUB个人空间#L\/MiM:bfs
ITPUB个人空间oO(~l&_%g6I3~
SQL> EXECUTE DBMS_LOGMNR.ADD_LOGFILE(LogFileName=>'/orabak/testarch/1_89807_640266118.dbf',Options=>dbms_logmnr.addfile); ITPUB个人空间:vTCY4O tB{

'wSA.M2D#s4U&F0PL/SQL procedure successfully completed. ITPUB个人空间 T$jW4hE0vA(E ]x?
ITPUB个人空间 I|9CC8V
7、开始分析日志 ITPUB个人空间1Yjwa^J5Zp

&{,F xU#f1W^6Dzc8z*P0SQL> execute dbms_logmnr.start_logmnr(dictfilename=>'/orabak/dict20090625.dat'); ITPUB个人空间Y8IQ;e4]3X&dk(X0G

+DC$t2maTv0G0PL/SQL procedure successfully completed.
b;z2|)_3wP%t0
#]ST \0Y0提取特定时间的日志:
\kFE;kg0 ITPUB个人空间'^(@G\fO&h7X)mN/U
dbms_logmnr.start_logmnr(dictfilename=>'/orabak/dict20090625.dat', ITPUB个人空间$_O.p!i3Iv Jg;QN8e
starttime=>to_date('2009-06-24 09:30:00','YYYY-MM-DD HH24:MI:SS'), ITPUB个人空间{ g0Y'@9uV
endtime=>to_date('2009-06-24 12:00:59','YYYY-MM-DD HH24:MI:SS'))
V$A,yx{u0
F8f,Vz"S3BCUM PJ$V0使用在线数据字典: ITPUB个人空间8_2}%d v3QY'C!e
ITPUB个人空间,v;w|0XBM3`(Z
SQL> EXEC DBMS_LOGMNR.START_LOGMNR(OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG);
t7t}H'N0A v.b0 ITPUB个人空间*Rv?%c@!ip
PL/SQL procedure successfully completed.
]N/do_0 ITPUB个人空间p1q_G)pZ ]j
8、查看结果
Ndr u6[F$L0i0 ITPUB个人空间ch#kc#Go#K$h
select timestamp,username,session#,sql_redo,operation from v$logmnr_contents; ITPUB个人空间/]JdS(R1N1G6J

2sq;jcC09、结束分析,释放PGA内存资源 ITPUB个人空间 i;WQ/g ~Z'i
ITPUB个人空间5m+T#J0goX-WoW}kF%i
SQL> exec dbms_logmnr.end_logmnr; ITPUB个人空间bl;q*Ot%_@:?

Kd/]Sr:I8t0PL/SQL procedure successfully completed.
,m0p0^%djT0
m)X5`(w1Zp0注意,v$logmnr_contents内容保存了日志的内容,只在当前会话有效,如果想长期保存分析,可以在当前会话用create table tablename as select * from v$logmnr_contents语句来持久保存。