赛迪网技术社区 » Oracle » 使用Logmnr方法分析数据库日志 转到动态网页
--> 本页主题: 使用Logmnr方法分析数据库日志 返回 | 悬赏 | 加为IE收藏 | 收藏主题 | 上一主题 | 下一主题
3946469




用户名: 3946469
级别: 高级工程师
精华: 4
发帖: 197
经验值: 252 点
积分: 502 分
贡献值: 0
注册时间:2007-04-18


使用Logmnr方法分析数据库日志


您是不是在数据库日志问题上而头痛呢?您是不是在苦于没有想到一个方便的解决方法而苦恼呢?本文用举例的形式来讲解使用Logmnr方法分析数据库日志。 2b9 YI+E  
一、安装LogMiner工具,以下两个脚本以SYSDBA身份运行 Z}9:U yEA  
}33D&3+5*  
@$ORACLE_HOME\rdbms\admin\dbmslm.sql; nR@=,U`S=  
KmA .xlCz  
@ $ORACLE_HOME\rdbms\admin\dbmslmd.sql; ziod2gJ  
K3mG_e/  
第一个脚本用来创建DBMS_LOGMNR包,该包用来分析日志文件。 Hb9 ' d  
第二个脚本用来创建DBMS_LOGMNR_D包,该包用来创建数据字典文件。 JhDF?-X C  
MtNnQES:4  
二、使用LogMiner工具 lN'(Y SM  
OV Xf f;  
下面将详细介绍如何使用LogMiner工具。 [7cYgo1*  
%'G8}[}  
1、创建数据字典文件(data-dictionary) o{_1n-E I  
:bcc*zM&c0  
1).首先在init.ora初始化参数文件中,指定数据字典文件的位置,也就是添加一个参数UTL_FILE_DIR,该参数值为服务器中放置数据字典文件的目录。如:UTL_FILE_DIR = ($ORACLE_HOME\logs) ,重新启动数据库,使新加的参数生效: [DX(`% =  
R"z]f\u  
2).然后创建数据字典文件 (kP= &.(  
gO.Iv^ b  
SQL> connect /as sysdba >\J"]kL  
SQL> execute dbms_logmnr_d.build(dictionary_filename => 'dict.ora',dictionary_location => 'G:\oracle\logs'); o3&x7,rGsL  
 ~r +$!yD  
PL/SQL procedure successfully completed ]zLEbqg`o  
[$] 4)z   
2PoLn_hR  
2、创建要分析的日志文件列表 gs.jNT,  
:~Dq#-m  
1).创建分析列表,即所要分析的日志 sDtr\YC5w  
;lRAvaf6)  
SQL> execute dbms_logmnr.add_logfile(LogFileName => 'G:\ORACLE\ORADATA\ORADBSP\REDO04.LOG',Options => dbms_logmnr.new); j&{>(  
'ae'q  
PL/SQL procedure successfully completeds Xo^G}(C J,  
v]`9kp9  
%4C)GmH0  
47kSKGq#  
2).添加分析日志文件,一次添加1个为宜 fJsb05.<rG  
2e+[WeX{  
SQL> execute dbms_logmnr.add_logfile(LogFileName => 'G:\ORACLE\ORADATA\ORADBSP\REDO05.LOG',Options => dbms_logmnr.ADDFILE); b]p/%-n.^0  
|DtKjrs  
PL/SQL procedure successfully completed !y^w2l$9  
6A#Bv6B  
Xo:J!&oF${  
,a@!o`~Q  
3、使用logMiner进行日志分析 X '@XhO~a  
x'+=!br1/(  
1).无限制条件,即用数据字典文件对要分析的日志文件所有内容做分析 X "Pze  
B~DwZ'"  
SQL> execute dbms_logmnr.start_logmnr(DictFileName => 'G:\oracle\logs\dict.ora'); qnN8$E   
A2e;Gz3'  
PL/SQL procedure successfully completed $bxgVWX,IT  
9[pdv|QDT  
U@ ] Ek/  
 |tzB"U  
2).带限制条件,可以用scn号或时间做限制条件,也可组合使用 B,9ho   
--分析日志列表中时间从07.02.28从10:00到15:00的内容 S0bFj7.l;  
1s+<(0R/  
SQL> execute dbms_logmnr.start_logmnr(startTime => to_date('20070228100000','yyyy-mm-dd hh24:mi:ss'),endTime => to_date('20070228150000','yyyy-mm-dd hh24:mi:ss'),DictFileName => 'G:\oracle\logs\dict.ora'); _2^5&~   
(X"|]/|  
PL/SQL procedure successfully completed }5L#uT-o  
/#< xfi  
dbms_logmnr.start_logmnr函数的原型为: ]Pk1bq^e  
PROCEDURE start_logmnr( FR7 cUe$U  
startScn INNUMBER default 0 , 82&D.Ih  
endScnINNUMBER default 0, Xz- }VM%%&  
startTimeINDATE default '', 3DDH`L,x  
endTime INDATE default '', B? $yBfV$  
DictFileNameINVARCHAR2 default '', 39#&8zxR1T  
Options INBINARY_INTEGER default 0 ); KwE Yl\  
B 8%lyh  
#t23j  
4.分析后释放内存 so<@"-Ofg  
4G7?E!  
SQL> execute dbms_logmnr.end_logmnr; L=}=W[,  
ln{ zL/<  
PL/SQL procedure successfully completed 8wt[qO  
_xR&js82  
#`F|# W/  
5.其它 mUm,=6F9~  
1).删除日志分析文件 17H-ZL  
Q'V.]h  
exec dbms_logmnr.add_logfile('G:\ORACLE\ORADATA\ORADBSP\REDO04.LOG',dbms_logmnr.removefile); ?ym$s"c"  
FT)i.^ L\  
8d<D>c  
vQY0<?5  
< 9 m$  
三、查看LogMiner工具分析结果 d4(0bRHX  
{Npuy%s  
U\+)cfiz  
K8Drdx)\1  
SQL> select * from dict t where t.table_name like '%LOGMNR%';--看所有与logmnr相关的视图 Ihf-< h<  
=g!ReXeu4  
TABLE_NAME COMMENTS Z8bE0+  
------------------------------ -------------------------------------------------------------------------------- )KKM'%<%l  
GV$LOGMNR_CALLBACK Synonym for GV_$LOGMNR_CALLBACK ;\=@J$ ms  
GV$LOGMNR_CONTENTS Synonym for GV_$LOGMNR_CONTENTS }AQG8OS>))  
GV$LOGMNR_DICTIONARY Synonym for GV_$LOGMNR_DICTIONARY Vll^P),<i  
GV$LOGMNR_LOGFILESynonym for GV_$LOGMNR_LOGFILE /Bces uh  
GV$LOGMNR_LOGSSynonym for GV_$LOGMNR_LOGS BKG $]E  
GV$LOGMNR_PARAMETERS Synonym for GV_$LOGMNR_PARAMETERS E7Qw;2  
GV$LOGMNR_PROCESSSynonym for GV_$LOGMNR_PROCESS '\L&%Xb  
GV$LOGMNR_REGIONSynonym for GV_$LOGMNR_REGION 0u.!gqW  
GV$LOGMNR_SESSIONSynonym for GV_$LOGMNR_SESSION VN`GId  
GV$LOGMNR_STATS Synonym for GV_$LOGMNR_STATS d-@EotwN  
GV$LOGMNR_TRANSACTIONSynonym for GV_$LOGMNR_TRANSACTION '3 ~ M"3   
V$LOGMNR_CALLBACKSynonym for V_$LOGMNR_CALLBACK 4de'{=`  
V$LOGMNR_CONTENTSSynonym for V_$LOGMNR_CONTENTS bllR: 8r  
V$LOGMNR_DICTIONARYSynonym for V_$LOGMNR_DICTIONARY )pj^<' M  
V$LOGMNR_LOGFILESynonym for V_$LOGMNR_LOGFILE fWq7'  
V$LOGMNR_LOGS Synonym for V_$LOGMNR_LOGS pUh5<V.  
V$LOGMNR_PARAMETERSSynonym for V_$LOGMNR_PARAMETERS eY_[79@J`  
V$LOGMNR_PROCESSSynonym for V_$LOGMNR_PROCESS .=*@axwD  
V$LOGMNR_REGION Synonym for V_$LOGMNR_REGION -)?i;1,i.k  
V$LOGMNR_SESSIONSynonym for V_$LOGMNR_SESSION jK)47n S>  
jF X~dO$5  
TABLE_NAME COMMENTS Jf+ xJym_w  
------------------------------ -------------------------------------------------------------------------------- sg0\Id$__  
V$LOGMNR_STATSSynonym for V_$LOGMNR_STATS *aZ^$  
V$LOGMNR_TRANSACTION Synonym for V_$LOGMNR_TRANSACTION A&Z!~S:\  
Sm2,}zQT  
u_+`6kC:J  
/Yq (>k  
trPo([  
$ Tf KXd/  
GV$LOGMNR_LOGS 是分析日志列表视图 {HDnE~  
^g||fuM5  
分析结果在GV$LOGMNR_CONTENTS 视图中,可按以下语句查询: 7yKiVrn^  
A; }0)#0  
select scn,timestamp,log_id,seg_owner,seg_type,table_space,data_blk#,data_obj#,data_objd#, A 2vVq  
session#,serial#,username,session_info,sql_redo,sql_undo f Ya w\L j  
from logmnr3 t o9<,7hy  
where t.sql_redo like 'create%'; TIJY\{}  
'P(CX c  
E )i9> *0  
如果不能正常查询GV$LOGMNR_CONTENTS视图,并报以下错误,ORA-01306: 在从 v$logmnr_contents 中选择之前必须调用 dbms_logmnr.start_logmnr() 。可采用如下方法: +.c5 `4Z  
[/r ruH  
create table logmnr3 as select * from GV$LOGMNR_CONTENTS; pk:6azoP-  
iY, +; r  
KV_ aDV  
:s1NG?.  
FAQ: E[R:Emys  
fsk96^  
1.创建数据字典的目 : 让LogMiner引用涉及到内部数据字典中的部分时为他们实际的名字,而不是系统内部的16进制。数据字典文件是一个文本文件,使用包DBMS_LOGMNR_D来创建。如果我们要分析的数据库中的表有变化,影响到库的数据字典也发生变化,这时就需要重新创建该字典文件。另外一种情况是在分析另外一个数据库文件的重作日志时,也必须要重新生成一遍被分析数据库的数据字典文件。 在使用LogMiner工具分析redo log文件之前,可以使用DBMS_LOGMNR_D 包将数据字典导出为一个文本文件。该字典文件是可选的,但是如果没有它,LogMiner解释出来的语句中关于数据字典中的部分(如表名、列名等)和数值都将是16进制的形式,我们是无法直接理解的。例如,下面的sql语句: UQGt3 !Bx  
ro.lL9{  
INSERT INTO dm_dj_swry (rydm, rymc) VALUES (00005, '张三'); AxQ%&3/r  
Ha,uVI<  
LogMiner解释出来的结果将是下面这个样子, euGDW6]jh  
J$N " z?l  
insert into Object#308(col#1, col#2) values (hextoraw('c30rte567e436'), hextoraw('4a6f686e20446f65'));

本贴标签:
顶端 Posted:2007-05-31 09:48 | [楼 主]
highill

头衔:梦幽树|小鱼梦幽树|小鱼

用户名: highill
级别: 论坛版主
精华: 24
发帖: 4683
经验值: 6839 点
积分: 6851 分
贡献值: 1
注册时间:2006-09-01



有点多  PA#;Pvs  
看着有点不适应…… p>0sD+tL  

-----------------------------------------------
欢迎光临!
www.mengyoushu.com
-----------------------------------------------
欢迎光临赛迪网技术社区

赛迪网技术社区 java web
赛迪网技术社区 技术职场
赛迪网技术社区 java进阶
顶端 Posted:2007-06-01 17:31 | 1 楼

 赛迪网技术社区 -> Oracle
快速发帖 顶端
内容
HTML 代码不可用

使用签名
Wind Code自动转换

字数检查 恢复数据
按 Ctrl+Enter 直接提交
表情 [更多]