自Oracle 11g起,无需设置UTL_FILE_DIR就可以使用LOGMNR对本地数据库的日志进行分析,以下是使用LOGMNR的DICT_FROM_ONLINE_CATALOG分析REDO和归档日志的步骤,供大家参考学习: 一、分析REDO日志的实验 1.创建测试表,并做DML操作。 SQL create table t_test
自Oracle 11g起,无需设置UTL_FILE_DIR就可以使用LOGMNR对本地数据库的日志进行分析,以下是使用LOGMNR的DICT_FROM_ONLINE_CATALOG分析REDO和归档日志的步骤,供大家参考学习:

一、分析REDO日志的实验

1.创建测试表,并做DML操作。

SQL> create table t_test(id number,name varchar2(15));
Table created.
  
SQL> insert into t_test values(1,'stream');
1 row created.
  
SQL> insert into t_test values(2,'dbdream');
1 row created.
  
SQL> commit;
Commit complete.
  
SQL> update t_test set name='streamsong' where id=1;
1 row updated.
  
SQL> commit;
Commit complete.
  
SQL> delete from t_test;
2 rows deleted.
  
SQL> commit;
Commit complete.

2.查看REDO日志的路径。

SQL> select member from v$logfile;
  
MEMBER
------------------------------------------------
/u01/app/oracle/oradata/stream/STREAM/redo03.log
/u01/app/oracle/oradata/stream/STREAM/redo02.log
/u01/app/oracle/oradata/stream/STREAM/redo01.log

3.添加REDO日志

第一个添加的日志需指定NEW,如果确定要查询的信息在指定的REDO日志内,可以只添加那个REDO日志,而不需要再添加其他

SQL> exec dbms_logmnr.add_logfile(logfilename=>'
/u01/app/oracle/oradata/stream/STREAM/redo01.log',
options=>dbms_logmnr.new);
  
PL/SQL procedure successfully completed.
4.添加其他REDO日志

不是第一个添加的日志需指定ADDFILE。

SQL> exec dbms_logmnr.add_logfile(logfilename=>'
/u01/app/oracle/oradata/stream/STREAM/redo02.log',
options=>dbms_logmnr.addfile);
  
PL/SQL procedure successfully completed.
  
SQL> exec dbms_logmnr.add_logfile(logfilename=>'
/u01/app/oracle/oradata/stream/STREAM/redo03.log',
options=>dbms_logmnr.addfile);
  
PL/SQL procedure successfully completed.
5.开始对添加的REDO进行分析

SQL> exec dbms_logmnr.start_logmnr(options=>
dbms_logmnr.dict_from_online_catalog);
  
PL/SQL procedure successfully completed.

6.查看LOGMNR分析后得到的信息

LOGMNR分析后的数据会存放在v$logmnr_contents视图中,通过查询v$logmnr_contents视图就可以查询到REDO日志的信息。

SQL> select timestamp,sql_redo,sql_undo from v$logmnr_contents where username='SCOTT'and table_name='T_TEST';
  
TIMESTAMP  SQL_REDO
  
---------  -----------------------------------------------------------
  
21-MAR-12  create table t_test(id number,name varchar2(15));
  
21-MAR-12  insert into "SCOTT"."T_TEST"("ID","NAME") values ('1','stream');
  
21-MAR-12  insert into "SCOTT"."T_TEST"("ID","NAME") values ('2','dbdream');
  
21-MAR-12  update "SCOTT"."T_TEST" set "NAME" = 'streamsong' where "NAME" =
  
           'stream' and ROWID = 'AAAR7fAAEAAAADXAAA';
  
21-MAR-12  delete from "SCOTT"."T_TEST" where "ID" = '1' and "NAME" =
  
           'streamsong' and ROWID = 'AAAR7fAAEAAAADXAAA';
  
21-MAR-12  delete from "SCOTT"."T_TEST" where "ID" = '2' and "NAME" =
  
           'dbdream' and ROWID = 'AAAR7fAAEAAAADXAAB';
SQL_REDO就是执行的SQL语句,SQL_UNDO是回滚操作的SQL语句,也就是执行SQL_UNDO的相关SQL,就可以回滚对应的操作。

注:LOGMNR是SESSION级的,以上实验第3步到第6步需在同一个SESSION中进行,SESSION断开连接后需重新执行,否则会报以下错误提示。

SQL> select count(*) from v$logmnr_contents;
select count(*) from v$logmnr_contents
                     *
ERROR at line 1:
ORA-01306: dbms_logmnr.start_logmnr() must be invoked before selecting from
v$logmnr_contents
7.结束LOGMNR操作

由于LOGMNR是会话级的,可以用直接退出或关闭当前的终端的方式来结束LOGMNR的操作,当然,正确的结束LOGMNR操作需使用下面的命令。

SQL> exec dbms_logmnr.end_logmnr;
  
PL/SQL procedure successfully completed.
二、分析归档日志的实验

分析归档日志的操作和分析REDO的操作基本一样,最重要的就是准确的找到需要查找的信息在哪些归档日志内。既然是利用LOGMNR分析归档日志,数据库一定是在归档模式,要不哪来的归档日志,可以通过如下命令查看数据库是否启用归档模式。

SQL> archive log list
  
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     15
Next log sequence to archive   17
Current log sequence           17
可以看到当前数据库已经开启归档模式,归档地址是USE_DB_RECOVERY_FILE_DEST,USE_DB_RECOVERY_FILE_DEST的具体位置可以通过下面的命令查看。

SQL> show parameter db_recove
  
NAME                        TYPE        VALUE
  
--------------------------- ----------- -------------------------------
db_recovery_file_dest       string      /u01/app/oracle/flash_recovery_area
db_recovery_file_dest_size  big integer 3852M
如果数据据库开启闪回恢复区,闪回恢复区就是默认的归档地址,也是RMAN备份文件的默认存放地址,如果数据库开启闪回特性,这也是存放闪回日志的默认地址。强烈建议手动修改归档日志的存放地址,闪回恢复区的大小受db_recovery_file_dest_size大小的限制,已经遇到好多客户的数据库由于没有指定归档日志的路径,闪回恢复区满导致REDO日志无法归档,导致数据库挂起的情况。如何更改归档日志的路径,请参照《Oracle系统归档模式管理》

本实验步骤如下:

1.切换日志,使REDO日志归档。

SQL> alter system switch logfile;
System altered.
  
SQL> /
System altered.
  
SQL> /
System altered.
2.按照归档日志的时间,找到存放需要分析信息的归档日志。

[oracle@stream 2012_03_21]$ pwd
/u01/app/oracle/flash_recovery_area/STREAM/archivelog/2012_03_21
  
[oracle@stream 2012_03_21]$ ll
total 32196
-rw-r----- 1 oracle oinstall 26598912 Mar 21 10:55 o1_mf_1_12_7pljs9lb_.arc
-rw-r----- 1 oracle oinstall  6206976 Mar 21 14:05 o1_mf_1_13_7plvx3bc_.arc
-rw-r----- 1 oracle oinstall   100864 Mar 21 14:07 o1_mf_1_14_7plw0bgo_.arc
-rw-r----- 1 oracle oinstall     1024 Mar 21 14:07 o1_mf_1_15_7plw0d0q_.arc
-rw-r----- 1 oracle oinstall     2048 Mar 21 14:07 o1_mf_1_16_7plw0gc1_.arc
3.将归档日志添加到LOGMNR。

SQL> exec dbms_logmnr.add_logfile(logfilename=>
'/u01/app/oracle/flash_recovery_area/STREAM/archivelog/
2012_03_21/o1_mf_1_13_7plvx3bc_.arc',options=>dbms_logmnr.new);
  
PL/SQL procedure successfully completed.
  
SQL> exec dbms_logmnr.add_logfile(logfilename=>
'/u01/app/oracle/flash_recovery_area/STREAM/archivelog/
2012_03_21/o1_mf_1_14_7plw0bgo_.arc',options=>dbms_logmnr.addfile);
  
PL/SQL procedure successfully completed.

4.开始分析。

SQL> exec dbms_logmnr.start_logmnr(options=>
dbms_logmnr.dict_from_online_catalog);
  
PL/SQL procedure successfully completed.
5.查看LOGMNR分析后的数据。

SQL> select timestamp,sql_redo from v$logmnr_contents where username='SCOTT' and table_name='T_TEST';
  
TIMESTAMP   SQL_REDO
  
---------   -----------------------------------------------------------------
  
21-MAR-12   create table t_test(id number,name varchar2(15));
  
21-MAR-12   insert into "SCOTT"."T_TEST"("ID","NAME") values ('1','stream');
  
21-MAR-12   insert into "SCOTT"."T_TEST"("ID","NAME") values ('2','dbdream');
  
21-MAR-12   update "SCOTT"."T_TEST" set "NAME" = 'streamsong' where "NAME" =
  
 'stream' and ROWID = 'AAAR7fAAEAAAADXAAA';
  
21-MAR-12   delete from "SCOTT"."T_TEST" where "ID" = '1' and "NAME" =
  
'streamsong' and ROWID = 'AAAR7fAAEAAAADXAAA';
  
21-MAR-12    delete from "SCOTT"."T_TEST" where "ID" = '2' and "NAME" =
  
'dbdream' and ROWID = 'AAAR7fAAEAAAADXAAB';
  
6 rows selected.
6.结束LOGMNR操作。

SQL> exec dbms_logmnr.end_logmnr;
  
PL/SQL procedure successfully completed.
我要分享该文章 0这篇文章很赞
本文链接:http://www.askoracle.org/oracle/ORA-errors/902.html | Ask Oracle社区

LOGMNR分析redo log和archive log教程的更多相关文章

  1. Oracle 11g的Redo Log和Archive Log的分析方法

    自Oracle 11g起,无需设置UTL_FILE_DIR就可以使用LOGMNR对本地数据库的日志进行分析,以下是使用LOGMNR的DICT_FROM_ONLINE_CATALOG分析REDO和归档日 ...

  2. 详细分析MySQL事务日志(redo log和undo log) 表明了为何mysql不会丢数据

    innodb事务日志包括redo log和undo log.redo log是重做日志,提供前滚操作,undo log是回滚日志,提供回滚操作. undo log不是redo log的逆向过程,其实它 ...

  3. Oracle logminer 分析redo log(TOAD与PLSQL)

    Oracle logminer 分析redo log Oracle 11g r2 RAC centos 6.5 设置时间格式 select to_char(sysdate,'yyyy-mm-dd hh ...

  4. DBA_Oracle日志文件 - altert / trace /audit / redo / archive log(概念)

    2014-07-26 Created By BaoXinjian

  5. 详细分析MySQL事务日志(redo log和undo log)

    innodb事务日志包括redo log和undo log.redo log是重做日志,提供前滚操作,undo log是回滚日志,提供回滚操作. undo log不是redo log的逆向过程,其实它 ...

  6. DBA_Oracle Archive Log的基本应用和启用(概念)

    2014-11-15 Created By BaoXinjian

  7. alter system [switch logfile]与[archive log current]的区别

    --alter system [switch logfile]与[archive log current]的区别 ------------------------------------------- ...

  8. bin log、redo log、undo log和MVVC

    logs innodb事务日志包括redo log和undo log.redo log是重做日志,提供前滚操作,undo log是回滚日志,提供回滚操作. undo log不是redo log的逆向过 ...

  9. InnoDB事务日志(redo log 和 undo log)详解

    数据库通常借助日志来实现事务,常见的有undo log.redo log,undo/redo log都能保证事务特性,undolog实现事务原子性,redolog实现事务的持久性. 为了最大程度避免数 ...

随机推荐

  1. 《javascript设计模式》笔记之第七章:工厂模式

    在读了这章之后,根据我个人现在的理解,工厂模式就是:将一个类或者一个方法称为一个工厂,然后再将一些模块交给这个工厂,让这个工厂按照给它的不同模块产出不同的实例. 下面为正文: 一:简单工厂: 例子: ...

  2. JsonConvert对象实现json与对象之间的转换

    自己下载Newtonsoft.Json文件 使用JsonConvert对象转换 1. 2.添加引用到项目中,然后导入命名空间 3.就可以使用JsonConvert对象实现Json与类型之间的转换

  3. get和post请求及进程和线程及cookie和session的区别

    get和post请求及进程和线程及cookie和session的区别 1.get和post请求的区别 get请求是指向服务器进行获取查询数据的请求,post请求指向服务器提交数据的请求. get请求如 ...

  4. 【春节版】年度精品 XP,32/64位Win7,32/64位Win8,32/64位Win10系统

    本系统是10月5日最新完整版本的Windows10 安装版镜像,win10正式版,更新了重要补丁,提升应用加载速度,微软和百度今天宣布达成合作,百度成为win10 Edge浏览器中国默认主页和搜索引擎 ...

  5. dlopen与dlsym用法

    dlopen和dlsym是用于打开动态链接库中的函数,将动态链接库中的函数或类导入到本程序中: dlopen函数: 功能:打开一个动态链接库 包含头文件: #include <dlfcn.h&g ...

  6. (六)mybatis之构建SqlSessionFactory

    构建SqlSessionFactory 每个mybatis应用都是以SqlSessionFactory的实例为中心的.SqlSessionFactory的实例可以通过SqlSessionFactory ...

  7. Python 目录和文件基本操作

    今天在写一个小工具的过程中发现对目录和文件的基本操作不是很熟,特此把遇到的常用操作总结汇总下. 获取当前路径:os.getcwd() 目录操作:1.创建目录:os.mkdir('目录名')2.创建多级 ...

  8. Data truncation: Data too long for column 'id' at row 1

    Caused by: java.sql.BatchUpdateException: Data truncation: Data too long for column 'titleimg' at ro ...

  9. Vue+webpack+echarts+jQuery=demo

    需要的插件: "dependencies": { "bootstrap": "^3.3.7", "echarts": & ...

  10. CAD交互绘制块引用对象(网页版)

    主要用到函数说明: _DMxDrawX::DrawBlockReference 绘制块引用对象.详细说明如下: 参数 说明 DOUBLE dPosX 插入点的X坐标 DOUBLE dPosY 插入点的 ...