当前位置:Gxlcms > mysql > oracle日志挖掘

oracle日志挖掘

时间:2021-07-01 10:21:17 帮助过:33人阅读

1、$ORACLE_HOME/rdbms/admin/dbmslm.sql 2、$ORACLE_HOME/rdbms/admin/dbmslmd.sql 这两个脚本必须均以DBA用户身份运行。其中第一个脚本用来创建DBMS_LOGMNR包,该包用来分析日志文件。第二个脚本用来创建DBMS_LOGMNR_D包,该包用来创建数据字典文件。 2.创

1、$ORACLE_HOME/rdbms/admin/dbmslm.sql

2、$ORACLE_HOME/rdbms/admin/dbmslmd.sql

这两个脚本必须均以DBA用户身份运行。其中第一个脚本用来创建DBMS_LOGMNR包,该包用来分析日志文件。第二个脚本用来创建DBMS_LOGMNR_D包,该包用来创建数据字典文件。

2.创建字典文件

CREATE DIRECTORY utlfile AS'D:\app\zhoukai\oradata\LOGMNR';alter system set utl_file_dir='D:\app\zhoukai\oradata\LOGMNR' scope=spfile;
 执行以上语句后,重启数据库,查看是否设置成功
SQL> show parameter utl

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
create_stored_outlines               string
utl_file_dir                         string      D:\app\zhoukai\oradata\LOGMNR
EXECUTE dbms_logmnr_d.build(dictionary_filename =>'dictionary.ora', dictionary_location=>'D:\app\zhoukai\oradata\LOGMNR');
3.添加分析文件
 方法如下:
exec dbms_logmnr.add_logfile(logfilename=>'D:\APP\ZHOUKAI\ORADATA\ORCL\REDO01.LOG',options=>dbms_logmnr.NEW);
也可以添加多个文件,我们新增一个文件,方法如下:看出不同了吗,看看最后红色部分
dbms_logmnr.add_logfile(logfilename=>'D:\oracle\oradata\practice\ARCHIVE\ARC00002_0817639922.001',options=>dbms_logmnr.ADDFILE)
4.启动日志分析
  在分析日志之前我们要重建数据字典,因为我们刚才对表做了改动,所以在启动之前我们先要更新数据字典。
  启动日志可以制定一个范围,也可以不指定分析整个文件,具体的一些参数请查看oracle官方文档,在这边我们使用scn的范围限制。方法如下:
EXECUTE dbms_logmnr.start_logmnr( DictFileName =>'D:\app\zhoukai\oradata\LOGMNR\dictionary.ora',StartScn =>7240047,EndScn =>7240098); 
 如果你不想创建字典可以使用以下方法
 EXECUTE dbms_logmnr.start_logmnr( options =>dbms_logmnr.DICT_FROM_ONLINE_CATALOG,StartScn =>7240047,EndScn =>7240098);  
 具体options有很多参数,可以参照oracle官方文档。
5.查看分析结果
 到现在为止,我们已经分析得到了重作日志文件中的内容。动态性能视图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语句(反向操作)

需要强调一点的是,视图v$logmnr_contents中的分析结果仅在我们运行过程'dbms_logmrn.start_logmnr'这个会话的生命期中存在。这是因为所有的LogMiner存储都在PGA内存中,所有其他的进程是看不到它的,同时随着进程的结束,分析结果也随之消失。

最后,使用过程DBMS_LOGMNR.END_LOGMNR终止日志分析事务,此时PGA内存区域被清除,分析结果也随之不再存在。

那么我们来产看我们挖掘的数据。


SQL> SELECT operation,sql_redo,sql_undo FROM v$logmnr_contents WHERE table_name

='T';


OPERATION SQL_REDO SQL_UNDO

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

DELETE delete from "SCOTT"."T" where insert into "SCOTT"."T"("OWNER

"OWNER" = 'SYS' and "OBJECT_NA ","OBJECT_NAME","SUBOBJECT_NAM

ME" = 'ICOL$' and "SUBOBJECT_N E","OBJECT_ID","DATA_OBJECT_ID

AME" IS NULL and "OBJECT_ID" = ","OBJECT_TYPE","CREATED","LAS

'20' and "DATA_OBJECT_ID" = ' T_DDL_TIME","TIMESTAMP","STATU

2' and "OBJECT_TYPE" = 'TABLE' S","TEMPORARY","GENERATED","SE

and "CREATED" = TO_DATE('30-3 CONDARY","NAMESPACE","EDITION_

月 -10', 'DD-MON-RR') and "LAS NAME") values ('SYS','ICOL$',N

T_DDL_TIME" = TO_DATE('30-3月 ULL,'20','2','TABLE',TO_DATE('

-10', 'DD-MON-RR') and "TIMEST 30-3月 -10', 'DD-MON-RR'),TO_D

AMP" = '2010-03-30:10:07:48' a ATE('30-3月 -10', 'DD-MON-RR')


OPERATION SQL_REDO SQL_UNDO

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

nd "STATUS" = 'VALID' and "TEM ,'2010-03-30:10:07:48','VALID'

PORARY" = 'N' and "GENERATED" ,'N','N','N','1',NULL);

= 'N' and "SECONDARY" = 'N' an

d "NAMESPACE" = '1' and "EDITI

ON_NAME" IS NULL and ROWID = '

AAAUswAAEAABbujAAA';

我们可以使用undo恢复误删除的数据,其它作用前面已经描述了。


6.结束LogMiner

SQL> EXEC DBMS_LOGMNR.END_LOGMNR;


PL/SQL 过程已成功完成。


关于LogMiner学习如上


参照文档:oracle官方文档

http://www.cnblogs.com/shishanyuan/p/3140440.html

                    

人气教程排行