• 体系结构之日志挖掘


    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

     

  • 相关阅读:
    js 类对象
    图片自动轮播及点击图标切换图片
    js 常用方法
    js-案例 国家-省市-区域之间的三级联动
    JS 基础知识之传智播客2
    JS 基础知识之传智播客1
    div居中
    formatDate 格式化日期 ,给小于10的月日,加0,如01 02 03
    Radiobutton改成文字样式
    如何在Android平台下进行Socket通信
  • 原文地址:https://www.cnblogs.com/eniniemand/p/14128282.html
Copyright © 2020-2023  润新知