ITPub博客

首页 > Linux操作系统 > Linux操作系统 > logmnr使用方法 (ZT)

logmnr使用方法 (ZT)

原创 Linux操作系统 作者:kvsion 时间:2009-08-30 13:43:25 0 删除 编辑

有三种方法能得到数据字典的方法: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博客 ” ,链接:http://blog.itpub.net/11269677/viewspace-613570/,如需转载,请注明出处,否则将追究法律责任。

下一篇: ORACLE 发邮件
请登录后发表评论 登录
全部评论

注册时间:2008-09-20

  • 博文量
    17
  • 访问量
    23129