zoukankan      html  css  js  c++  java
  • 体系结构之日志挖掘

    1. 主要作用途:数据库恢复中有时会需要对Redo log进行分析,使用log miner,以便确定要恢复的时间点或SCN,跟踪数据库的变化,回退数据库的变化等。
    2. 要求:
      1. 源数据库和分析数据库必须运行在相同硬件平台上;
      2. 分析数据库可以是独立数据库或源数据库;
      3. 分析数据库的版本不能低于源数据库的版本;
      4. 分析数据库与源数据库必须具有相同的字符集;
      5. 使用LogMiner进行分析必须在日志生成前开启Minimal Supplemental logging
    3. 四个基本对象
      1. The Source Database:源数据库,产生日志的数据库。
      2. The Mining Database:分析数据库,运行LogMiner的数据库,不仅可以分析本身的日志,也可以分析其它数据库文件。
      3. The LogMiner Dictionary:日志挖掘字典,没有字典,日志内容无法解析,默认是系统内部16进制内容。
      4. The Redo Log Files:重做日志文件,可以是在线的,也可以是归档的。
    4. 操作流程
      1. 安装LogMiner
        1. 首先安装两个安装包:DBMS_LOGMNR 和 DBMS_LOGMNR_D,脚本如下:
          1. $ORACLE_HOME/rdbms/admin/dbmslm.sql
          2. $ORACLE_HOME/rdbms/admin/dbmslmd.sql
      2. 开启补充日志
    SQL> select SUPPLEMENTAL_LOG_DATA_MIN from v$database;
    SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;----通过PL/SQL包的DML的日志挖掘,这步要先执行,在此之后的DML操作才能从日志里挖到。
     
      1. 创建数据字典
        1. DBMS_LOGMNR_D.BUILD创建数据字典,三种创建方式
          1. dict_from_online_catalog在线字典
          2. store_in_flat_file平面文件字典
          3. store_in_redo_logs
        2. 如果使用在线字典方式,这个步骤可以省略
      2. 添加日志文件
        1. 添加第一个文件
    SQL> execute dbms_logmnr.add_logfile(logfilename=>'日志',options=>dbms_logmnr.new);----第一个文件 后缀官方建议是 .new

             2. 添加第二个及后续文件

    SQL> execute dbms_logmnr.add_logfile(logfilename=>'日志',options=>dbms_logmnr.addfile);----- 后续添加的就不是 new了
      1. 执行分析
    SQL> execute dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);
      1. 查询分析结果
        1. 查询的分析结果是存放在动态试图v$logmnr_contents 里的,建议不要直接查看,通过创建临时表的方式来查看
        2. 创建临时表
    SQL> create table tbs_test nologging as select * from v$logmnr_contents;

               3. 查看临时表结果

    SQL> select username,scn, to_char(timestamp, 'yyyy-mm-dd hh24:mi:ss') timestamp, sql_redo, sql_undo from tbs_test where seg_name = 'TEST';
      1. 关闭日志分析
    SQL> execute dbms_logmnr.end_logmnr;
     
     
    实验:通过在线数据字典方式挖掘归档日志
    实验步骤:
      1. 开启数据库补充日志
      2. 创建一张表 TESTLOG(此实验使用CTAS创建)
      3. 对该表做相应的DML操作(update/delete)最后都提交
      4. 查看当前正在使用的日志组及日志序列号
      5. 将该日志组归档出去
      6. 添加日志文件
      7. 执行分析
      8. 使用CTAS创建另外一张表 LOG_TEST,将分析结果存入该表
      9. 关闭日志分析
      10. 查看分析结果(见截图)
    实验代码:
     1 第一步:
     2 SQL> alter database add supplemental log data;
     3 
     4 Database altered.
     5 
     6 SQL> select supplemental_log_data_min from v$database;
     7 
     8 SUPPLEMENTAL_LOG
     9 ----------------
    10 YES
    11 第二步:
    12 SQL> create table testlog as select * from scott.emp;
    13 
    14 Table created.
    15 第三步:
    16 SQL> update testlog set sal=10000 where ename='KING';
    17 
    18 1 row updated.
    19 
    20 SQL> commit;
    21 
    22 Commit complete.
    23 
    24 SQL> delete from testlog;
    25 
    26 14 rows deleted.
    27 
    28 SQL> commit;
    29 
    30 Commit complete.
    31 第四步:
    32 SQL> select a.group#,a.sequence#,a.status,b.member,a.archived from v$log a,v$logfile b where a.group#=b.group#;
    33 
    34     GROUP#  SEQUENCE# STATUS          MEMBER                         ARCHIV
    35 ---------- ---------- --------------- -------------------------------------------------- ------
    36      1       63 INACTIVE          /u01/app/oracle/oradata/OCP12C/redo01a.log     YES
    37      1       63 INACTIVE          /u01/app/oracle/oradata/OCP12C/redo01b.log     YES
    38      2       64 CURRENT          /u01/app/oracle/oradata/OCP12C/redo02a.log     NO
    39      2       64 CURRENT          /u01/app/oracle/oradata/OCP12C/redo02b.log     NO
    40      3       62 INACTIVE          /u01/app/oracle/oradata/OCP12C/redo03a.log     YES
    41      3       62 INACTIVE          /u01/app/oracle/oradata/OCP12C/redo03b.log     YES
    42 
    43 6 rows selected.
    44 第五步:
    45 SQL> alter system archive log current;
    46 
    47 System altered.
    48 SQL> select a.group#,a.sequence#,a.status,b.member,a.archived from v$log a,v$logfile b where a.group#=b.group#;
    49 
    50     GROUP#  SEQUENCE# STATUS          MEMBER                         ARCHIV
    51 ---------- ---------- --------------- -------------------------------------------------- ------
    52      1       63 INACTIVE          /u01/app/oracle/oradata/OCP12C/redo01a.log     YES
    53      1       63 INACTIVE          /u01/app/oracle/oradata/OCP12C/redo01b.log     YES
    54      2       64 ACTIVE          /u01/app/oracle/oradata/OCP12C/redo02a.log     YES
    55      2       64 ACTIVE          /u01/app/oracle/oradata/OCP12C/redo02b.log     YES
    56      3       65 CURRENT          /u01/app/oracle/oradata/OCP12C/redo03a.log     NO
    57      3       65 CURRENT          /u01/app/oracle/oradata/OCP12C/redo03b.log     NO
    58 
    59 6 rows selected.
    60 第六步:
    61 SQL> execute dbms_logmnr.add_logfile(logfilename=>'/u01/app/oracle/arch/1_64_1056413938.dbf',options=>dbms_logmnr.new);
    62 
    63 PL/SQL procedure successfully completed.
    64 第七步:
    65 SQL> execute dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);
    66 
    67 PL/SQL procedure successfully completed.
    68 第八步:
    69 SQL> create table log_test as select * from v$logmnr_contents;
    70 
    71 Table created.
    72 第九步:
    73 SQL> execute dbms_logmnr.end_logmnr;
    74 
    75 PL/SQL procedure successfully completed.
    76 第十步:
    77 SQL>select username,
    78        scn,
    79        to_char(timestamp, 'yyyy-mm-dd hh24:mi:ss') timestamp,
    80        sql_redo,
    81        sql_undo
    82   from log_test
    83  where seg_name = 'TESTLOG';
    View Code

     

  • 相关阅读:
    November 07th, 2017 Week 45th Tuesday
    November 06th, 2017 Week 45th Monday
    November 05th, 2017 Week 45th Sunday
    November 04th, 2017 Week 44th Saturday
    November 03rd, 2017 Week 44th Friday
    Asp.net core 学习笔记 ( Area and Feature folder structure 文件结构 )
    图片方向 image orientation Exif
    Asp.net core 学习笔记 ( Router 路由 )
    Asp.net core 学习笔记 ( Configuration 配置 )
    qrcode render 二维码扫描读取
  • 原文地址:https://www.cnblogs.com/eniniemand/p/14128282.html
Copyright © 2011-2022 走看看