有三种方法能得到数据字典的方法:ITPUB个人空间6?6x7cy;hyq$Fp
1)、将数据字典提取到一个平面数据字典文件(DBMS_LOGMNR_D.STORE_IN_FLAT_FILE)ITPUB个人空间%dA!NR5?
2)、将数据字典提取到重做日志文件(DBMS_LOGMNR_D.STORE_IN_REDO_LOGS)
)E%L D7H {*@112696773)、使用当前的数据库的联机数据字典(DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG),只能分析当前数据库的重做日志文件,此时就不需要平面字典文件。ITPUB个人空间v$S(e8MD&b VU d e.[
ITPUB个人空间OB+dlM7`!Hr4h5r
例子:
f,?v/j8S Wn+f112696771、修改初始化参数文件ITPUB个人空间 VIC+k-\Al
alter system set utl_file_dir='E:\oracle\logmnr\' SCOPE=SPFILE;ITPUB个人空间sHKkBv_/[u5Wu
2、关闭数据库并重启
vg.I'@t)i0gT11269677 shutdown immediate;ITPUB个人空间&Bc/D#B!Ed;s]
startup;ITPUB个人空间8GX%U#^ j7Io/RS9q
3、提取平面数据字典文件
F0M6b,zDp1Z/y,o11269677 execute dbms_logmnr_d.build('logmnr_dict.ora','E:\oracle\logmnr\',options=>DBMS_LOGMNR_D.STORE_IN_FLAT_FILE);ITPUB个人空间Re R$H5`^,\/|
'DBMS_LOGMNR_D.STORE_IN_FLAT_FILE表示提取到平面字典文件ITPUB个人空间#i&v)tgj1DkLplb
'DBMS_LOGMNR_D.STORE_IN_REDO_LOGS表示提取到重做日志文件
2i`HcuJ6M#`$P112696774、指定LogMiner要分析的重做日志文件
*~o-h e#I}q#[$k u11269677 EXECUTE DBMS_LOGMNR.ADD_LOGFILE('E:\oracle\product\10.2.0\oradata\orcl\REDO01.LOG',options=>dbms_logmnr.NEW);ITPUB个人空间y[F2v"h#b^(z8E
EXECUTE DBMS_LOGMNR.ADD_LOGFILE('E:\oracle\product\10.2.0\oradata\orcl\REDO02.LOG',options=>dbms_logmnr.ADDFILE);ITPUB个人空间C U_+N [A0dc6v@
EXECUTE DBMS_LOGMNR.ADD_LOGFILE('E:\oracle\product\10.2.0\oradata\orcl\REDO03.LOG',options=>dbms_logmnr.ADDFILE);ITPUB个人空间0l7Xn i!z){
5、启动LogMiner会话
8G rIv/U O.t d11269677 EXECUTE DBMS_LOGMNR.START_LOGMNR(DictFileName=>'E:\oracle\logmnr\logmnr_dict.ora');ITPUB个人空间#mcd4BZ
'dbms_logmnr.NO_ROWID_IN_STMT取消"ROWID="的内容
f-@/N)hA9t2B11269677 EXECUTE DBMS_LOGMNR.START_LOGMNR(options=>dbms_logmnr.NO_ROWID_IN_STMT);
J7X0tfEr,z11269677
0YcYK)aQ'c+[2j11269677 'dbms_logmnr.DICT_FROM_ONLINE_CATALOG只分析当前数据库的重做日志文件
dp6T?N NU11269677 EXECUTE DBMS_LOGMNR.START_LOGMNR(options=>dbms_logmnr.DICT_FROM_ONLINE_CATALOG);
[a0G-lZF!| A11269677ITPUB个人空间!D$G,U4hY }.~(U
EXECUTE DBMS_LOGMNR.START_LOGMNR(options=>dbms_logmnr.NO_ROWID_IN_STMT+dbms_logmnr.DICT_FROM_ONLINE_CATALOG);
| C~-].sI%n2V`11269677
X^lz4yJ^112696776、查看结果ITPUB个人空间DB(eN \/t;U5n
SELECT * FROM V$LOGMNR_LOGFILE;
Lf9F KSI^Zp112696777、结束LogMiner会话ITPUB个人空间d/BAK0}-FR
EXECUTE DBMS_LOGMNR.END_LOGMNR;
Wo!R6F o112696778、与LogMiner相关的数据字典
0bV;V,}/b9r'B#y#P11269677 v$loglist 它用于显示历史日志文件的一些信息ITPUB个人空间:jziKj)]g@
v$logmnr_dictionary 因logmnr可以有多个字典文件,该视图用于显示这方面信息。ITPUB个人空间&^!M&qt@%{ l
v$logmnr_parameters 它用于显示logmnr的参数ITPUB个人空间i0e(u-]-i!j ]o
v$logmnr_logs 它用于显示用于分析的日志列表信息。
MC Q.Ep[?3q11269677
Logminer是每个Dba都应熟悉的工具,当一天由于用户的误操作你需要做不完全的恢复时,由于你无法确定这个操作是哪个时间做的,所以这对你的恢复就带来的很大的难度,丢失的数据也不能完全恢复回来。而LogMiner就可以帮你确定这个误操作的准确时间。ITPUB个人空间8a/Y\){N*b5{
ITPUB个人空间"M T-SP^3P;Y6[
我的测试环境是Aix4.3.3的操作系统,Oracle9.2.0.3的测试库。
e#Rn;ev;N+S11269677ITPUB个人空间%WMchm| ?BC0l
一、LogMiner的几点说明
oN8fQ\d:F112696771、LogMiner可以帮你确定在某段时间所发的各种DML,DDL操作的具体时间和SCN号,它所依据的是归档日志文件及联机日志文件。
*g|&r!G&@{112696772、它只能在Oracle8i及以后的版本中使用,不过它可以分析Oracle8的日志。
|}`%F"e iH{[112696773、Oracle8i只能用于分析DML操作,到Oracle9i则可以分析DDL操作了。ITPUB个人空间RZQu4a
4、LogMiner不支持索引组织表、Long、LOB及集合类型。
!w+Ll_G x!}N112696775、MTS的环境也不能使用LogMiner.ITPUB个人空间$A"Ll^&p Zf(m{9`
ITPUB个人空间(S$o;gV"yY
二、操作步骤
(Sc QhLAG112696771、设定用于LogMiner分析的数据文件存放的位置ITPUB个人空间EzGk9dbm1D4s%J
这是设定utl_file_dir参数的过程,我的示例:ITPUB个人空间j/a-Z:sjQ3`[
a、在initctc.ora文件中加入如下一行ITPUB个人空间&T#\%lw @ y#U5H
utl_file_dir=/u01/arch
V7a@A([]$uS~,s/Q11269677b、得启数据库
?G0a)u!]|11269677 oracle>sqlplus /nolog
D+|1|:a!{#O,a11269677 sql>conn / as sysdbaITPUB个人空间y9h,?7D e\/U
sql>shutdown immediate
!u _WM&s:sO_7K11269677 sql>statupITPUB个人空间;[O1WG5E.k
ITPUB个人空间|6c8w @E p
2、生成数据字典文件,是通过dbms_logmnr_d.build()来完成。
,?G#@4I;}V$Z7G11269677 SQL> BEGINITPUB个人空间(kZ"~#b.b){ad
2 dbms_logmnr_d.build(ITPUB个人空间/E9OB'g+b)~
3 dictionary_filename => 'logminer_dict.dat',
e5rAUX:q7m`,i11269677 4 dictionary_location => '/u01/arch'
(`g E4{hT b11269677 5 );ITPUB个人空间R4jD+Pf(KP
6 END;ITPUB个人空间!hV)fQ!_.Cw[(i8j!M
7 /ITPUB个人空间 z`~ R fh x,}
ITPUB个人空间~7P2hm8W x2Wq
dictionary_location指的是Logminer数据字典文件存放的位置,它必须匹配utl_file_dir的设定。
'o+}-R0T5j-gf f]11269677 其中的dictionary_filename指的是放于存放位置的字典文件的名字,名字可以任意取。ITPUB个人空间[6AmZ lQ
|t6I3k1G!W F2s8M112696773、建立一个日志分析表
l(vQ!|]^)X11269677 a、建立日志分析表数据库必须在mount或nomount状态,启动数据库到mount状态。ITPUB个人空间v8zP P7W II;M+Er
sqlplus /nolog
Vyn;L$m.}11269677 sql>conn / as sysdbaITPUB个人空间Y0T~a.g"c ?`,C
sql>shutdown immediateITPUB个人空间b/FH6n!d'k YC[
sql>starup mount
d$w aMi(G11269677 ITPUB个人空间w"`a8y3{I Rk
b、建立日志分析表,使用dbms_logmnr.add_logfile()
4]3r"_W(Z J(vMc$z11269677 SQL> BEGIN
+nij1aeQ*hd:@11269677 2 dbms_logmnr.add_logfile(
K.OI$Mh}'YU9G11269677 3 ptions => dbms_logmnr.new,
sV0H-zu~M11269677 4 logfilename => '/u01/arch/arc_ctc_0503.arc'ITPUB个人空间/vG#I"byoz
5 );ITPUB个人空间 u`w$T"d8D1B
6 END;
y6T;M L^11269677 7 / ITPUB个人空间2T`zB*T!{2IY$H
其中的options有三种取值,dbms_logmnr.new用于建一个日志分析表;dbms_logmnr.addfile用于加入用于分析的的日志文件;dbms_logmnr.removefile用于移出用于分析的日志文件。
o0]Ao]?^ OQ:b11269677
/{ GLE(L2Sg11269677
w(iW&p'?Z n112696774、添加用于分析的日志文件。ITPUB个人空间7s`axa3eC"Kf,v
SQL> BEGINITPUB个人空间|A[4{5Z4J6^ i
2 dbms_logmnr.add_logfile(ITPUB个人空间,i+TN9PL|[?5g h
3 ptions => dbms_logmnr.addfile,
i7M Ff"o7^0D1l[!Z11269677 4 logfilename => '/u01/arch/arc_ctc_0504.arc'
? ?n`,IV11269677 5 );ITPUB个人空间Y9C9A-~;a"Y*B
6 END;
T(S1f&V[ YXF11269677 7 /ITPUB个人空间&m Ke+?B0z
ITPUB个人空间ZC'K6|{VX;|
使用则可以把这个文件从日志分析表中移除,从而不进行分析。ITPUB个人空间&fv.V3[1i0Dm!y)pl
SQL> BEGIN
E9qul5kN)j11269677 2 dbms_logmnr.add_logfile(ITPUB个人空间GJpG:j} sQ
3 ptions => dbms_logmnr.removefile,
4l*lj&wp-{aEyq11269677 4 logfilename => '/u01/arch/arc_ctc_0503.arc'ITPUB个人空间6wf W6hg@
5 );
mN&xj(p8c11269677 6 END;ITPUB个人空间(u;]&?(qF0bd
7 / ITPUB个人空间6X3xU5n+`w$Q(g
ITPUB个人空间%]"ttl'ZV
O^A8c I"VEN;c0e112696775、启动LogMiner进行分析。ITPUB个人空间i A#tD-?}mU D-u
SQL> BEGIN
h5Mz X Sd11269677 2 dbms_logmnr.start_logmnr(ITPUB个人空间j^/s+Bhau*p3SS
3 dictfilename => '/u01/arch/logminer_dict.dat',ITPUB个人空间T x/w.nKC
4 starttime => to_date('20030501 12:15:00','yyyymmdd hh24:mi:ss'),ITPUB个人空间)tL f B-? LMwDTD
5 endtime => to_date('20030501 15:40:30','yyyymmdd hh24:mi:ss')
y-kJce2W*[)M7e11269677 6 );ITPUB个人空间^+v(]Ur\@
7 END;ITPUB个人空间 N&W)iS9|Oc Y
8 /
_8|9^*D#Xx i11269677 ITPUB个人空间0[Jq$a?J
即分析2003年5月1日这天12:15至15:40这段时间,并把分析结果放到数据字典中以用于查询。还有两个参数StartScn(起始scn号)及EndScn(终止Scn)号。
1}#@7q,P7D([lBy11269677
wC)_xY112696776、查看日志分析的结果,通过查询v$logmnr_contents可以查询到ITPUB个人空间,m N Cj Jg$[v
a、查看DML操作,示例:ITPUB个人空间+\ i&|y&{E+\
SELECT operation,
8NIpW6K,^4@@!e11269677 sql_redo,
o8T P{8T4L11269677 sql_undo,
[;Rh&zQ)p @11269677 FROM V$logmnr_contentsITPUB个人空间"|!j9OBP7d
WHERE seg_name = 'QIUYB';
Gl,Fd C cqE'Z)GP11269677 ITPUB个人空间 lAy+o_ E$v8Q/XS5@ K
OPERATION SQL_REDO SQL_UNDO
N-nh&f eT)w n11269677 ---------- -------------------------- --------------------------
*BdhJ;|T ^6P c G11269677 INSERT inser into qiuyb.qiuyb ... delete from qiuyb.qiuyb...
nc%| wpH k11269677 ITPUB个人空间)qzV:V e
其中operation指的是操作,sql_redo指的是实际的操作,sql_undo指的是用于取消的相反的操作。
s'i5U)K fQJ11269677
D c8U,~:n11269677 b、查看DDL操作,示例:
3y4WV @/| Y11269677 SELECT timstamp,ITPUB个人空间~z u%|Z,P
sql_redoITPUB个人空间(Mb(J N+c
FROM v$logmnr_contents
+M2h/yp;j-`5X11269677 WHERE upper(sql_redo) like '%TRUNCATE%';
1ikTcs11269677ITPUB个人空间J:B"rx/n@)JA%fZ
7、结束LogMiner的分析。
e:q bYg#~~6oKv11269677 SQL>BEGINITPUB个人空间%o p7ofU I
2 dbms_logmnr.end_logmnr;
wQ \a(u-^k11269677 3 end;ITPUB个人空间t5L!d ] \T$r#f z
4 /
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/11269677/viewspace-613570/
,如需转载,请注明出处,否则将追究法律责任。