• logminer实战之生产环境写入数据字典,dg环境查询拷贝日志,测试环境进行挖掘,输出结果


    应客户需要,对某一天的日志进行挖掘,分析日均归档日志切换数量20增长至40的原因,是什么表的dml操作导致的日志量剧增,最终定位某个应用(需要客户自己进行甄别)

    操作说明及介绍:

    1.客户10.2.0.5 rac 两节点,一套10.2.0.5 dg单实例环境,一套测试库(测试库与dg在同一台主机,且测试库是一年前历史时期的生产库的备库)

    2.根据对生产环境最小化原则,在主库只进行创建数据字典,并不在主库进行日志挖掘

    3.根据操作简便,dg与测试库在同一台主机上,本次使用dg环境视图查询日志文件,在测试库中直接进行挖掘,省略拷贝归档日志步骤

    操作流程

    1.生产库rac,创建数据字典

    2.dg环境,查询需要挖掘的归档日志信息+主库创建的数据字典所在的归档文件

    3.测试库挖掘,使用Logminer工具进行日志挖掘

    4.分析输出内容,使用sql分组查询出对象,操作类型,操作次数统计信息

    1.生产库rac,创建数据字典

    生产库,将数据字典,写入Online redo文件中,切换归档,拷贝至测试库,注册后使用。
    alter system switch logfile;
    alter database add supplemental log data; 
    --查询验证
    SQL> select SUPPLEMENTAL_LOG_DATA_MIN,SUPPLEMENTAL_LOG_DATA_PK,SUPPLEMENTAL_LOG_DATA_UI from v$database;
    SUPPLEME SUP SUP
    -------- --- ---
    YES      NO  NO
    
    --数据字典,写入日志文件
    exec DBMS_LOGMNR_D.BUILD(dictionary_filename=>NULL,dictionary_location=>NULL,options=>dbms_logmnr_d.STORE_IN_REDO_LOGS);
    --关闭最小补充日志
    alter database drop supplemental log data;
    --查询确认,关闭最小补充日志
    SQL> select SUPPLEMENTAL_LOG_DATA_MIN,SUPPLEMENTAL_LOG_DATA_PK,SUPPLEMENTAL_LOG_DATA_UI from v$database;
    SUPPLEME SUP SUP
    -------- --- ---
    NO       NO  NO
    
    --查询数据字典写入的日子文件,序列号名称sequence#
    SQL> select thread#,sequence#,name,ARCHIVED,DICTIONARY_BEGIN,DICTIONARY_END from v$archived_log where DICTIONARY_BEGIN='YES';
       THREAD#  SEQUENCE# NAME                                                                                       ARC DIC DIC
    ---------- ---------- ------------------------------------------------------------------------------------------ --- --- ---
             1      13548 xxxdg                                                                                      YES YES YES
             1      13548 +ASM/xxx/thread_1_seq_xxx                                                                  YES YES YES

    2.dg环境,查询需要挖掘的归档日志信息+主库创建的数据字典所在的归档文件

    环境确认
    修改
    export ORACLE_SID=newdg
    查询确认
    echo $ORACLE_SID
    SQL>执行
    alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
    select name,thread#,COMPLETION_TIME,FIRST_TIME,NEXT_TIME from v$archived_log where name is not null;
    
    ##########选择需要挖掘的归档日志##################################
    xxx                 2 2019-01-15 00:25:25 2019-01-15 02:00:04 2019-01-15 02:01:34
    xxx                2 2019-01-15 00:27:05 2019-01-15 02:01:34 2019-01-15 02:03:14
    xxx               1 2019-01-15 00:28:56 2019-01-15 02:00:05 2019-01-15 02:05:10
    xxx             2 2019-01-15 00:28:58 2019-01-15 02:03:14 2019-01-15 02:05:07
    xxx              2 2019-01-15 00:31:06 2019-01-15 02:05:07 2019-01-15 02:07:14
    xxx             2 2019-01-15 00:32:45 2019-01-15 02:07:14 2019-01-15 02:08:53
    
    ##################################################################
    查询出,生产库,写入数据字典的归档日志 1=>thread / 13548 =>sequence 
    xxx                1 2019-01-15 10:21:59 2019-01-15 11:58:10 2019-01-15 11:58:15

    3.测试库挖掘,使用Logminer工具进行日志挖掘

    ************************************test挖掘*************************************
    @?/rdbms/admin/dbmslmd.sql
    @?/rdbms/admin/dbmslm.sql
    @?/rdbms/admin/dbmslms.sql
    @?/rdbms/admin/prvtlm.plb*****************************新环境需要执行上述,已经挖掘过的环境忽略*********
    1)测试库,准备工作
    开启归档模式
    确认连接数据库是测试库
     $ export ORACLE_SID=ax
     $ echo $ORACLE_SID
    ax
    2)关闭测试库,启动到Mount状态,关闭归档模式,修改归档参数
    SQL> shutdown immediate;
    SQL> startup mount;
    
    查询数据库归档模式 
    SQL> archive log list
    Database log mode              No Archive Mode 非归档模式
    Automatic archival             Disabled
    Archive destination            +NDATADG
    -----------------------------------------------------------------
    log_archive_dest_1                   string      LOCATION=+NDATADG
    
    --测试库,修改归档参数,
    SQL> alter system set log_archive_dest_1='location=/data/test_arch'; 
    SQL> alter database archivelog;
    SQL> alter database open;
    SQL> select status from v$instance;
    STATUS
    ------------
    OPEN
    SQL> show parameter pfile
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    spfile                               string      /xxx/spfilecdp11orcl.ora  
    --测试库,已开启最小(可忽略)                                           
    SQL> alter database add supplemental log data;  
    查询确认测试库,开启最小补充日志
    SQL> select SUPPLEMENTAL_LOG_DATA_MIN,SUPPLEMENTAL_LOG_DATA_PK,SUPPLEMENTAL_LOG_DATA_UI from v$database;
    SUPPLEME SUP SUP
    -------- --- ---
    YES      NO  NO
    
    
    --Logminer用法
    开启logminer
    exec dbms_logmnr_d.build(options => dbms_logmnr_d.STORE_IN_REDO_LOGS);
    第一个日志
    exec dbms_logmnr.add_logfile('xxx',dbms_logmnr.new);
    第二个日子++++
    exec dbms_logmnr.add_logfile('xxx',dbms_logmnr.addfile);
    exec dbms_logmnr.add_logfile('xxx',dbms_logmnr.addfile);
    exec dbms_logmnr.add_logfile('xxx',dbms_logmnr.addfile);
    exec dbms_logmnr.add_logfile('xxx',dbms_logmnr.addfile);
    exec dbms_logmnr.add_logfile('xxx',dbms_logmnr.addfile);
    建议:最后一个日志,选择包含数据字典信息的日子文件
    exec dbms_logmnr.add_logfile('xxx',dbms_logmnr.addfile);
    
    日志分析—这个步骤消耗性能,正在分析
    exec DBMS_LOGMNR.START_LOGMNR(DictFileName=>'',Options=>DBMS_LOGMNR.DICT_FROM_REDO_LOGS);
    
    可以查询日志挖掘后的行数量
    select count(*) from V$LOGMNR_CONTENTS;
      COUNT(*)
    ----------
       5032895

    4.分析输出内容,使用sql分组查询出对象,操作类型,操作次数统计信息


    
    可以创建一个临时表存放(实际发现,时间过长可忽略)
    create table logmnr_04_14_one_date as select  * from V$LOGMNR_CONTENTS a ;
    
    
    预留的一个脚本xls,可以修改spool xxx名称,自由选择: from logmnr_04_14_one_date 表可换成V$LOGMNR_CONTENTS
    @HISBK [/home/oracle/enmo/script] $ cat tab_xls.sql
    set linesize 200
    set term off verify off feedback off pagesize 999
    set markup html on entmap on spool on preformat off
    spool log_20190104_14_15.xls
    select username,SEG_OWNER,SEG_NAME,seg_type_name,OPERATION,count(*)
    from logmnr_04_14_one_date  group by username,SEG_OWNER,SEG_NAME,seg_type_name,
    OPERATION order by 6 asc;
    spool off
    exit
    
    执行脚本,输出xls格式表格
    @/home/oracle/enmo/script/tab_xls.sql
    
    --如果没有执行xls格式表格,备选退出挖掘模式(可选)
    execute dbms_logmnr.end_logmnr;
  • 相关阅读:
    SpringBoot JdbcTemplate多数据源
    SpringBoot Mybatis多数据源
    SpringBoot 配置文件2
    SpringBoot 配置文件1
    SpringBoot 日志配置
    乌镇行
    防火墙
    PL/SQL查询结果窗口太小且显示不完全
    python 列表解析
    HTML
  • 原文地址:https://www.cnblogs.com/lvcha001/p/10306253.html
Copyright © 2020-2023  润新知