没有跨不过的坎,没有过不去的河;没有必胜的秘籍,只有拼命的努力.

LogMiner用法

上一篇 / 下一篇  2008-06-25 00:39:49 / 个人分类:ORACLE数据库

 

---通过SQL的界面来查询redo日志的工具。

用途:
N0R4o`7p7?e01) 用户在误删除数据后,可以通过LogMiner来恢复;虽然也可以通过RMAN来恢复,但需要有之前的备份,要先转出再query,会比较麻烦;LogMiner比较简单;
9Q}d3Pk4]sk02) 可以进行后审计功能,LOG 日志中包含跟踪任何DML和DDL的的全部信息,可以知道执行的顺序和有谁来执行;

ITPUB个人空间)bU"O p*k%S M

LOGMINER通过固定视图 V$LOGMNR_CONTENTS来提供REDO LOG的信息; V$LOGMNR_CONTENTS 每个字段的信息可以参考ITPUB个人空间7yO eBOF
《Database Administrator Guide》。
Z9t8^{6| T ze0几个组件:
3V6VZK&DYS0Redo LogsITPUB个人空间M v/ywo iB*{
在使用LogMiner时,需要指定想要分析日志的名称; 可以通过dbms_logmnr.add_logfile来添加;ITPUB个人空间'x6lhG YD(|
需要注意的几点:ITPUB个人空间!h|/d `&IXr
1) 重做日志必须是8.0或者以上版本Oracle数据库,在版本9.0.1引入的几个特性只能运用在9i或者之上版本的数据库产生的redo log。ITPUB个人空间'_/@ ~d h w&K,a
2) 在版本9.2引入了对LOB和LONG数据类型的支持,但只支持9.2或以后的版本的数据库产生的REDO LOG。
nrFe:W'[03) redo log的字符集必须和LOGMINER运行所在的数据库的字符集兼容;ITPUB个人空间 ^/P(Pw~J?5_
4) 一般,分析REDO LOG需要的数据字典来自于产生REDO LOG的同一个数据库。
Rd(hHwE#v`C oV05) LogMiner必须运行在和产生REDO LOG的硬件平台要相同,但不要求运行在同一个系统;
q&ZO#ulc n2B06) 运行LogMiner时要指定正确的REDO LOG ;如果省略包含一些你需要的数据的REDO LOG,那在查询v$logmnr_contents会无法得到正确的结果;ITPUB个人空间nUj'm'X:`:A x
Dictionary OptionsITPUB个人空间 Ecr2j T d T
LogMiner需要数据字典才能完整的翻译REDO LOG的内容;LOGMINER使用字典来转换内部对象标识符和数据类型为对象名称和数据格式;没有数据字典,LogMiner返回内部的对象ID和用16进制表示数据。
[8L_7qzr0举个例子,返回的不是如下SQL 语句:
&m'LLofEF0INSERT INTO emp(name, salary) VALUES ('John Doe', 50000);
i'y9]4I/U!@E)x9G0而是:ITPUB个人空间 ~{,@&~8d E
insert into Object#2581(col#1, col#2) values (hextoraw('4a6f686e20446f65'),hextoraw('c306'));"ITPUB个人空间n ?yGo:G1w P
字典的信息可以来自普通文件和REDO LOG和在线目录(就是当前数据字典)。ITPUB个人空间G|p$p1~!si;h:L
可以通过EXTRACT把字典信息转出到一个普通文件和REDO LOG文件。
[9Rblu2QRx+K8dH0U0转出(Extract)字典文件的必须有相同的字符集和通过产生REDO LOG的数据库创建;但字典Extract后,可以在其他数据库上个挖掘redolog的,而不需要连接到原数据库;ITPUB个人空间3v:iKEO
而且转出(Extract)字典文件可以避免当前的数据字典只包含最新的表格定义时出现的问题;比如,你在搜索过去某个时间被删除的表格,然而当前的字典文件没有任何的关于该删除TABLE的信息。ITPUB个人空间 mX4p$`*S d$|
Extract到普通文件:ITPUB个人空间/SJ0l+k!b
1) 在init.ora中设定参数:
YqBb@`8X!_#O0UTL_FILE_DIR = /oracle/database
0U8u$@9\Y d02) 重启服务器:
+wHo-`s8~}9Z:\9p{0startup pfile=/oracle/data/init.oraITPUB个人空间9VW ~iJ%I
3) Extract 字典信息:ITPUB个人空间"W;vt2G6z]1w-Zp0M
EXECUTE DBMS_LOGMNR_D.BUILD(’dictionary.ora’, -ITPUB个人空间za_Of
’/oracle/database/’, -
6v4C.g O/_7U'P0OPTIONS => DBMS_LOGMNR_D.STORE_IN_FLAT_FILE);

Extract到Redo log,直接执行如下SQL:ITPUB个人空间Q#W _BVX4`H
EXECUTE DBMS_LOGMNR_D.BUILD ( -ITPUB个人空间^PE5]'S:pa
OPTIONS=>DBMS_LOGMNR_D.STORE_IN_REDO_LOGS);ITPUB个人空间kjx Tw9}
ITPUB个人空间LT4j#U mS8f W
使用当前目录作为字典的选项,会有限制。就是不能配合 DDL_DICT_TRACKING使用。
c [L$MiX dw+?\0EXECUTE DBMS_LOGMNR.START_LOGMNR(OPTIONS => -ITPUB个人空间 l'_!F8}"U9rN_e"SAT7Z
DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG);

一般的操作步骤:
4sx'H#@7u gTQ ?01) 添加 redo log文件ITPUB个人空间9RO3RS1H0VK c
EXECUTE DBMS_LOGMNR.ADD_LOGFILE( -
N O l _S!q0LOGFILENAME => 'log1orc1.ora', -ITPUB个人空间/wm-t%a9br U{J
OPTIONS => DBMS_LOGMNR.NEW);
HKE[5s W0如果文件不止一个,那添加其他的文件:
&b%DF#?7uB7m0EXECUTE DBMS_LOGMNR.ADD_LOGFILE( -
O,]A]vX1W0LOGFILENAME => 'log2orc1.ora', -
twi2t$HXDoq0OPTIONS => DBMS_LOGMNR.ADDFILE);

如果有很多的REDO LOG需要添加到LOGMINER,那可以通过以下SQL的输出来得到想要的结果:
;eu ?3`gro0select 'exec dbms_logmnr.add_logfile(logfilename=>''' || name ||'''); '
v4lr+B"|0from v$archived_log
-I!pe'XP*Bv;F0where recid > 106;

2) 开始LogMiner:
s${jbif:Sm0EXECUTE DBMS_LOGMNR.START_LOGMNR(OPTIONS => -
tPE9q `JD},p0DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG);ITPUB个人空间!e*\bx.f dk-F;f
如果要加上时间界限:
I#a'HgPn_0EXECUTE DBMS_LOGMNR.START_LOGMNR( -
:N-m!i MfyD0OPTIONS =>DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG, -ITPUB个人空间C9[t8a5B,gW8C0Fq
STARTTIME => TO_DATE('01-Jan-2008 08:30:00', 'DD-MON-YYYY HH:MI:SS'), -ITPUB个人空间7qx(D0F W
ENDTIME => TO_DATE('01-Jan-2008 08:45:00', 'DD-MON-YYYY HH:MI:SS'));

3) 查询v$logmnr_contenst以获得想要的内容:

SELECT SQL_REDO, SQL_UNDO FROM V$LOGMNR_CONTENTS
j0yr"^n)_X[0WHERE USERNAME = 'joedevo' AND SEG_NAME = 'salary';

select sql_undo, sql_redo , operation
@pE8vk0X`0from v$logmnr_contentsITPUB个人空间[8E nOF
where username='KONG' and peration ='DDL'

ITPUB个人空间].|,x b$Rs7W&E _.j;V
建议:
/Qb)T3DE f0使用非SYSTEM TABLESPACE来存放LogMiner的信息:ITPUB个人空间@ YMu$A^H;pRf
EXECUTE DBMS_LOGMNR_D.SET_TABLESPACE(’logmnrts$’);


TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-10-13  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 6641
  • 日志数: 132
  • 书签数: 11
  • 建立时间: 2008-06-24
  • 更新时间: 2008-10-12

RSS订阅

Open Toolbar