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


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語句來持久保存。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM