创建数据字典的目的就是让LogMiner引用涉及到内部数据字典中的部分时为他们实际的名字,而不是系统内部的16进制。数据字典文件是一个文本文件,使用包DBMS_LOGMNR_D来创建。如果我们要分析的数据库中的表有变化,影响到库的数据字典也发生变化,这时就需要重新创建该字典文件。另外一种情况是在分析另外一个数据库文件的重作日志时,也必须要重新生成一遍被分析数据库的数据字典文件。
创建数据字典文件之前需要配置LogMiner文件夹:
1 CREATE DIRECTORY utlfile AS 'D:\oracle\oradata\practice\LOGMNR'; 2 alter system set utl_file_dir='D:\oracle\oradata\practice\LOGMNR' scope=spfile;
创建字典文件需要以DBA用户登录,创建到上面配置好的LogMiner文件夹中:
1 CONN LOGMINER/ LOGMINER@PRACTICE AS SYSDBA 2 EXECUTE dbms_logmnr_d.build(dictionary_filename => 'dictionary.ora', dictionary_location =>'D:\oracle\oradata\practice\LOGMNR');
1.3.3 加入需分析的日志文件Oracle的LogMiner可以分析在线(online)和归档(offline)两种日志文件,加入分析日志文件使用dbms_logmnr.add_logfile过程,第一个文件使用dbms_logmnr.NEW参数,后面文件使用dbms_logmnr.ADDFILE参数。
1、创建列表
1 BEGIN 2 dbms_logmnr.add_logfile(logfilename=>'D:\oracle\oradata\practice\REDO03.LOG',options=>dbms_logmnr.NEW); 3 END; 4 /
2、添加其他日志文件到列表
1 BEGIN 2 dbms_logmnr.add_logfile(logfilename=>'D:\oracle\oradata\practice\ARCHIVE\ARC00002_0817639922.001',options=>dbms_logmnr.ADDFILE); 3 dbms_logmnr.add_logfile(logfilename=>'D:\oracle\oradata\practice\ARCHIVE\ARC00003_0817639922.001',options=>dbms_logmnr.ADDFILE); 4 END; 5 /
1.3.4 使用LogMiner进行日志分析Oracle的LogMiner分析时分为无限制条件和限制条件两种,无限制条件中分析所有加入到分析列表日志文件,限制条件根据限制条件分析指定范围日志文件。
1、无限制条件
EXECUTE dbms_logmnr.start_logmnr(dictfilename=>'D:\oracle\oradata\practice\LOGMNR\dictionary.ora');
2、有限制条件
通过对过程DBMS_ LOGMNR.START_LOGMNR中几个不同参数的设置(参数含义见表1),可以缩小要分析日志文件的范围。通过设置起始时间和终止时间参数我们可以限制只分析某一时间范围的日志。
参数
参数类型
默认值
含义
StartScn
数字型
0
分析重作日志中SCN≥StartScn日志文件部分
EndScn
数字型
0
分析重作日志中SCN≤EndScn日志文件部分
StartTime
日期型
1998-01-01
分析重作日志中时间戳≥StartTime的日志文件部分
EndTime
日期型
2988-01-01
分析重作日志中时间戳≤EndTime的日志文件部分
DictFileName
字符型
字典文件该文件包含一个数据库目录的快照。
如下面的例子,我们仅仅分析2013年6月8日的日志,:
EXECUTE dbms_logmnr.start_logmnr(
DictFileName => dictfilename=>'D:\..\practice\LOGMNR\dictionary.ora',
StartTime =>to_date('2013-6-8 00:00:00','YYYY-MM-DD HH24:MI:SS')
EndTime =>to_date(''2013-6-8 23:59:59','YYYY-MM-DD HH24:MI:SS '));
也可以通过设置起始SCN和截至SCN来限制要分析日志的范围:
EXECUTE dbms_logmnr.start_logmnr(
DictFileName =>'D:\..\practice\LOGMNR\dictionary.ora',
StartScn =>20,
EndScn =>50);
1.3.5 观察分析结果(v$logmnr_contents)到现在为止,我们已经分析得到了重作日志文件中的内容。动态性能视图v$logmnr_contents包含LogMiner分析得到的所有的信息。
SELECT sql_redo FROM v$logmnr_contents;
如果我们仅仅想知道某个用户对于某张表的操作,可以通过下面的SQL查询得到,该查询可以得到用户LOGMINER对表EMP所作的一切工作。
SELECT sql_redo FROM v$logmnr_contents WHERE username='LOGMINER' AND tablename='EMP';
序号
名称
含义
1
SCN
特定数据变化的系统更改号
2
TIMESTAM
数据改变发生的时间
3
COMMIT_TIMESTAMP
数据改变提交的时间
4
SEG_OWNER
数据发生改变的段名称
5
SEG_NAME
段的所有者名称
6
SEG_TYPE
数据发生改变的段类型
7
SEG_TYPE_NAME
数据发生改变的段类型名称
8
TABLE_SPACE
变化段的表空间
9
ROW_ID
特定数据变化行的ID
10
SESSION_INFO
数据发生变化时用户进程信息
11
OPERATION
重做记录中记录的操作(如INSERT)
12
SQL_REDO
可以为重做记录重做指定行变化的SQL语句(正向操作)
13
SQL_UNDO
可以为重做记录回退或恢复指定行变化的SQL语句(反向操作)