关于Logminer
2024-07-21 02:39:33
供稿:网友
Logminer能用来做什么?
LogMiner 提供了一个处理重做日志文件并将其内容翻译成代表对数据库的逻辑操作的SQL 语句的过程。
LogMiner 运行在Oracle 版本8.1 或者更高版本中。
如何使用Logminer:
1。先要安装logminer的两个包;以SYS用户运行下面两个sql:
$ORACLE_HOME/rdbms/admin/dbmslm.sql
$ORACLE_HOME/rdbms/admin/dbmslmd.sql
2。创建数据字典文件
在参数文件中,添加参数UTL_FILE_DIR,该参数为放置数据字典文件的目录。
如:UTL_FILE_DIR = (e:/Oracle/logs)
重新启动数据库,使参数生效,然后创建数据字典文件:
EXECUTE dbms_logmnr_d.build(
dictionary_filename => ' v816dict.ora',
dictionary_location => 'e:/oracle/logs');
创建数据字典是让logminer引用实际到内部数据字典中的部分是使用对象的名称,而不是系统内部的16进制的ID.
3.创建要分析的日志文件的列表
(1)分析在线的重做日志
A。建立列表
EXECUTE dbms_logmnr.add_logfile(
LogFileName=>' e:/Oracle/oradata/sxf/redo01.log',
Options=>dbms_logmnr.new);
B。添加其他日至文件到列表
EXECUTE dbms_logmnr.add_logfile(
LogFileName=>' e:/Oracle/oradata/sxf/redo02.log',
Options=>dbms_logmnr.addfile);
(2)分析归档的重做日志
A。建立列表
EXECUTE dbms_logmnr.add_logfile(
LogFileName=>' E:/Oracle/oradata/sxf/archive/ARCARC09108.001',
Options=>dbms_logmnr.new);
B。添加其他日志文件到列表
EXECUTE dbms_logmnr.add_logfile(
LogFileName=>' E:/Oracle/oradata/sxf/archive/ARCARC09109.001',
Options=>dbms_logmnr.addfile);
在列表中删除文件
EXECUTE dbms_logmnr.add_logfile(
LogFileName=>' e:/Oracle/oradata/sxf/redo02.log',
Options=>dbms_logmnr. REMOVEFILE);
4.使用Logminer进行日志分析
无限制条件:
EXECUTE dbms_logmnr.start_logmnr(
DictFileName=>' e:/oracle/logs/ v816dict.ora ');
有限制条件:
通过对过程DBMS_LOGMNR.START_LOGMNR中的时间或者SCN参数的设置,可以缩小分析日志文件的范围:
如我们仅仅分析2005年7月23日到2005年7月26日的日志:
EXECUTE dbms_logmnr.start_logmnr(
DictFileName => ' e:/oracle/logs/ v816dict.ora ',
StartTime => to_date('2005-7-23 00:00:00','YYYY-MM-DD HH24:MI:SS')
EndTime => to_date(''2005-7-26 23:59:59','YYYY-MM-DD HH24:MI:SS '));
相关的参数如下:
参数 参数类型 默认值 含义
StartScn 数字型 0 分析重作日志中SCN≥StartScn日志文件部分
EndScn 数字型 0 分析重作日志中SCN≤EndScn日志文件部分
StartTime 日期型 1998-01-01 分析重作日志中时间戳≥StartTime的日志文件部分
EndTime 日期型 2988-01-01 分析重作日志中时间戳≤EndTime的日志文件部分
DictFileName 字符型 字典文件该文件包含一个数据库目录的快照。
使用该文件可以使得到的分析结果是可以理解的文本形式,
而非系统内部的16进制
Options BINARY_INTEGER 0 系统调试参数,实际很少使用
5。得到分析结果:
这时候可以对v$logmnr_contents查询来得到你想要得结果:
select sql_redo from v$logmnr_contents;
假如想知道某个用户对某张表的操作,比如查询用户symield对表bill所做的操作:
select sql_redo from v$logmnr_contents where username = 'symield' and seg_name = 'bill';
这个视图:v$logmnr_contents只在dbms_logmnr.start_logmnr这个会话的生存期内存在,
当过程终止后,此视图内容被清除。
6。使用DBMS_LOGMNR.END_LOGMNR结束日志分析过程。