Chinaunix首页 | 论坛 | 博客
  • 博客访问: 312126
  • 博文数量: 94
  • 博客积分: 2220
  • 博客等级: 大尉
  • 技术积分: 975
  • 用 户 组: 普通用户
  • 注册时间: 2004-12-17 21:17
文章分类

全部博文(94)

文章存档

2011年(5)

2010年(11)

2009年(1)

2008年(2)

2006年(1)

2005年(65)

2004年(9)

我的朋友

分类: Oracle

2010-12-20 10:22:32

理解和使用Oracle分析工具-LogMiner

今天看了播布客里的德哥讲的一个有关oracle logminer的视频,感觉对DBA来讲非常有用。以下是视频的地址:。另外这个网页中的介绍非常详细,略作了一些整理与修改就转上来了,作为一个学习笔记吧。


1.       LogMiner的简介:

公司从产品8i以后提供的一个实际非常有用的分析工具,使用该工具可以轻松获得 重作日志文件(归档日志文件)中的具体内容,特别是,该工具可以分析出所有对于操作的DMLinsertupdatedelete等)语句,另外还可分析得到一些必要的回滚SQL语句。该工具特别适用于调试、审计或者回退某个特定的事务。 {p$IP:+~*  

分析工具实际上是由一组PL/SQL包和一些动态视图(8i内置包的一部分)组成,它作为的一部分来发布,是8i产品提供的一个完全免费的工具。但该工具和其他内建工具相比使用起来显得有些复杂,主要原因是该工具没有提供任何的图形用户界面(GUI

  工具即可以用来分析在线,也可以用来分析离线日志文件,即可以分析本身自己的重作日志文件,也可以用来分析其他的重作日志文件。 gi>H, 
& ;@eFW  
总的说来,工具的主要用途有: PL 
(u;


sYI=  a 跟踪的变化:可以离线跟踪的变化,而不会影响在线系统的性能。mk,
YA-
 
1 b 回退的变化:回退特定的变化数据,减少point-in-time recovery的执行。 -EenD­-q  Xd.45L­'2  
c 优化和扩容计划:可通过分析日志文件中的数据以分析数据增长模式。 pG":k=kkX  

 

2.       LogMiner的安装:

视频中没有讲LogMiner的安装,要安装工具,必须首先要运行下面这样两个脚本, @*A$xgV,z  


_;w .8n     a.  $_HOME/rdbms/admin/dbmslsm.sql `P6TE7­d  
85aE'4     b.  $_HOME/rdbms/admin/dbmslsmd.sql. _a}
q.
 
j u![4x‑  
  这两个脚本必须均以SYS用户身份运行。其中第一个脚本用来创建DBMS_LOGMNR包,该包用来分析日志文件。第二个脚本用来创建DBMS_LOGMNR_D包,该包用来创建数据字典文件。

3.       数据字典文件(data-dictionary

视频中所讲的数据字典文件有什么用处没有提到,只是简单的讲了一句你会看不懂logminer分析出来的数据。以下是比较具体的介绍:

工具实际上是由两个新的PL/SQL内建包((DBMS_LOGMNR DBMS_ LOGMNR_D)和四个V$动态性能视图(视图是在利用过程DBMS_LOGMNR.START_LOGMNR启动时创建)组成。在使用工具分析redo log文件之前,可以使用DBMS_LOGMNR_D 包将数据字典导出为一个文本文件。该字典文件是可选的,但是如果没有它,解释出来的语句中关于数据字典中的部分(如表名、列名等)和数值都将是16进制的形式,我们是无法直接理解的。例如,下面的sql语句: @ S)%o|m  


QHbd@_  
INSERT INTO dm_dj_swry (rydm, rymc) VALUES (00005, '张三'); -G-r-|[~  
RXM ],1  
  解释出来的结果将是下面这个样子, @>#_t'1U  
l<1Qym3 F  
insert into Object#308(col#1, col#2) values (hextoraw('c30rte567e436'), hextoraw('4a6f686e20446f65')); s:
n D}+1
 
oJhB11  
  创建数据字典的目的就是让引用涉及到内部数据字典中的部分时为他们实际的名字,而不是系统内部的16进制。数据字典文件是一个文本文件,使用包DBMS_LOGMNR_D来创建。如果我们要分析的中的表有变化,影响到库的数据字典也发生变化,这时就需要重新创建该字典文件。另外一种情况是在分析另外一个文件的重作日志时,也必须要重新生成一遍被分析的数据字典文件。 DnW@%[/

 

4.       修改spfile中的UTL_FILE_DIR参数。

Alter system set utl_file_dir=’/u01/logminer’ scope=spfile;

然后需要重新实例。

 

5.       创建数据字典文件:(需要以sys用户来执行)

SQL> EXECUTE dbms_logmnr_d.build( +]#iBPw  dictionary_filename => ' logminer_dict.ora', J{o.q‑* O3  
dictionary_location => ’/u01/logminer’ ); li_V


;E]‑  

 

6.       添加要分析的日志文件列

SQL> EXECUTE dbms_logmnr.add_logfile( )tDx@kT1qq  LogFileName=>' u01/archive/logfile1.log', O[l{$ X}  
Options=>dbms_logmnr.new); ‑I2c1X<&H  

 

还可以添加多个文件:(注意最后一下参数有点不一样)

SQL> EXECUTE dbms_logmnr.add_logfile(-DL0%/B


V  LogFileName=>' u01/archive/logfile2.log', }zZ1BLeV&M  
Options=>dbms_logmnr.addfile); ~‑cg$}[  

 

文章中还介绍最好还是一次只分析一个log文件。

 

可以分析在线重作日志,也可以分析离线重作日志。

 

7.       从分析列表中移除一个日志文件

使用过程 'dbms_logmnr.removefile' 也可以从列表中移去一个日志文件。SQL> EXECUTE dbms_logmnr.add_logfile( C|>3J>^
 
 LogFileName=>' u01/archive/logfile2.log', }zZ1BLeV&M  
Options=>dbms_logmnr. REMOVEFILE); P)G84/G  

 

8.       使用进行日志分析 h1fCyJ9u7

(1)      无限制条件 HwR4n%Km}  
dpC2k.8SQL> EXECUTE dbms_logmnr.start_logmnr( ,~(vCr?  DictFileName=>’/u01/logminer/logminer_dict.ora’); GlS`L­  

(2)      有限制条件 1=b[1]n5N  
1"2IbiP<5]  
  通过对过程DBMS_ LOGMNR.START_LOGMNR中几个不同参数的设置,可以缩小要分析日志文件的范围。通过设置起始时间和终止时间参数我们可以限制只分析某一时间范围的日志

SQL> EXECUTE dbms_logmnr.start_logmnr( /`F;zDUXn  
DictFileName=>’/u01/logminer/logminer_dict.ora’, ]fr~5sM  
StartTime => to_date('2001-9-18 00:00:00','YYYY-MM-DD HH24:MI:SS') qM@Jd A  
EndTime => to_date(''2001-9-18 23:59:59','YYYY-MM-DD HH24:MI:SS ')); Wm
duCe#yn
 

 

也可以通过设置起始SCN和截至SCN来限制要分析日志的范围

SQL> EXECUTE dbms_logmnr.start_logmnr( tsaQGU  
DictFileName=>’/u01/logminer/logminer_dict.ora’, ]fr~5sM  
StartScn => 20, I&k,)RU   
EndScn => 50); ABRRhQ[1]  

 

9.       观察分析结果(v$logmnr_contents

 到现在为止,我们已经分析得到了重作日志文件中的内容。动态性能视图v$logmnr_contents包含分析得到的所有的信息。 #2e:|E3  

 
SELECT sql_redo FROM v$logmnr_contents; .tu!;qD


 ;  
q*
9xh7|&
 
  如果我们仅仅想知道某个用户对于某张表的操作,可以通过下面的SQL查询得到,该查询可以得到用户DB_ZGXT对表SB_DJJL所作的一切工作。 ~59|0Qg&!  
!B
Bn '
 
SQL> SELECT sql_redo FROM v$logmnr_contents WHERE username='DB_ZGXT' AND tablename='SB_DJJL'; cfJuQ:Pz  

 

需要强调一点的是,视图v$logmnr_contents中的分析结果仅在我们运行过程'dbms_logmrn.start_logmnr'这个会话的生命期中存在。这是因为所有的存储都在PGA内存中,所有其他的进程是看不到它的,同时随着进程的结束,分析结果也随之消失。所以德哥视频中的作法是新建一个表,然后将所有分析结果导入到这个表中进行分析,这样就不会丢失分析结果。当然分析工作完成后这些分析记录还是要及时清理掉为好。

 

10.   其他注意事

 我们可以利用日志分析工具来分析其他实例产生的重作日志文件,而不仅仅用来分析本身安装实例的redo logs文件。使用分析其他实例时,有几点需要注意: [.<$@o/  
xmJ 9  
  1. 必须使用被分析实例产生的字典文件,而不是安装产生的字典文件,另外必须保证安装的字符集和被分析的字符集相同。 @!#Q%*o-(i  
@H55fA  
  2. 被分析平台必须和当前所在平台一样,也就是说如果我们要分析的文件是由运行在UNIX平台上的 8i产生的,那么也必须在一个运行在UNIX平台上的实例上运行,而不能在其他如Microsoft NT上运行。当然两者的硬件条件不一定要求完全一样。 k3Xfn>  
4 uL>99Q  
  3. 日志分析工具仅能够分析 8以后的产品,对于8以前的产品,该工具也无能为力。 yHfm1Z#S5m  

11.   结语 c8Kp=k2E[1]  
${'nfY8n  
  对于管理员(DBA)来讲是个功能非常强大的工具,也是在日常工作中经常要用到的一个工具,借助于该工具,可以得到大量的关于活动的信息。其中一个最重要的用途就是不用全部恢复就可以恢复的某个变化。另外,该工具还可用来监视或者审计用户的活动,如你可以利用工具察看谁曾经修改了那些数据以及这些数据在修改前的状态。我们也可以借助于该工具分析任何 8及其以后版本产生的重作日志文件。另外该工具还有一个非常重要的特点就是可以分析其他的日志文件。总之,该工具对于管理员来讲,是一个非常有效的工具,深刻理解及熟练掌握该工具,对于每一个管理员的实际工作是非常有帮助的。

阅读(776) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-12-22 14:16:07

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com