Oracle日志分析

参考文献

  1. UTL_FILE_DIR
  2. Oracle日志分析!
  3. 详解Oracle的日志的工具——LogMiner

一、 背景介绍

Oracle的跟踪文件只记录系统相关的内容,对于数据库上执行的具体的删除、插入、修改等操作,跟踪文件并无相关记录(若这也记录的话,跟踪文件就爆炸了),但是,如果真的需要查看特定时刻特定用户在数据库上执行的操作,也不是没办法,可以通过用logminer分析日志文件获取相关信息。
logminer分析归档日志文件所获得的信息并不是原始的操作信息,而是等价的原子操作信息,譬如用一条delete语句删除两百万条信息,原始操作只需一条命令,但是分析归档文件会获得两百万条delete命令信息。

二、 分析步骤

1. 获取所要分析时间段归档日志文件信息
SELECT 'dbms_logmnr.add_logfile(LogFileName=>'''
       || name
       || ''', Options=>dbms_logmnr.addfile);'
FROM   v$archived_log
WHERE  first_time > To_date('2019-02-27 20:00', 'yyyy-mm-dd hh24:mi')
       AND first_time < To_date('2019-02-27 21:00', 'yyyy-mm-dd hh24:mi')
       AND dest_id = 1
ORDER  BY first_time

输出信息格式如下:

dbms_logmnr.add_logfile(LogFileName=>'+DATADG/dggtge/archivelog/2019_02_27/thread_2_seq_229652.7316.1001361899', Options=>dbms_logmnr.addfile);

保存好输出信息,并将输出信息第一条中的dbms_logmnr.addfile改成dbms_logmnr.new,即:

dbms_logmnr.add_logfile(LogFileName=>'+DATADG/dggtge/archivelog/2019_02_27/thread_2_seq_229652.7316.1001361899', Options=>dbms_logmnr.new);

2. 设置utl_file_dir参数

utl_file_dir参数用于Oracle进行IO操作时指定目录,此参数为空值、指定目录不存在以及IO操作目录与此参数不一致都会引起IO操作报错。可用以下语句查看utl_file_dir的值:

show parameter utl_file_dir

用以下命令设定utl_file_dir的值:

alter system set utl_file_dir='/tmp' scope=spfile;

此参数为静态参数,需要通过修改spfile重启数据库生效。

3. 创建数据字典文件

因为Oracle日志文件中记录的并非原始对象名称,而是其内部编码,为了使logminer分析出的sql信息便于查看,我们需要利用数据字典文件将其转换成易读的表名和列名。

begin
dbms_logmnr_d.build(
dictionary_filename=>'logminer_dict.dat',
dictionary_location=>'/tmp');
end;
/

注意dictionary_location值与utl_file_dir一致。

4. 添加需要分析的日志文件

-- 第一个为new,其他为addfile。
-- logfilename为select name from v$archived_log中的某一块
begin
dbms_logmnr.add_logfile(LogFileName=>'+DATADG/dggtge/archivelog/2019_02_27/thread_2_seq_229652.7316.1001361899', Options=>dbms_logmnr.new);
dbms_logmnr.add_logfile(LogFileName=>'+DATADG/dggtge/archivelog/2019_02_27/thread_2_seq_229653.7632.1001362211', Options=>dbms_logmnr.addfile);
...
dbms_logmnr.add_logfile(LogFileName=>'+DATADG/dggtge/archivelog/2019_02_27/thread_1_seq_226713.7138.1001365283', Options=>dbms_logmnr.addfile);
end;
/

这里的Options有三个参数:
NEW - 创建一个新的日志文件列表
ADDFILE - 向这个列表中添加日志文件
REMOVEFILE - 移除这个列表中日志文件

5. 开始分析日志文件

用生成的数字字典文件:

begin
dbms_logmnr.start_logmnr(dictfilename=>'/tmp/logminer_dict.dat');
end;
/

或者:

EXECUTE dbms_logmnr.start_logmnr(options =>dbms_logmnr.DICT_FROM_ONLINE_CATALOG);

如果用第二种方式,则无需第3步中创建数据字典文件。

6. 查看分析结果

通过分析视图v$logmnr_contents获取具体的sql语句信息。

你可能感兴趣的:(Oracle日志分析)