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内存区域将被清除