zoukankan      html  css  js  c++  java
  • logminer(基于redo log来存储数据字典)-归档日志+安装部署

    环境:

    OS:Centos 7

    DB:2节点RAC 11.2.0.4

     

     

    logmnr 可以用来分析redo 日志和归档文件。将redo日志或者归档文件中的内容提取出来,供DBA进行操作分析历史操作,
    比如进行误删除操作的恢复。 LOGMNR 分析日志,需要创建一个数据字典,这个数据字典可以存储在外部文件(external file) 或者redo log 中。 如果要存储在外部文件中,数据库参数utl_file_dir 需要配置,并重启数据库。
    有些时候,我们的生产系统不能重启,因此只能选用redo log来存储数据字典,下面的例子是基于redo log来存储数据字典的方法的:

    1.redo log 存储数据字典
    使用redo log 存储数据字典不需要重启数据库,也不需要配置任何参数,这种方式比较灵活.直接可以创建数据字典到redo文件

    declare
    begin
    dbms_logmnr_d.build(options => dbms_logmnr_d.STORE_IN_REDO_LOGS);
    end;
    
    SQL> execute dbms_logmnr_d.build(options => dbms_logmnr_d.STORE_IN_REDO_LOGS);
    BEGIN dbms_logmnr_d.build(options => dbms_logmnr_d.STORE_IN_REDO_LOGS); END;
    
    *
    ERROR at line 1:
    ORA-01354: Supplemental log data must be added to run this command
    ORA-06512: at "SYS.DBMS_LOGMNR_INTERNAL", line 6110
    ORA-06512: at "SYS.DBMS_LOGMNR_INTERNAL", line 6208
    ORA-06512: at "SYS.DBMS_LOGMNR_D", line 12
    ORA-06512: at line 1

     



    解决办法:
    需要开启附加日志
    alter database add supplemental log data;

    2.添加需要分析的文件

    declare
    begin
    dbms_logmnr.add_logfile('+DATA/slnngk/archivelog/2021_10_09/thread_1_seq_101.443.1085454503',dbms_logmnr.new);
    end;
    
    declare
    begin
    dbms_logmnr.add_logfile('+DATA/slnngk/archivelog/2021_10_09/thread_1_seq_102.444.1085454505',dbms_logmnr.addfile);
    end;

     



    报错误:
    SQL> execute dbms_logmnr.ADDFILE('+DATA/slnngk/archivelog/2021_10_08/thread_1_seq_88.424.1085435681',dbms_logmnr.new);
    BEGIN dbms_logmnr.ADDFILE('+DATA/slnngk/archivelog/2021_10_08/thread_1_seq_88.424.1085435681',dbms_logmnr.new); END;

          *
    ERROR at line 1:
    ORA-06550: line 1, column 7:
    PLS-00221: 'ADDFILE' is not a procedure or is undefined
    ORA-06550: line 1, column 7:
    PL/SQL: Statement ignored

    解决办法,安装相应的包(在其中一个节点上执行,我这里是在节点1上执行):
    SQL>@$ORACLE_HOME/rdbms/admin/dbmslm.sql
    SQL>@$ORACLE_HOME/rdbms/admin/dbmslmd.sql

    函数说明
    dbms_logmnr.new       在数据字典中添加第一个需要分析的文件
    dbms_logmnr.addfile 在数据字典中添加其他需要分析的文件

    4.开始分析文件
    我们使用不同的方式存储数据字典,让oracle开始分析文件的命令参数不一样。
    如果是外部文件方式存储数据字典,是不需要使用任何参数的,如果使用的是redo日志文件,
    需要明确告知Oracle 数据字典存储在redo文件中.

    declare
    begin
    dbms_logmnr.start_logmnr(options => dbms_logmnr.dict_from_online_catalog+dbms_logmnr.committed_data_only);
    end;

     

    不使用options,可以分析其他库的日志

    declare
    begin
    dbms_logmnr.start_logmnr();
    end;

     

    否则报如下的错误

     



    5.开始分析内容
    经过上一步分析后,日志中的内容,可以在视图v$logmnr_contents中查询到.

    select * from v$logmnr_contents where sql_redo like '%drop%'

     



    6.结束日志分析

    declare
    begin
    dbms_logmnr.end_logmnr;
    end;

     

    logmnr 挖掘日志,是会话级别的操作。分析数据不在数据库级别共享

    也可以分析其他库的日志

    1.使用redo_log作为数据字典
    declare
    begin
    dbms_logmnr_d.build(options => dbms_logmnr_d.STORE_IN_REDO_LOGS);
    end;
    
    2.添加其他的库的日志
    declare
    begin
    dbms_logmnr.add_logfile('/tmp/redo03.log',dbms_logmnr.new); ##其他库的日志文件
    end;
    
    3.分析
    declare
    begin
    dbms_logmnr.start_logmnr(options => 0);
    end;
    
    4.查看分析日志
    select sql_redo from v$logmnr_contents 
    where lower(sql_redo) like '%tb_test%' or lower(sql_redo) like '%200454%';
    只能获取到可识别的ddl语句,dml语句因为没有映射关系,分析结果不可读
    
    5.结束分析
    declare
    begin
    dbms_logmnr.end_logmnr;
    end;
  • 相关阅读:
    js弹出DIV层
    .net 生成静态页面
    新开博客
    随机生成验证码
    ASP.NET错误处理方法总结
    webgis
    看樱花
    今天转载的笑话,挺好笑呵
    用Tomcat插件在Eclipse上搭建可跟踪调试的J2EE WEB开发环境
    关于JSTL的简单说明
  • 原文地址:https://www.cnblogs.com/hxlasky/p/15385985.html
Copyright © 2011-2022 走看看