oracle 10g logminer 使用

来源:互联网 发布:做网络直播设备 编辑:程序博客网 时间:2024/06/05 10:25

Oracle LogMiner 是Oracle公司从产品8i以后提供的一个实际非常有用的分析工具,使用该工具可以轻松获得Oracle 重作日志文件(归档日志文件)中的具体内容,特别是,该工具可以分析出所有对于数据库操作的DML(insert、update、delete等)语句,另外还可分析得到一些必要的回滚SQL语句。该工具特别适用于调试、审计或者回退某个特定的事务,从9i可以也可以分析ddl语句了(幸福吧)。今天我要讲的是oracle10g,所以dml和ddl语句都是可以分析到的。 


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

  一、LogMiner的用途


  日志文件中存放着所有进行数据库恢复的数据,记录了针对数据库结构的每一个变化,也就是对数据库操作的所有DML和DDL语句。
  在Oracle 8i之前,Oracle没有提供任何协助数据库管理员来读取和解释重作日志文件内容的工具。系统出现问题,对于一个普通的数据管理员来讲,唯一可以作的工作就是将所有的log文件打包,然后发给Oracle公司的技术支持,然后静静地等待Oracle 公司技术支持给我们最后的答案。然而从8i以后,Oracle提供了这样一个强有力的工具-LogMiner。
  LogMiner 工具即可以用来分析在线,也可以用来分析离线日志文件,即可以分析本身自己数据库的重作日志文件,也可以用来分析其他数据库的重作日志文件。
  总的说来,LogMiner工具的主要用途有:
   1. 跟踪数据库的变化:可以离线的跟踪数据库的变化,而不会影响在线系统的性能。
   2. 回退数据库的变化:回退特定的变化数据,减少point-in-time recovery的执行。

   3. 优化和扩容计划:可通过分析日志文件中的数据以分析数据增长模式。


  二、安装LogMiner
  要安装LogMiner工具,必须首先要运行下面这样两个脚本,
   l $ORACLE_HOME/rdbms/admin/dbmslm.sql
   2 $ORACLE_HOME/rdbms/admin/dbmslmd.sql.
  这两个脚本必须均以SYS用户身份运行。其中第一个脚本用来创建DBMS_LOGMNR包,该包用来分析日志文件。第二个脚本用来创建DBMS_LOGMNR_D包,该包用来创建数据字典文件。
view plain
  1. [oracle@IM-8-201 admin]$ pwd  
  2. /oracle/ora10/product/rdbms/admin  
  3. [oracle@IM-8-201 admin]$ sqlplus / as sysdba  
  4.   
  5. SQL*Plus: Release 10.2.0.4.0 - Production on Mon Nov 21 00:13:51 2011  
  6.   
  7. Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.  
  8.   
  9. Connected to:  
  10. Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production  
  11. With the Partitioning, OLAP, Data Mining and Real Application Testing options  
  12.   
  13. SQL> @dbmslm.sql  
  14.   
  15. Package created.  
  16.   
  17. Grant succeeded.  
  18.   
  19.   
  20. SQL> @dbmslmd.sql  
  21.   
  22. Package created.  
  三、使用LogMiner工具
  下面将详细介绍如何使用LogMiner工具。
首先数据字典文件是一个文本文件,使用包DBMS_LOGMNR_D来创建,如果我们要分析的数据库中的表有变化(比如表结构有变化等),影响到库的数据字典也发生变化。另外一种情况是在分析另外一个数据库文件的重做日志时,也必须要重新生成一遍被分析数据库的数据字典文件。 首先需要修改参数UTL_FILE_DIR ,该参数值为服务器中放置数据字典文件的目录,10g中我们通过动态修改参数的方式来修改,然后重新启动数据库生效。其中UTL_FILE_DIR对应真实目录先期建立好。下面让我们来一步一步做吧:
1)修改UTL_FILE_DIR目录,这个目录让我们存放数据字典的,明白的说就是把日志通过LogMiner装换成数据字典存放的目录
SQL> alter system set UTL_FILE_DIR='/u02/oradata/center/archive' scope=spfile;
要事先声明/u02/oradata/center/archive,这个目录要先创建好,最好是属于oracle用户或者oracle用户有读写的权限。
2)重启数据库,使之生效
view plain
  1. SQL> shutdown immediate  
  2. Database closed.  
  3. Database dismounted.  
  4. ORACLE instance shut down.  
  5. SQL> startup;  
  6. ORACLE instance started.  
  7.   
  8. Total System Global Area 1577058304 bytes  
  9. Fixed Size                  2084264 bytes  
  10. Variable Size             385876568 bytes  
  11. Database Buffers         1174405120 bytes  
  12. Redo Buffers               14692352 bytes  
  13. Database mounted.  
  14. Database opened.  
  15.   
  16. SQL> show parameter UTL_FILE_DIR 
  17.   
  18. NAME                                 TYPE  
  19. ------------------------------------ ----------------------  
  20. VALUE  
  21. ------------------------------  
  22. utl_file_dir                         string  
  23. /u02/oradata/center/archive --这里现在出来我们修改的目录了吧  


3)创建数据字典
EXECUTE dbms_logmnr_d.build(dictionary_filename => 'lm_cdd.sql', dictionary_location => '/u02/oradata/center/archive');
lm_cdd.sql这个里面以后要放sql(包括ddl和dml)的噢,jscn.ora创建好了在/u02/oradata/center/archive目录,这个执行完了,可以去/u02/oradata/center/archive这个目录下面看看的。
4)添加日志文件,比如说现在我们想分析/u02/oradata/center/archive/1_2_763121338.dbf这个归档日志文件里面到底有什么东西,我们可以执行以下的存储过程
view plain
  1. SQL> EXECUTE dbms_logmnr.ADD_LOGFILE(LOGFILENAME=>'/u02/oradata/center/archive/1_2_763121338.dbf',OPTIONS=>dbms_logmnr.new);  
  2.   
  3. PL/SQL procedure successfully completed.  
  4.   
  5. --还可以继续添加归档日志文件  
  6.   
  7. SQL> EXECUTE dbms_logmnr.add_logfile(LogFileName=>'/u02/oradata/center/archive/1_3_763121338.dbf',Options=>dbms_logmnr.addfile);  
  8.   
  9. PL/SQL procedure successfully completed.  


 如果我不想分析/u02/oradata/center/archive/1_2_763121338.dbf,现在只想分析'/u02/oradata/center/archive/1_3_763121338.dbf',也就是说 关于这个日志文件列表中需要分析日志文件的个数完全由你自己决定,但这里建议最好是每次只添加一个需要分析的日志文件。
5)让我们启动了,这个时候主要做得事情就是往/u02/oradata/center/archive/jscn.ora加数据

view plain
  1. SQL> EXECUTE dbms_logmnr.start_logmnr(DictFileName=>'/u02/oradata/center/archive/jscn.ora');   

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

view plain
  1. SQL> SELECT sql_redo FROM v$logmnr_contents;  

如果我们仅仅想知道某个用户对于某张表的操作,可以通过下面的SQL查询得到,该查询可以得到用户passport对表sys_server所作的一切工作。
view plain
  1. SQL>SELECT sql_redo FROM v$logmnr_contents WHERE username='PASSPORT' AND tablename='SYS_SERVER';    

需要强调一点的是,视图v$logmnr_contents中的分析结果仅在我们运行过程'dbms_logmrn.start_logmnr' 这个会话的生命期中存在(如果执行了DBMS_LOGMNR.END_LOGMNR分析结果将消失)。这是因为所有的LogMiner存储都在PGA内存中,所有其他的进程是看不到它的,同时随着进程的结束,分析结果也随之消失。
 
如果需要,可以通过removefile命令删除日志分析文件。
view plain
  1. SQL> EXECUTE dbms_logmnr.add_logfile(LogFileName=>'/u02/oradata/center/archive/1_2_763121338.dbf',Options=>dbms_logmnr.REMOVEFILE);  

6)分析完,退出logminer
view plain
  1. SQL> exec dbms_logmnr.END_LOGMNR;  
  2.   
  3. PL/SQL procedure successfully completed.  
原创粉丝点击