日记挖掘 v$logmnr_contents

针对日记挖掘这项很有用的技术,自己做了个实验。

 

实验步骤:

本人环境是10G,SID=ora10g,开始时数据库还是非归档模式。

一、修改归档模式

SQL>shutdown immediate

SQL>startup mount

SQL>ALTER DATABASE ARCHIVELOG;

SQL>alter database opne

 

SQL>archive log list

数据库日志模式            存档模式
自动存档             启用
存档终点            USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列     55
下一个存档日志序列   57
当前日志序列           57

 

二、模拟insert操作

创建test表

SQL>create table test as select * from dba_objects where 1=2;

插入值

SQL>insert into test select * from dba_objects;

提交

SQL>commit

 

三、产生所需的归档日志

手动切换日志

SQL>alter system switch logfile;

手动归档(这步用不着,切换日志的时候10g可能已经自动将日志归档)

SQL>archive log all

查找归档日志文件

存档终点=USE_DB_RECOVERY_FILE_DEST

USE_DB_RECOVERY_FILE_DEST是10g库中新增的一项参数,具体存放一些回滚需要的文件,归档日志文件就默认放在这里。

USE_DB_RECOVERY_FILE_DEST=E:\ora10g\flash_recovery_area\ORA10G\ARCHIVELOG\2008_06_11

确定对O1_MF_1_54_44YK01DQ_.ARC大小5M的这个归档文件做一次挖掘。

 

四、日志挖掘

先看看挖掘脚本

execute

dbms_logmnr.add_logfile(logfilename=>'E:\ora10g\flash_recovery_area\ORA10G\ARCHIVELOG\2008_06_11\O1_MF_1_54_44YK01DQ_.ARC',options=>dbms_logmnr.new);
execute dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);
create table temp_arch_44YK01DQ tablespace USERS as select * from v$logmnr_contents;
execute dbms_logmnr.end_logmnr;

 

实际这个脚本分为4个步骤:

1.执行程序包dbms_logmnr.add_logfile

execute dbms_logmnr.add_logfile(logfilename=>'归档文件路径',options=>dbms_logmnr.new); 

2.执行程序包dbms_logmnr.start_logmnr

execute dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);

3.创建表 

create table table_name tablespace ts_name as select * from v$logmnr_contents;

用来存放这个v$logmnr_contents视图的资料,由于delete or insert or update都以行的形式存在,如:

SQL_REDO

insert into "SYS"."TEST"("OWNER","OBJECT_NAME","SUBOBJECT_NAME","OBJECT_ID","DATA_OBJECT_ID","OBJECT_TYPE","CREATED","LAST_DDL_TIME","TIMESTAMP","STATUS","TEMPORARY","GENERATED","SECONDARY") values ('SYS','DIMLEVEL$',NULL,'423','423','TABLE',TO_DATE('13-4月 -08', 'DD-MON-RR'),TO_DATE('13-4月 -08', 'DD-MON-RR'),'2008-04-13:09:27:27','VALID','N','N','N');

SQL_UNDO

delete from "SYS"."TEST" where "OWNER" = 'SYS' and "OBJECT_NAME" = 'DIMLEVEL$' and "SUBOBJECT_NAME" IS NULL and "OBJECT_ID" = '423' and "DATA_OBJECT_ID" = '423' and "OBJECT_TYPE" = 'TABLE' and "CREATED" = TO_DATE('13-4月 -08', 'DD-MON-RR') and "LAST_DDL_TIME" = TO_DATE('13-4月 -08', 'DD-MON-RR') and "TIMESTAMP" = '2008-04-13:09:27:27' and "STATUS" = 'VALID' and "TEMPORARY" = 'N' and "GENERATED" = 'N' and "SECONDARY" = 'N' and ROWID = 'AAAMjsAABAAAPBgAAA';

即使使用比如这种语句insert into test values(……) where wner='SYS' and OBJECT_NAME='DIMLEVEL$';

也同样在这个v$logmnr_contents视图中将修改记录以行的形式出现的(显示where子句的所有条件)。

所以表会比较大,建议选择较大的表空间ts_name

4.执行程序包dbms_logmnr.end_logmnr

execute dbms_logmnr.end_logmnr;

用于结束日志挖掘。

 

五、查询表

select * from table_name;

一般是使用sys用户做日志挖掘操作

select * from sys.table_name;

表中详细记载着日志时间内,所有对数据库所做的所有dml操作(可能不包括select,有待考察)

一般采用这个语句查询:

select USERNAME,SEG_OWNER,SEG_NAME,SEG_TYPE,SEG_TYPE_NAME,TABLE_SPACE,OPERATION,OPERATION_CODE,

SQL_REDO,SQL_UNDO,STATUS
from sys.table_name
where table_space='BOSS_DATA01'
and rownum<1000;

 

主要是SQL_REDO这栏位里的内容,利用PL/SQL查询最好。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/11400965/viewspace-406692/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/11400965/viewspace-406692/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值