oracle之logminer的使用

第一:创建dbms_logmnr包
以sys用户执行下面四个脚本
dbmslm.sql
@/u01/oracle/rdbms/admin/dbmslm.sql
dbmslmd.sql
@/u01/oracle/rdbms/admin/dbmslmd.sql

第二 修改参数文件,指定分析数据的存放位置
SQL> alter system set utl_file_dir='/u01/bak_qilin/logminer' scope=spfile;

第三 关闭,启动
shutdown immediate
startup;

第四 创建数据字典文件
以sys用户运行以下命令:
SQL> execute dbms_logmnr_d.build(dictionary_filename => 'sqltrace.ora',dictionary_location => '/u01/bak_qilin/logminer');
或者 execute dbms_logmnr_d.build('sqltrace.ora','/u01/bak_qilin/logminer',dbms_logmnr_d.store_in_flat_file);

第五 建立日志分析表
首先 查询在线日志文件用 SQL> select * from v$logfile;
然后 执行以下命令:
第1个日志文件需要以dbms_lognr.new的方式添加,从第2个开始用dbms_logmnr.addfile方式添加
EXECUTE dbms_logmnr.add_logfile('/u01/oradata/qilin/redo01.log', dbms_logmnr.new);
EXECUTE dbms_logmnr.add_logfile('/u01/oradata/qilin/redo02.log', dbms_logmnr.addfile);
EXECUTE dbms_logmnr.add_logfile('/u01/oradata/qilin/redo03.log', dbms_logmnr.addfile);
以下的加载方式也是可以的
SQL> exec dbms_logmnr.add_logfile(options => dbms_logmnr.new,logfilename=>'/u01/oradata/qilin/redo01.log');
SQL> exec dbms_logmnr.add_logfile(options => dbms_logmnr.addfile,logfilename=>'/u01/oradata/qilin/redo02.log');
SQL> exec dbms_logmnr.add_logfile(options => dbms_logmnr.addfile,logfilename=>'/u01/oradata/qilin/redo03.log');
    可以分析以归档的离线重做日志文件,当然这要求数据库运行在归档模式。
    如果需要从分析列表里去掉一个文件用
    EXECUTE dbms_logmnr.add_logfile('d:\ORACLE\ORADATA\ORA\REDO03_1.LOG',dbms_logmnr.removefile);
    查看被当前会话加载的日志:SQL> select filename,low_scn,next_scn from v$logmnr_logs;

第六 启动logminer进行分析
首先 修改sysdate格式; alter session set nls_date_format='yyyy-mm-dd:hh24:mi:ss';
    其次 从v$logmnr_logs中查询low_time,high_time,low_scn,next_scn信息;
SQL> select low_time,high_time,low_scn,next_scn from v$logmnr_logs;
LOW_TIME            HIGH_TIME              LOW_SCN   NEXT_SCN
------------------- ------------------- ---------- ----------
2010-05-25:16:47:37 2010-05-26:10:30:04     629155     650681
2010-05-26:10:30:04 2010-05-31:11:07:36     650681     673807
2010-05-31:11:07:36 1988-01-01:00:00:00     673807 2.8147E+14
然后 分析logminer
SQL> exec dbms_logmnr.start_logmnr(dictfilename =>'/u01/bak_qilin/logminer/sqltrace.ora',startscn=>650681,endscn=>673806,starttime =>to_date('2010-05-24 09:00:00','yyyy-mm-dd hh24:
mi:ss'),endtime=>to_date('2010-05-31 09:00:00','yyyy-mm-dd hh24:mi:ss'));
    PL/SQL procedure successfully completed.
    或者
    SQL> execute dbms_logmnr.start_logmnr(dictfilename=>'D:\oracle\product\logminer\sqltrace.ora',startscn=>2060597,endscn=>2092926,starttime=>to_date('2010-05-24 00:00:00'),     
    endtime=>to_date('2010-05-31 00:00:00'));
    或者
    SQL> exec dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog +  dbms_logmnr.committed_data_only + dbms_logmnr.print_pretty_sql);

    第七 查看日志分析的结果
执行以下命令:sql> select username, sql_redo, sql_undo from v$logmnr_contents where username = ‘test’ and peration = ‘delete’;

第八 关闭logminer
执行命令:sql> exec dbms_logmnr.end_logmnr

select * from v$log_history;   select * from v$logmnr_logs;  

    一共有四个表,详细说明如下
V$LOGMNR_DICTIONARY-------查询使用的数据字典文件
V$LOGMNR_PARAMETERS-------查询当前LogMiner设定的参数
V$LOGMNR_LOGS      -------查询分析的日志文件
V$LOGMNR_CONTENTS  -------日志文件的内容
在查询v$logmnr_contents内容时,where限制条件一定要用大写.

Seg_name  : 表名;
Scn       : SCN 号码
Sql_redo  : 所作的sql 语句
Sql_undo  : 对应sql_redo, 恢复用的sql 语句
Timestamp : sql 发出的具体时间
Operation : sql 的类型,分为INSERT, UPDATE, START(set …), COMMIT(commit), INTERNAL等
Session#  : 发出该操作的 session 

select operation,sql_redo,sql_undo from v$logmnr_contents;
SELECT sql_redo FROM v$logmnr_contents WHERE username='SYS' AND tablename='TT';
select scn,sql_redo from v$logmnr_contents where seg_owner='SYSTEM' and seg_name='ENDUSER' and upper(operation)='INSERT';
SELECT timstamp,sql_redo FROM v$logmnr_contents WHERE upper(sql_redo) like '%insert%';

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

转载于:http://blog.itpub.net/20976446/viewspace-672807/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值