美文网首页
Oracle日志分析

Oracle日志分析

作者: Reiko士兵 | 来源:发表于2019-03-04 18:25 被阅读0次

    参考文献

    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日志分析

          本文链接:https://www.haomeiwen.com/subject/kpmiuqtx.html