Oracle基础包之DBMS_LOGMNR(十二)

概述

通过使用包DBMS_LOGMNR和DBMS_LOGMNR_D,可以分析重做日志和归档日志所记载的事务变化,最终确定误操作(例如DROP TABLE)的时间,跟踪用户事务操作,跟踪并还原表的DML操作.
回到顶部

包的组成
dbms_logmnr.add_logfile
作用:

用于为日志分析列表增加或删除日志文件,或者建立日志分析列表。

语法:
dbms_logmnr.add_logfile(LogFileName in varchar2,Option in binary_integer default addfile);
--其中LogFileName指定要增加或删除的日志文件名称,Option指定选项(dbms_logmnr.new建立日志分析列表,dbms_logmnr.addfile增加日志文件,dbms_logmnr.removefile删除文件)
dbms_logmnr.start_logmnr
作用:

用于启动logmnr会话

语法:
dbms_logmnr.start_logmnr(startscn in number default o,endscn in number default 0,
starttime in date default '01-jan-1988',endtime in date default '01-jan-2988',
dictfilename in varchar2 default '',option in binary_integer default 0);
--其中startscn指定日志分析的起始scn值,endscn指定日志分析的结束scn值,starttime指定日志分析的起始时间,endtime指定日志分析的结束时间,
--dictfilename指定日志分析要使用的字典文件名,option指定logminer分析选项。
dbms_logmnr.end_logmnr
作用:

结束logminer会话

语法:
dbms_logmnr.end_logmnr
dbms_logmnr.mine_value
作用:

用于返回要摘取的列信息,该函数在启动logminer之后调用。

语法:
dbms_logmner.mine_value(sql_redo_undo in raw,column_name in varchar2 default '') return varchar2;
--其中sql_redo_undo用于指定要摘取的数据(redo_value或undo_value),column_name用于指定要摘取的列(格式:schema.table.column);
dbms_logmnr.column_present
作用:

用于确定列是否出现在数据的redo部分或undo部分

语法:
dbms_logmnr.column_present(sql_redo_undo in raw,column_name in varchar2 default '') return number;
-- 其中如果列在redo或undo部分存在,则返回1,否则返回0。
dbms_logmnr_d.build
作用:

用于建立字典文件

语法:
dbms_logmnr_d.build(dictionary_filename in varcahr2,dictionary_location in varchar2,options in number);
--其中dictionary_filename指定字段文件名,dictionary_location指定文件所在位置,options指定字典要写入位置(store_in_flat_file:文本文件,store_in_redo_log2:重新日志)
dbms_logmnr_d.set_tablespace
作用:

用于改变logminer表所在的表空间

语法:
dbms_logmnr_d.set_tablespace(new_tablespace in default varchar2,dict_tablespace in default varchar2,spill_tablespace in default varchar2);
--其中new_tablespace指定logminer表所在的表空间,dict_tablespace指定字典表所在表空间,spill_tablespace指定溢出表所在表空间。
综合例子

首先建表temp,然后执行dml操作和日志切换操作,生产归档日志。

sqlplus /nologconnect system/manager@testcreatetabletemp(cola number,colb varchar2(10));alter system swith logfile;insertintotempvalues(9,'A');updatetempset cola=10;commit;alter system switch logfile;deletefromtemp;alter system switch logfile;
建立字典文件
说明:

字典文件用于存放表及对象ID号之间的对应关系。从9i开始,字典信息既可被摘取到字段文件中,也可被摘取到重做日志中。摘取字典信息到字典文件方法如下:

设置字典文件所在目录
alter system set utl_file_dir="g:\test"
scope=spfile;
重启Oracle Server
sqlplus /nolog
conn sys/test@test as sysdba
shutdown immediate
startup
摘取字典信息
begin
dbms_logmnr_d.build(dictionary_filename=>'dict.ora',dictionary_location=>'g:\test\logminer');
end;
建立日志分析列表
停止Oracle Server并装载数据库
sqlplus /nolog
conn sys/test@test as sysdba
shutdown immediate
startup mount
建立日志分析列表
begin
dbms_logmnr.add_logfile(options=>dbms_logmnr.new,logfilename=>'g:\test\arc1\test1.arc');
end;
增加其他日志文件(可选)
begin
dbms_logmnr.add_logfile(option=>dbms_logmnr.addfile,logfilename=>'g:\test\arc1\test12.arc');
end;
启动LogMiner分析
begin
dbms_logmnr.start_logmnr(dictfilename=>'g:\test\logminer\dict.ora',
starttime=>to_date('2020-04-03:10:10:00','YYYY-MM-DD:HH24:MI:SS'),
endtime=>to_date('2020-04-03:15:30:00','YYYY-MM-DD:HH24:MI:SS'));
end;
查看日志分析结果

说明:日志分析结果只能在当前会话查看。
(1)、显示DML分析结果

select operation,sql_redo,sql_undo from v$logmnr_contents where 
seg_name='TEMP';

(2)、显示DDL分析结果

select to_cahr(timestamp,'yyyy-mm-dd hh23:mi:ss') time,sql_redo from v$logmnr_contents where sql_redo like '%create%' or sql_redo like '%create%';

(3)、显示在用字典文件

select db_name,filename from v$logmnr_dictionary;
结束LogMiner
execute dbms_logmnr.end_logmnr;
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
检查是否设置了utl_file_dir参数 show parameter utl alter system set utl_file_dir='d:\temp\a' scope=spfile; 安装 sqlplus /nolog conn /as sysdba @?/rdbms/admin/dbmslm.sql @?/rdbms/admin/dbmslmd.sql 使用LogMiner工具 9i: alter system set UTL_FILE_DIR='d:\temp' scope=spfile; 10g: 注意大小写 CREATE DIRECTORY utl AS 'd:\temp'; GRANT EXECUTE ON UTL_FILE_DIR TO a; 生成字典文件(新建表后要刷新) EXECUTE dbms_logmnr_d.build(dictionary_filename => 'orcldict.ora', dictionary_location => 'd:\temp'); 分析在线重作日志文件 EXECUTE dbms_logmnr.add_logfile(LogFileName=>'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ABC\REDO03.LOG',Options=>dbms_logmnr.new); 添加其它文件 EXECUTE dbms_logmnr.add_logfile(LogFileName=>'D:\ORACLE\ORADATA\ORCL\REDO01.LOG',Options=>dbms_logmnr.addfile); 分析离线日志文件 EXECUTE dbms_logmnr.add_logfile(LogFileName=>'E:\Oracle\oradata\sxf\archive\ARCARC09108.001', Options=>dbms_logmnr.new); 使用LogMiner进行日志分析 EXECUTE dbms_logmnr.start_logmnr(DictFileName=>'d:\temp\orcldict.ora'); 或者 EXECUTE dbms_logmnr.start_logmnr(DictFileName=>'D:\temp\orcldict.ora', StartTime=>to_date('2008-06-03 18:00:00','YYYY-MM-DD HH24:MI:SS'), EndTime=>to_date('2008-06-03 19:59:59','YYYY-MM-DD HH24:MI:SS')); 观察分析结果 SELECT to_char(TIMESTAMP, 'YYYY-MM-DD HH24:MI:SS') attime, TABLE_NAME, TABLE_SPACE, SESSION#, SERIAL#, USERNAME, sql_redo FROM v$logmnr_contents where SQL_REDO like '%T1%'; 分析的结果其它会话无法访问 用以下方法转储: create table logmnr3 as select * from GV$LOGMNR_CONTENTS; 结束分析 EXECUTE DBMS_LOGMNR.END_LOGMNR;
ORACLE之常用FAQ V1.0 4 第一部分、SQL&PL/SQL 4 [Q]怎么样查询特殊字符,如通配符%与_ 4 [Q]如何插入单引号到数据库表中 4 [Q]怎样设置事务一致性 4 [Q]怎么样利用游标更新数据 4 [Q]怎样自定义异常 4 [Q]十进制与十六进制的转换 4 [Q]怎么样抽取重复记录 5 [Q]怎么样设置自治事务 5 [Q]怎么样在过程中暂停指定时间 5 [Q]怎么样快速计算事务的时间与日志量 5 [Q]怎样创建临时表 6 [Q]怎么样在PL/SQL中执行DDL语句 6 [Q]怎么样获取IP地址 7 [Q]怎么样加密存储过程 7 [Q] 7 [Q] 7 [Q]如果存在就更新,不存在就插入可以用一个语句实现吗 8 [Q]怎么实现左联,右联与外联 9 [Q]怎么实现一条记录根据条件多表插入 10 [Q]如何实现行列转换 11 [Q]怎么样实现分组取前N条记录 13 [Q]怎么设置存储过程的调用者权限 13 [Q]怎么快速获得用户下每个表或表分区的记录数 13 [Q]可以利用utl_smtp包发邮件,以下是一个发送简单邮件的例子程序 14 [Q]可以利用utl_file包,但是,在此之前,要注意设置好Utl_file_dir初始化参数 15 第二部分、ORACLE构架体系 16 [Q]ORACLE的有那些数据类型 16 [Q]Oracle有哪些常见关键字,不能被用于对象名 17 [Q]怎么查看数据库版本 18 [Q]怎么查看数据库参数 18 [Q]怎么样查看数据库字符集 19 [Q]怎么样修改字符集 19 [Q]怎样建立基于函数索引 19 [Q]怎么样移动表或表分区 20 [Q]怎么获得当前的SCN 20 [Q]ROWID的结构与组成 20 [Q]怎么样获取对象的DDL语句 20 [Q]如何创建约束的索引在别的表空间上 21 [Q]怎么知道那些表没有建立主键 21 [Q]dbms_output提示缓冲区不够,怎么增加 22 [Q]怎么样修改表的列名 22 [Q]怎么样给sqlplus安装帮助 22 [Q]怎么样快速下载Oracle补丁 22 [Q]如何移动数据文件 23 [Q]如果管理联机日志组与成员 24 [Q]怎么样计算REDO BLOCK的大小 24 [Q]控制文件包含哪些基本内容 25 [Q]如果发现表中有坏块,如何检索其它未坏的数据 25 [Q]我创建了数据库的所有用户,我可以删除这些用户吗 26 第三部分、备份与恢复 28 [Q]如何开启/关闭归档 28 [Q]怎样设置定时归档 29 [Q]不同版本怎么导出/导入 29 [Q]不同的字符集之前怎么导数据 29 [Q]怎么样备份控制文件 29 [Q]控制文件损坏如何恢复 29 [Q]怎么样热备份一个表空间 29 [Q]怎么快速得到整个数据库的热备脚本 30 [Q]丢失一个数据文件,但是没有备份,怎么样打开数据库 30 [Q]丢失一个数据文件,没有备份但是有该数据文件创建以来的归档怎么恢复 30 [Q]联机日志损坏如何恢复 31 [Q]怎么样创建RMAN恢复目录 31 [Q]怎么样在恢复的时候移动数据文件,恢复到别的地点 32 [Q]怎么从备份片(backuppiece)中恢复(restore)控制文件与数据文件 32 [Q]Rman的format格式中的%s类似的东西代表什么意义 33 [Q]执行exec dbms_logmnr_d.build('Logminer.ora','file 34 [Q]执行execute 34 第四部分、性能调整 35 [Q]如果设置自动跟踪 35 [Q]如果跟踪自己的会话或者是别人的会话 36 [Q]怎么设置整个数据库系统跟踪 36 [Q]怎么样根据OS进程快速获得DB进程信息与正在执行的语句 37 [Q]怎么样快速重整索引 37 [Q]如何使用Hint提示 38 [Q]怎么样快速复制表或者是插入数据 38 [Q]怎么避免使用特定索引 39 [Q]Oracle什么时候会使用跳跃式索引扫描 39 [Q]怎么样创建使用虚拟索引 40 [Q]怎样监控无用的索引 40 [Q]怎么样能固定我的执行计划 41 [Q]v$sysstat中的class分别代表什么 42 [Q]怎么杀掉特定的数据库会话 42 [Q]怎么快速查找锁与锁等待 42 [Q] 如何有效的删除一个大表(extent数很多的表) 43 [Q]如何收缩临时数据文件的大小 43 [Q]怎么清理临时段 44 [Q]怎么样dump数据库内部结构,如上面显示的控制文件的结构 44 [Q]如何获得所有的事件代码 45 [Q]什么是STATSPACK,我怎么使用它? 46 第五部分、ORACLE网络与安全 47 [Q]如何限定特定IP访问数据库 47 [Q]如何穿过防火墙连接数据库 47 [Q]如何利用hostname方式连接数据库 47 [Q]dbms_repcat_admin能带来什么安全隐患 48 [Q]在不知道用户密码的时候,怎么样跳转到另外一个用户执行操作后并不影响该用户? 48 [Q]如何加固你的数据库 49 [Q]如何检查用户是否用了默认密码 49 [Q]如何修改默认的XDB监听端口 50 [Q]怎么捕获用户登录信息,如SID,IP地址等 50

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜未央,流年殇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值