数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

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


发布日期:2023年09月11日
 
Oracle数据库LogMiner工具的使用方法

Logminer(DBMS_LOGMNR和DBMS_LOGMNR_D)package可以用来分析Oracle的重做日志文件Logminer是oracle从i开始提供的工具

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

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

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

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

使用logminer

安装logminer

要安装LogMiner工具必须首先要运行下面这样两个脚本 $ORACLE_HOME/rdbms/admin/dbmslmsql

$ORACLE_HOME/rdbms/admin/dbmslmdsql

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

创建数据字典文件

首先在initora初始化参数文件中添加参数UTL_FILE_DIR该参数值为服务器中放置数据字典文件的目录 UTL_FILE_DIR = (D:\Oracle\logs)

重新启动数据库使新加的参数生效然后创建数据字典文件 SQL> EXECUTE dbms_logmnr_dbuild(

dictionary_filename => logmn_oradat

dictionary_location => D:\Oracle\logs );

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

添加要分析的日志文件

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

a添加新的日志文件 SQL> EXECUTE dbms_logmnradd_logfile(

LogFileName=> D:\database\oracle\oradata\ora\archive \ ARC Options=>dbms_logmnrnew);

b添加另外的日志文件到列表 SQL> EXECUTE dbms_logmnradd_logfile(

LogFileName=> D:\database\oracle\oradata\ora\archive \ ARC Options=>dbms_logmnraddfile);

c 移去一个日志文件 SQL> EXECUTE dbms_logmnradd_logfile(

LogFileName=> D:\database\oracle\oradata\ora\archive \ ARC Options=>dbms_logmnr REMOVEFILE);

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

进行日志分析 SQL> EXECUTE dbms_logmnrstart_logmnr(

DictFileName=> D:\Oracle\logs\ logmn_oradat );

可以使用相应的限制条件

时间范围对dbms_logmnrstart_logmnr使用StartTime和EndTime参数

SCN范围对dbms_logmnrstart_logmnr使用StartScn和EndScn参数

观察结果

主要是查询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 VARCHAR()

SEG_NAME VARCHAR()

SEG_TYPE NUMBER

SEG_TYPE_NAME VARCHAR()

TABLE_SPACE VARCHAR()

ROW_ID VARCHAR()

SESSION# NUMBER

SERIAL# NUMBER

USERNAME VARCHAR()

SESSION_INFO VARCHAR()

ROLLBACK NUMBER

OPERATION VARCHAR()

SQL_REDO VARCHAR()

SQL_UNDO VARCHAR()

RS_ID VARCHAR()

SSN NUMBER

CSF NUMBER

INFO VARCHAR()

STATUS NUMBER

PH_NAME VARCHAR()

PH_REDO VARCHAR()

PH_UNDO VARCHAR()

PH_NAME VARCHAR()

PH_REDO VARCHAR()

PH_UNDO VARCHAR()

PH_NAME VARCHAR()

PH_REDO VARCHAR()

PH_UNDO VARCHAR()

PH_NAME VARCHAR()

PH_REDO VARCHAR()

PH_UNDO VARCHAR()

PH_NAME VARCHAR()

PH_REDO VARCHAR()

PH_UNDO VARCHAR()

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

还可以用这样的sql对日志文件中的所有的操作分类统计 select operationcount(*)from v$logmnr_contents group by operation;

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

最后使用过程DBMS_LOGMNREND_LOGMNR终止日志分析事务PGA内存区域将被清除

上一篇:小议Oracle11g的自治事务(四)

下一篇:Oracle系统实用工具介绍