登录  注册    首页

讲解Oracle数据库LogMiner工具的使用方法

7
作者 李琨 | | 2010-01-19 0:37
分数 7 | 评论数 0 | 访问次数 626
分类 数据库

  Logminer(DBMS_LOGMNR和DBMS_LOGMNR_D)package,可以用来分析Oracle的重做日志文件,也是oracle从8i开始提供的一个重要工具。本文为大家详细介绍了它的使用方法。

  我们可以使用logminer分析其它instance(版本可不一致)的重做日志文件,但是必须遵循以下要求:

  1.LogMiner日志分析工具仅能够分析Oracle 8以后的产品

  2.LogMiner必须使用被分析数据库实例产生的字典文件,且安装LogMiner数据库的字符集必须和被分析数据库的字符集相同

  3.被分析数据库平台必须和当前LogMiner所在数据库平台一样,且block size相同。

  使用logminer

  1.安装logminer:

  要安装LogMiner工具,必须首先要运行下面这样两个脚本,

  $ORACLE_HOME/rdbms/admin/dbmslm.sql

  $ORACLE_HOME/rdbms/admin/dbmslmd.sql.

  这两个脚本必须均以SYS用户身份运行。

  2.创建数据字典文件

  首先在init.ora初始化参数文件中,添加参数UTL_FILE_DIR,该参数值为服务器中放置数据字典文件的目录。如:

  UTL_FILE_DIR = (D:\Oracle\logs)

  重新启动数据库,使新加的参数生效,然后创建数据字典文件:

  SQL> EXECUTE dbms_logmnr_d.build(

  dictionary_filename => ' logmn_ora817.dat',

  dictionary_location => ' D:\Oracle\logs ');

  创建数据字典是让LogMiner引用涉及到内部数据字典中的部分时使用对象的名称,而不是系统内部的16进制的ID。如果我们要分析的数据库中的表有变化,影响到库的数据字典也发生变化,就需要重新创建该字典。

  3.添加要分析的日志文件

  Logminer可以用来分析在线的重做日志文件和归档日志文件,但是我们一般建议使用归档的日志文件。

  a.添加新的日志文件:

  SQL> EXECUTE dbms_logmnr.add_logfile(

  LogFileName=>' D:\database\oracle\oradata\ora817\archive \ ARC01491.001 ', Options=>dbms_logmnr.new);

  b.添加另外的日志文件到列表

  SQL> EXECUTE dbms_logmnr.add_logfile(

  LogFileName=>' D:\database\oracle\oradata\ora817\archive \ ARC01491.002', Options=>dbms_logmnr.addfile);

  c. 移去一个日志文件

  SQL> EXECUTE dbms_logmnr.add_logfile(

  LogFileName=>' D:\database\oracle\oradata\ora817\archive \ ARC01491.002', Options=>dbms_logmnr. REMOVEFILE);

  创建了要分析的日志文件,就可以对其进行分析。

  4. 进行日志分析

  SQL> EXECUTE dbms_logmnr.start_logmnr(

  DictFileName=>' D:\Oracle\logs\ logmn_ora817.dat ');

  可以使用相应的限制条件:

  时间范围:对dbms_logmnr.start_logmnr使用StartTime和EndTime参数

  SCN范围:对dbms_logmnr.start_logmnr使用StartScn和EndScn参数

  5.观察结果:

  主要是查询v$logmnr_contents:

  SQL> desc v$logmnr_contents;

  名称 空? 类型

  ----------------------------------------- -------- ----------------------

  SCN NUMBER

  TIMESTAMP DATE

  THREAD# NUMBER

  LOG_ID NUMBER

  XIDUSN NUMBER

  XIDSLT NUMBER

  XIDSQN NUMBER

  RBASQN NUMBER

  RBABLK NUMBER

  RBABYTE NUMBER

  UBAFIL NUMBER

  UBABLK NUMBER

  UBAREC NUMBER

  UBASQN NUMBER

  ABS_FILE# NUMBER

  REL_FILE# NUMBER

  DATA_BLK# NUMBER

  DATA_OBJ# NUMBER

  DATA_OBJD# NUMBER

  SEG_OWNER VARCHAR2(32)

  SEG_NAME VARCHAR2(32)

  SEG_TYPE NUMBER

  SEG_TYPE_NAME VARCHAR2(32)

  TABLE_SPACE VARCHAR2(32)

  ROW_ID VARCHAR2(19)

  SESSION# NUMBER

  SERIAL# NUMBER

  USERNAME VARCHAR2(32)

  SESSION_INFO VARCHAR2(4000)

  ROLLBACK NUMBER

  OPERATION VARCHAR2(32)

  SQL_REDO VARCHAR2(4000)

  SQL_UNDO VARCHAR2(4000)

  RS_ID VARCHAR2(32)

  SSN NUMBER

  CSF NUMBER

  INFO VARCHAR2(32)

  STATUS NUMBER

  PH1_NAME VARCHAR2(32)

  PH1_REDO VARCHAR2(2000)

  PH1_UNDO VARCHAR2(2000)

  PH2_NAME VARCHAR2(32)

  PH2_REDO VARCHAR2(2000)

  PH2_UNDO VARCHAR2(2000)

  PH3_NAME VARCHAR2(32)

  PH3_REDO VARCHAR2(2000)

  PH3_UNDO VARCHAR2(2000)

  PH4_NAME VARCHAR2(32)

  PH4_REDO VARCHAR2(2000)

  PH4_UNDO VARCHAR2(2000)

  PH5_NAME VARCHAR2(32)

  PH5_REDO VARCHAR2(2000)

  PH5_UNDO VARCHAR2(2000)

  通过字段sql_redo可以得到该日志文件中进行过的sql操作,通过sql_undo可以得到撤销的sql语句。

  还可以用这样的sql对日志文件中的所有的操作分类统计:

  select operation,count(*)from v$logmnr_contents group by operation;

  视图v$logmnr_contents中的分析结果仅在我们运行过程'dbms_logmrn.start_logmnr'这个会话的生命期中存在。这是因为所有的LogMiner存储都在PGA内存中,所有其他的会话是看不到它的,同时随着会话的结束而清除分析结果。

  最后,使用过程DBMS_LOGMNR.END_LOGMNR终止日志分析事务,PGA内存区域将被清除。


登录注册 后评论

用户信息

加为好友 李琨详细资料
等级 36   积分 131078
文章 74    评论 0    上传 20

留言