ORACLE日志挖掘器(LogMiner)
--日志挖掘器(LogMiner)
日志挖掘器的3个主要组成部分:v$logmnr_contents视图、pl/sql 的 的dbms_logmnr 、dbms_logmnr_d
v$logmnr_contents视图是 LogMiner 挖掘日志的接口,每当该视图被访问时,重做日志就会被读取,即挖掘日志实际上就是对
该视图的查询操作,前提是必须启动日志挖掘会话。
该视图包含的其中重要的字段有:
1、sql_redo、2、sql_undo、3、xid、4、operation、5、seg_owner、6、seg_name、7、row_id、8、username
9、os_username、10、machine_name、11、session_info、12、info、13、scn、14、timestamp
LogMiner的基本元素: 源数据库、挖掘数据库(可以是源库也可以是其他库)、LogMiner字典、重做日志
挖掘数据库指 启动挖掘会话的数据库,如果挖掘库与源库不是同一个数据库,那么其硬件平台和字符集必须与源库一致
或字符集必须是源库的超集 即源库的字符集是 挖掘库的一个子集。挖掘库的版本还必须大于等于源库的版本。
LogMiner字典 是指 将重做记录中的ORACLE内部对象翻译为可读信息的转换字典。在重做记录中被更改的对象被记载为编号形式,
变更的数据被记载为ORACLE数据类型的编码形式。如无LogMiner字典的帮助,编号形式以 十进制数字显示,编码形式以十六
进制显示。
重做日志 指 由源库产生的 归档日志或在线日志。
LogMiner 字典的位置有两种: 源库日志字典、源库在线数据字典、将字典载入一个文本文件。它们不能同时使用。
源库日志字典是指 调用 dbms_logmnr_d.build 存储过程 将 LogMiner 字典提取至源库的重做日志里。
sql>begin dbms_logmnr_d.build(options=>dbms_logmnr_d.store_in_redo_logs) end;
查看v$archived_log视图 可以确定 LogMiner 字典在哪些日志中。
select sequence#,name ,dictionary_begin,dictionary_end
from v$archied_log where dictionary_begin='YES' or dictionary_end='YES';
如果一个归档日志文件中无法容纳LogMiner字典,Oracle会采用多个连续的归档日志作为LogMiner字典的载体。
日志字典的好处:1、不要求挖掘库和源库是同一个库、2、DDL命令可以更新字典,这样挖掘出来的信息能够完全体现
DDL命令操作的结果。
源库在线数据字典:直接在启动挖掘会话时通过 start_logmnr 存储过程的 options 参数指定即可。
源库数据字典好处:挖掘库与源库为同库;DDL命令无法更新字典;
字典载入文本文件:首先将 utl_file_dir 初始化参数指定一个路径;然后重启实例;最后调用 dbms_logmnr_d.build存储过程
时为 options 参数指定 store_in_flat_file常量。
alter system set utl_file_dir='path' scope=spfile;
startup force;
begin dbms_logmnr_d.build(dictionary_filename=>'name',
dictionary_location=>'path',
options=>dbms_logmnr_d.store_in_flat_file); end;
注册重做日志
分为:手动注册、自动注册
手动注册:即手动注册需要重做日志使用 dbms_logmnr.add_logfile 存储过程。可以注册多个源库日志,并且日志不一定需要
按照序号依次添加,日志序列号也不必是连续的。
begin
dbms_logmnr.add_logfile(logfilename=>'path',
options=>dbms_logmnr.addfile);
end;
挖掘库与源库为同库:
begin
for rec in (select name from v$archied_log where resetlogs_change#=(select resetlogs_change# from v$database) and name is not null)
loop
DBMS_LOGMNR.ADD_LOGFILE(logfilename=rec.name,options=>dbms_logmnr.addfile);
end loop;