log_miner操作(日志挖掘)

时间:2021-05-01 07:44:22

Oracle LogMiner是Oracle公司从产品8i以后提供的一个实际非常有用的分析工具,使用该工具可以轻松获得Oracle重做日志文件(归档日志文件)中的具体内容。LogMiner分析工具实际上是由一组PL/SQL包和一些动态视图(Oracle8i内置包的一部分)组成。

1、安装LogMiner
新建包(这两个脚本必须均以SYS管理员身份运行):
SQL> @E:oracleproduct10.2.0db_1RDBMSADMINdbmslm.sql;
SQL> @E:oracleproduct10.2.0db_1RDBMSADMINdbmslmd.sql;


2、 创建LogMiner所需的数据字典文件
该字典文件是可选的,但是如果没有它,LogMiner解释出来的语句中关于数据字典中的部分(如表名、列名等)和数值都将是16进制的形式,我们是无法直接理解的。
(1)、添加数据字典目录:
SQL> connect system/oracle as sysdba;
SQL> show parameter utl_file;
SQL> alter system set utl_file_dir='/u01/oracle/ora_log' scope=spfile;
SQL> shutdown immediate
SQL> startup
(2)、创建数据字典文件
SQL> EXECUTE dbms_logmnr_d.build(dictionary_filename => 'redolog.log',dictionary_location => '/u01/oracle/ora_log')
创建数据字典的目:让LogMiner引用涉及到内部数据字典中的部分时为他们实际的名字,而不是系统内部的16进制。


3、添加日志文件
但这里建议最好是每次只添加一个需要分析的日志文件,在对该文件分析完毕后,再添加另外的文件。
EXECUTE dbms_logmnr.add_logfile(LogFileName=>'/u01/oracle/oradata/test/redo01.log',Options=>dbms_logmnr.new);
EXECUTE dbms_logmnr.add_logfile(LogFileName=>'/u01/oracle/oradata/test/redo01.log',Options=>dbms_logmnr.addfile);
EXECUTE dbms_logmnr.add_logfile(LogFileName=>'/u01/oracle/oradata/testredo03.log',Options=>dbms_logmnr.addfile);
EXECUTE dbms_logmnr.add_logfile(LogFileName=>'/u01/oracle/oradata/test/redo01.log',Options=>dbms_logmnr.removefile);


4、 分析日志
EXECUTE dbms_logmnr.start_logmnr(DictFileName=>'/u01/oracle/ora_log/redolog.log');
--生成分析日志临时表,以便session断开时用其他用户也能查看
create table logmnr_contents as select * from v$logmnr_contents ;
--终止日志分析事务
execute dbms_logmnr.end_logmnr;
不完全分析举例:
--限制起始时间和终止时间参数:(注意时间参数要合理,否则会出ORA-01291错)
execute dbms_logmnr.start_logmnr( DictFileName => 'E:oracleora_logredolog.log',StartTime => to_date('2009-12-1 15:10:00','YYYY-MM-DD HH24:MI:SS'), EndTime => to_date('2010-02-8 15:16:59','YYYY-MM-DD HH24:MI:SS'));
--限制起始SCN和截止SCN
exec dbms_logmnr.start_logmnr(DictFileName => 'E:oracleora_logredolog.log',StartScn => 4140835823,EndScn => 4140836247);

 

5、查看分析结果
select timestamp, sql_redo
from sys.logmnr_contents
where upper(sql_redo) like '%CREATE%';
select session_info, sql_redo
from sys.logmnr_contents
where upper(operation) = 'UPDATE'
and upper(sql_redo) like '%SERVICE%';

 

6、v$logmnr_contents主要字段解释
SCN 特定数据变化的系统更改号,可用 select dbms_flashback.get_system_change_number from dual; 获得当前改变号。
TIMESTAMP 数据改变发生的时间
COMMIT_TIMESTAMP 数据改变提交的时间
SEG_OWNER 段的所有者名称
SEG_NAME 数据发生改变的段名称
SEG_TYPE 数据发生改变的段类型
SEG_TYPE_NAME 数据发生改变的段类型名称
TABLE_SPACE 变化段的表空间
ROW_ID 特定数据变化行的ID
SESSION_INFO 数据发生变化时用户进程信息,如login_username=WACOS client_info= OS_username=oracle Machine_name=ITDB 
OS_terminal= OS_process_id=2782 OS_program 
name=sqlplus@ITDB (TNS V1-V3)
OPERATION 重做记录中记录的操作(如INSERT)
SQL_REDO 可以为重做记录重做指定行变化的SQL语句
SQL_UNDO 可以为重做记录回退或恢复指定行变化的SQL语句

  <转>http://blog.itpub.net/23463019/viewspace-1042565/