oracle日志解析、logminer解析oracle日志文件
文章目录
前言
解析oracle日志方法分为两种:
1.Oracle Logminer
2.Oracle Golden Gate
这里推荐使用Oracle Logminer,因为Oracle8i以后的版本都带有LogMiner。
一、logminer简介
解析Oracle 在线(online)日志或归档(offline)日志。
二、安装logminer
1.查看sql脚本是否存在(oracle8i之后默认存在该sql脚本)
在此以oracle安装在D:\oracle\oracle为例
$ORACLE_HOME\RDBMS\ADMIN
或
D:\oracle\oracle\product\11.2.0\dbhome_1\RDBMS\ADMIN\
二选一即可
2.在sqlplus命令行执行脚本
SQL>@$ORACLE_HOME\RDBMS\ADMIN\dbmslm.sql;
SQL>@$ORACLE_HOME\RDBMS\ADMIN\dbmslmd.sql;
SQL>@$ORACLE_HOME\RDBMS\ADMIN\dbmslms.sql;
或
SQL>@D:\oracle\oracle\product\11.2.0\dbhome_1\RDBMS\ADMIN\dbmslm.sql;
SQL>@D:\oracle\oracle\product\11.2.0\dbhome_1\RDBMS\ADMIN\dbmslmd.sql;
SQL>@D:\oracle\oracle\product\11.2.0\dbhome_1\RDBMS\ADMIN\dbmslms.sql;
二选一即可
3.设置字典文件位置
UTL_FILE_DIR路径可随意设置;
alter system set UTL_FILE_DIR='D:\oracle\oracle\oradata\practice\logmnr' scope=spfile;
4.重启oracle
shutdown immediate;
startup;
5.生成字典文件
SQL>execute dbms_logmnr_d.build('dictdic.dic','D:\oracle\oracle\oradata\practice\logmnr');
或
SQL>execute dbms_logmnr_d.build('dict.ora','D:\oracle\oracle\oradata\practice\logmnr');
二选一即可
6.为什么生成字典文件
生成字典文件是为了翻译oracle日志文件信息
三、logminer命令介绍
1.添加解析文件dbms_logmnr.add_logfile;
2.解析文件dbms_logmnr.start_logmnr;
3.查询动态数据 select * from v$logmnr_contents;
4.结束解析dbms_logmnr.end_logmnr;(不一定每次都要结束解析,默认情况下当进程结束自动结束解析)
四、logminer命令使用
1.添加解析文件
第一个文件用dbms_logmnr.new
追加文件用dbms_logmnr.addfile
SQL>execute dbms_logmnr.add_logfile(LogFileName=>'D:\ORACLE\ORACLE\ORADATA\ORCL\REDO01.LOG',Options=>dbms_logmnr.new);
SQL>execute dbms_logmnr.add_logfile(LogFileName=>'D:\ORACLE\ORACLE\ORADATA\ORCL\REDO02.LOG',Options=>dbms_logmnr.addfile);
SQL>execute dbms_logmnr.add_logfile(LogFileName=>'D:\ORACLE\ORACLE\ORADATA\ORCL\REDO03.LOG',Options=>dbms_logmnr.addfile);
2.解析文件
①无条件解析
dictfilename的值为字典文件路径
SQL> execute dbms_logmnr.start_logmnr(dictfilename=>'D:\oracle\oracle\oradata\practice\logmnr\dictdic.dic');
或
SQL> execute dbms_logmnr.start_logmnr(dictfilename=>'D:\oracle\oracle\oradata\practice\logmnr\dict.ora');
②条件解析
SQL> execute dbms_logmnr.start_logmnr(
dictfilename=>'D:\oracle\oracle\oradata\practice\logmnr\dictdic.dic',
StartTime =>to_date('2020-11-27 00:00:00','YYYY-MM-DD HH24:MI:SS'),
EndTime =>to_date('2020-11-27 23:59:59','YYYY-MM-DD HH24:MI:SS'));
3.查看动态数据表
在解析时(dbms_logmnr.start_logmnr)生成
v$logmnr_contents,当解析结束v$logmnr_contents消失。
SQL> select * from v$logmnr_contents;
SQL> select sql_redo,sql_undo ,operation,timestamp from v$logmnr_contents where operation = 'UPDATE' and seg_name='SCOTTONE' and table_name='SCOTTONE';
注operation和table_name的值需要大写
字段 | 注释 |
---|---|
sql_redo | 记录sql(sql_redo字段长度为4000,如果超过长度将在下一条数据显示) |
sql_undo | 回退事务sql(sql_undo字段长度为4000,如果超过长度将在下一条数据显示) |
operation | sql类型(insert、update等) |
timestamp | 数据库数据改变时间 |
seg_name | 修改后的数据段的名称 |
table_name | 表名 |
更多字段请查看: https://blog.csdn.net/weixin_43938004/article/details/110226987
4.结束分析
SQL>execute dbms_logmnr.end_logmnr
注意
1.生成字典文件时,字典文件对应的是oracle当前数据库所有表的对应关系,如果表的字段或类型改变都需要重新生产字典文件。
2.解析归档日志需要开启补充日志
查看是否开启
SQL>select supplemental_log_data_pk, supplemental_log_data_ui from v$database;
supplemental_log_data_pk = no和supplemental_log_data_ui = no,则未开启。
开启命令
SQL>alter database add supplemental log data (primary key, unique index) columns;
Database altered