自Oracle 11g起,无需设置UTL_FILE_DIR就可以使用LOGMNR对本地数据库的日志进行分析,以下是使用LOGMNR的DICT_FROM_ONLINE_CATALOG分析REDO和归档日志的步骤
分析REDO日志的实验
- 创建测试表,并做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.
- 查看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
- 添加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.
- 添加其他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.
- 开始对添加的REDO进行分析
SQL> exec dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);
PL/SQL procedure successfully completed.
- 查看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断开连接后需重新执行,否则会报以下错误提示。
ORA-01306: dbms_logmnr.start_logmnr() must be invoked before selecting from v$logmnr_contents
- 结束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
如果数据据库开启闪回恢复区,闪回恢复区就是默认的归档地址,我个人建议使用这个空间存放归档日志,因为从Oracle 11g
开始当该空间的使用率达到80%的时候,系统会自动删除已经备份过的归档文件,避免被撑爆。闪回恢复区的大小受db_recovery_file_dest_size
大小的限制,是一个动态参数,可以随时在线修改。
本实验步骤如下:
- 切换日志,使REDO日志归档。
SQL> alter system switch logfile;
System altered.
SQL> /
System altered.
SQL> /
System altered.
- 按照归档日志的时间,找到存放需要分析信息的归档日志。
[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
- 将归档日志添加到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.
- 开始分析。
SQL> exec dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);
PL/SQL procedure successfully completed.
- 查看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.
- 结束LOGMNR操作。
SQL> exec dbms_logmnr.end_logmnr;
PL/SQL procedure successfully completed.
Oracle 11g的Redo Log和Archive Log的分析方法的更多相关文章
-
LOGMNR分析redo log和archive log教程
自Oracle 11g起,无需设置UTL_FILE_DIR就可以使用LOGMNR对本地数据库的日志进行分析,以下是使用LOGMNR的DICT_FROM_ONLINE_CATALOG分析REDO和归档日 ...
-
Oracle 11g用exp无法导出空表的处理方法
Oracle 11G在用EXPORT导出时,空表不能导出. 11G中有个新特性,当表无数据时,不分配segment,以节省空间 解决方法: 1.insert一行,再rollback就产生segment ...
-
Oracle 11G R2 用exp无法导出空表解决方法
四. Oracle 10g以后增加了expdp和impdp工具,用此工具也可以导出空的表 oracleexpdp/impdp 用法详解 1) 创建逻辑目录,该命令不会在操作系统创建真正的目录,最好 ...
-
oracle 11g 从 dmp 文件中导出 sql 代码 的方法.
impdp sys/password full=y dumpfile=bg.dmp nologfile=y sqlfile=bg_dmp.sql 备注: bg.dmp 是 dmp 文件, bg_d ...
-
[置顶] Oracle 11g R2 ASM:了解 Oracle ASM 基本概念
About Oracle ASM Instances About Oracle ASM Disk Groups About Mirroring and Failure Groups About Ora ...
-
oracle 11g 数据库恢复技术 ---04 rman
四 RMAN RMAN体系结构的主要组成部分: --1 目标数据库(target) --2 RMAN命令行客户端 --3 通道(channel) --4 快速恢复区(fast recovery are ...
-
oracle 11g 64位安装sqldeveloper打开不了
oracle 11g 64位安装sqldeveloper打开不了解决方法: 1.到官网下载对应版本的sqldeveloper. 2.找对应安装路径下的F:\app\Administrator\prod ...
-
oracle 11g log archive mode flashback
修改需要在mount状态下 shutdown immediate; startup mount; alter database archivelog; alter database flashback ...
-
Oracle Dataguard Standby Redo Log的两个实验
在Data Guard环境中,Standby Redo Log是一个比较特殊的日志类型.从最新的DG安装指导中,都推荐在Primary和Standby端,都配置Standby Redo Log. 简单 ...
随机推荐
-
iOS 传值方式
1.代理传值 2.AppDelegate传值 3.block传值 4.通知传值 5.NSUserDefault传值
-
sscanf 函数 分类: POJ 2015-08-04 09:19 4人阅读 评论(0) 收藏
sscanf 其实很强大 分类: 纯C技术 技术笔记 2010-03-05 16:00 12133人阅读 评论(4) 收藏 举报 正则表达式stringbuffercurlgoogle 最近在做日志分 ...
-
Codeforces 1083C Max Mex
Description 一棵\(N\)个节点的树, 每个节点上都有 互不相同的 \([0, ~N-1]\) 的数. 定义一条路径上的数的集合为 \(S\), 求一条路径使得 \(Mex(S)\) 最大 ...
-
通过脚本调用MSBuild编译项目时指定Configuration(解決方案配置)和Platform(解決方案平台),Rebuid(重新生成解决方案),Clean(清理解决方案)
为了方便打包测试,自己PowerShell写了一个编译和发布的脚本,调用msbuild通过命令行来编译当前解决方案 后来发现一个问题,用VS编译解决方案,我通过 项目属性-Build设置 Releas ...
-
Git入门到高级系列1-git安装与基础命令
视频课程地址 腾讯课堂 为什么要进行项目文件的版本管理 代码备份和恢复 团队开发和协作流程 项目分支管理和备份 git 是什么? git是一个分布式的版本控制软件.版本控制是一种记录一个或若干文件内容 ...
-
word2vec 评测 sg=0 sg=1 size=100 window=3
1.评价sg=0与sg=1的区别 结果原文:sg_difference.txt sg=0 sg=1 绑定 1 关联 ...
-
windows2012R2标准版升级到数据中心版,不用重装系统
windows2012R2标准版升级到数据中心版,不用重装系统 Windows Server 2012 R2是微软的服务器系统,是 Windows Server 2012 的升级版本. Windows ...
-
POJ 2392 Space Elevator(多重背包变形)
Q: 额外添加了最大高度限制, 需要根据 alt 对数据进行预处理么? A: 是的, 需要根据 alt 对数组排序 Description The cows are going to space! T ...
-
SQL:select case when 的用法
CASE 可能是 SQL 中被误用最多的关键字之一.虽然你可能以前用过这个关键字来创建字段,但是它还具有更多用法.例如,你可以在 WHERE 子句中使用 CASE. 首先让我们看一下 CASE 的语法 ...
-
docker下的Jenkins安装和体验【转】
原文地址:http://blog.csdn.net/boling_cavalry/article/details/78942408 作为一款优秀的持续集成工具,jenkins在日常的项目中经常会用到, ...