Oracle 10g Logminer 数据库日志挖掘测试过程
Oracle 10g Logminer 数据库日志挖掘测试过程
###################################
1、安装logminer
--安装logminer
SQL> @?\RDBMS\ADMIN\dbmslm.sql --该包用来分析日志文件
程序包已创建。
授权成功。
SQL> @?\RDBMS\ADMIN\dbmslmd.sql --该包用来分析日志文件
程序包已创建。
SQL>
--创建日志分析存放目录
修改参数UTL_FILE_DIR ,该参数值为服务器中放置数据字典文件的目录,10g中我们通过动态修改参数的方式来修改,然后重新启动数据库生效。其中logs_utl_file目录先期建立好。
SQL> alter system set UTL_FILE_DIR='D:\oracle\logminer_log' scope=spfile;
--创建数据字典文件
BEGIN
dbms_logmnr_d.build(
dictionary_filename =>'logminer_dict.ora',
dictionary_location =>'D:\oracle\logminer_log');
END;
/
OK ,可以看到在D:\oracle\logminer_log中已经生成了logminer_dict.ora数据字典文件
################################################
2、创建要分析的日志文件(在线日志或归档日志)的列表
(1)分析在线的重做日志
SQL> select * from v$logfile;
GROUP# STATUS TYPE MEMBER IS_
---------- ------- ------- -------------------------------------------------- ---
3 ONLINE D:\ORACLE\PRODUCT\10.2.0\ORADATA\MYFMIS\REDO03.LOG NO
2 ONLINE D:\ORACLE\PRODUCT\10.2.0\ORADATA\MYFMIS\REDO02.LOG NO
1 ONLINE D:\ORACLE\PRODUCT\10.2.0\ORADATA\MYFMIS\REDO01.LOG NO
--建立列表
SQL>
SQL> execute dbms_logmnr.add_logfile(LogFileName=>'D:\ORACLE\PRODUCT\10.2.0\ORADATA\MYFMIS\REDO01.LOG', ptions=>dbms_logmnr.new);
--添加其他日至文件到列表
SQL> execute dbms_logmnr.add_logfile(LogFileName=>'D:\ORACLE\PRODUCT\10.2.0\ORADATA\MYFMIS\REDO02.LOG', ptions=>dbms_logmnr.addfile);
SQL> execute dbms_logmnr.add_logfile(LogFileName=>'D:\ORACLE\PRODUCT\10.2.0\ORADATA\MYFMIS\REDO03.LOG', ptions=>dbms_logmnr.addfile);
--删除日志文件列表
SQL> execute dbms_logmnr.add_logfile(LogFileName=>'D:\ORACLE\PRODUCT\10.2.0\ORADATA\MYFMIS\REDO03.LOG', ptions=>dbms_logmnr.removefile);
(2)分析归档的重做日志
22:22:46
RMAN> list archivelog all;
已存档的日志副本列表
关键字 Thrd Seq S 短时间 名称
------- ---- ------- - ---------- ----
124 1 22 A 09-5月 -10 D:\ORACLE\FLASHDB\MYFMIS\ARCHIVELOG\2010_05_10\O1_MF_1_22_5YHHF6WB_.ARC
122 1 23 A 09-5月 -10 D:\ORACLE\FLASHDB\MYFMIS\ARCHIVELOG\2010_05_10\O1_MF_1_23_5YHHF2CQ_.ARC
34 1 23 A 09-5月 -10 D:\ORACLE\FLASHDB\MYFMIS\ARCHIVELOG\2010_05_09\O1_MF_1_23_5YFLRZF5_.ARC
123 1 24 A 09-5月 -10 D:\ORACLE\FLASHDB\MYFMIS\ARCHIVELOG\2010_05_10\O1_MF_1_24_5YHHF54W_.ARC
126 1 1 A 10-5月 -10 D:\ORACLE\FLASHDB\MYFMIS\ARCHIVELOG\2010_05_10\O1_MF_1_1_5YHJN0QX_.ARC
127 1 1 A 10-5月 -10 D:\ORACLE\FLASHDB\MYFMIS\ARCHIVELOG\2010_05_13\O1_MF_1_1_5YR1CTQG_.ARC
128 1 2 A 13-5月 -10 D:\ORACLE\FLASHDB\MYFMIS\ARCHIVELOG\2010_05_13\O1_MF_1_2_5YR1CWPY_.ARC
129 1 3 A 13-5月 -10 D:\ORACLE\FLASHDB\MYFMIS\ARCHIVELOG\2010_05_13\O1_MF_1_3_5YR1D0KL_.ARC
SQL> Col name format a80
SQL> Select name, sequence#, first_change# FROM v$archived_log;
NAME SEQUENCE# FIRST_CHANGE#
-------------------------------------------------------------------------------- ---------- -------------
D:\ORACLE\FLASHDB\MYFMIS\ARCHIVELOG\2010_05_09\O1_MF_1_23_5YFLRZF5_.ARC 23 998451
D:\ORACLE\FLASHDB\MYFMIS\ARCHIVELOG\2010_05_10\O1_MF_1_23_5YHHF2CQ_.ARC 23 998451
D:\ORACLE\FLASHDB\MYFMIS\ARCHIVELOG\2010_05_10\O1_MF_1_24_5YHHF54W_.ARC 24 1004843
D:\ORACLE\FLASHDB\MYFMIS\ARCHIVELOG\2010_05_10\O1_MF_1_22_5YHHF6WB_.ARC 22 995340
D:\ORACLE\PRODUCT\10.2.0\ORADATA\MYFMIS\REDO01.LOG 0 0
D:\ORACLE\PRODUCT\10.2.0\ORADATA\MYFMIS\REDO02.LOG 1 1016422
D:\ORACLE\PRODUCT\10.2.0\ORADATA\MYFMIS\REDO03.LOG 0 0
D:\ORACLE\FLASHDB\MYFMIS\ARCHIVELOG\2010_05_10\O1_MF_1_1_5YHJN0QX_.ARC 1 1016422
D:\ORACLE\FLASHDB\MYFMIS\ARCHIVELOG\2010_05_13\O1_MF_1_1_5YR1CTQG_.ARC 1 1017352
D:\ORACLE\FLASHDB\MYFMIS\ARCHIVELOG\2010_05_13\O1_MF_1_2_5YR1CWPY_.ARC 2 1053311
D:\ORACLE\FLASHDB\MYFMIS\ARCHIVELOG\2010_05_13\O1_MF_1_3_5YR1D0KL_.ARC 3 1053313
已选择11行。
--根据时间进行归档查询:
list backup of archivelog time between "to_date('2010-5-13 22:25:21','yyyy-mm-dd hh24:mi:ss')" and "to_date('2010-5-13 22:48:21','yyyy-mm-dd hh24:mi:ss')";
--建立列表
SQL> execute dbms_logmnr.add_logfile(LogFileName=>'D:\ORACLE\FLASHDB\MYFMIS\ARCHIVELOG\2010_05_13\O1_MF_1_1_5YR1CTQG_.ARC', ptions=>dbms_logmnr.new);
--添加其他日志文件到列表
SQL> execute dbms_logmnr.add_logfile(LogFileName=>'D:\ORACLE\FLASHDB\MYFMIS\ARCHIVELOG\2010_05_13\O1_MF_1_5_5YR3WF89_.ARC', ptions=>dbms_logmnr.addfile);
SQL> execute dbms_logmnr.add_logfile(LogFileName=>'D:\ORACLE\FLASHDB\MYFMIS\ARCHIVELOG\2010_05_13\O1_MF_1_6_5YR3WL0Z_.ARC', ptions=>dbms_logmnr.addfile);
--删除日志文件列表
SQL> execute dbms_logmnr.add_logfile(LogFileName=>'D:\ORACLE\FLASHDB\MYFMIS\ARCHIVELOG\2010_05_13\O1_MF_1_6_5YR3WL0Z_.ARC', ptions=>dbms_logmnr.removefile);
22:24:02
###################################
3、使用Logminer进行日志分析
无限制条件:
SQL> execute dbms_logmnr.start_logmnr(DictFileName=> 'D:\oracle\logminer_log\logminer_dict.ora') ;
PL/SQL过程已成功完成。
有限制条件:
通过对过程DBMS_LOGMNR.START_LOGMNR中的时间或者SCN参数的设置,可以缩小分析日志文件的范围:
如我们仅仅分析2010-5-13 00:00:00到2010-5-13 22:22:46的日志:
SQL> execute dbms_logmnr.start_logmnr(DictFileName=>'D:\oracle\logminer_log\logminer_dict.ora',StartTime => to_date('2010-5-13 00:00:00','YYYY-MM-DD HH24:MI:SS'),EndTime => to_date('2010-5-13 22:48:21','YYYY-MM-DD HH24:MI:SS '));
相关的参数如下:
参数参数类型默认值含义
StartScn数字型0分析重作日志中SCN≥StartScn日志文件部分
EndScn数字型0分析重作日志中SCN≤EndScn日志文件部分
StartTime日期型1998-01-01分析重作日志中时间戳≥StartTime的日志文件部分
EndTime日期型2988-01-01分析重作日志中时间戳≤EndTime的日志文件部分
DictFileName字符型字典文件该文件包含一个数据库目录的快照。
使用该文件可以使得到的分析结果是可以理解的文本形式,
而非系统内部的16进制
Options BINARY_INTEGER 0系统调试参数,实际很少使用
################################
4、得到分析结果:
我们已经分析得到了重作日志文件中的内容。
动态性能视图v$logmnr_contents包含LogMiner分析得到的所有的信息。
SELECT sql_redo FROM v$logmnr_contents;
如果我们仅仅想知道某个用户对于某张表的操作,可以通过下面的SQL查询得到,该查询可以得到用户FMISMAIN对表XTDW 所作的一切工作。
SQL>SELECT sql_redo FROM v$logmnr_contents WHERE username='FMISMAIN' AND table_name='XTDW2';
需要强调一点的是,视图v$logmnr_contents中的分析结果仅在我们运行过程'dbms_logmrn.start_logmnr' 这个会话的生命期中存在(如果执行了DBMS_LOGMNR.END_LOGMNR分析结果将消失)。这是因为所有的LogMiner存储都在PGA内存中,所有其他的进程是看不到它的,同时随着进程的结束,分析结果也随之消失。
如果需要,可以通过removefile命令删除日志分析文件。
SQL> execute dbms_logmnr.add_logfile(LogFileName=>'D:\ORACLE\FLASHDB\MYFMIS\ARCHIVELOG\2010_05_13\O1_MF_1_1_5YR1CTQG_.ARC', ptions=>dbms_logmnr.removefile);
SQL> execute dbms_logmnr.add_logfile(LogFileName=>'D:\ORACLE\FLASHDB\MYFMIS\ARCHIVELOG\2010_05_13\O1_MF_1_5_5YR3WF89_.ARC', ptions=>dbms_logmnr.removefile);
SQL> execute dbms_logmnr.add_logfile(LogFileName=>'D:\ORACLE\FLASHDB\MYFMIS\ARCHIVELOG\2010_05_13\O1_MF_1_6_5YR3WL0Z_.ARC', ptions=>dbms_logmnr.removefile);
################################
5、使用DBMS_LOGMNR.END_LOGMNR结束日志分析过程,释放内存。
最后,使用过程DBMS_LOGMNR.END_LOGMNR终止日志分析事务,此时PGA内存区域被清除,分析结果也随之不再存在。
SQL> execute dbms_logmnr.end_logmnr;