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