说到闪回日志,我们都知道闪回日志中记录的都是逆操作,那么就有两个问题需要解释了。

闪回日志和回滚段保存的数据有什么差别?

如果做了truncate操作,闪回日志是怎么记录的,怎么能够通过闪回恢复数据。

第一个问题是一个同学问的,第二个问题是我偶然想起来的,当然这两个问题还是蛮有意思。我们的目标就是解释清楚下面的两个问题。

当然要深刻理解这个问题,一个重要的部分就是得先明白redo的基本情况。

借用大师Jonathan Lewis的话说,Oracle里面最重要的特性是在V6提出的改变向量,改变向量是描述数据块变化的机制,是redo和undo的关键内容。

说实在话要深入解析,非常透彻的理解这部分内容得花很多的时间,冰冻三尺绝非一日之寒,有一种较为快速的理解redo的基本流程,有两种简单的途径,一种是通过dump logfile来得到,另外一种就是解析日志文件来得到。明白了redo里面的一些变化,再回过头来看看闪回的部分,就会理解顺畅许多。

闪回日志的部分和redo的部分相比有一些相似之处。redo的机制中有的,闪回的部分也有相应的处理方式。


dump logfile其实输出还是比较枯燥,晦涩难懂的,另外一种较为清晰的方式就是logminer了。

为了让Logminer的日志处理信息更全面,还是建议打开supplemental log,这个在OGG中也有如出一辙的设置。

当然解析工作这么繁琐,我们想更加自如一些,那就和shell脚本联系起来。

脚本1:

sqlplus -s / as sysdba <<EOF
execute dbms_logmnr.add_logfile(logfilename=>'$1',options=>dbms_logmnr.new);
execute dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
col xid_scn format a30
col username format a10
col timestamp format a20
col sql_redo format a35
col sql_undo format a35
set pages 1500
set linesize 200
select username,xid||':'||scn xid_scn,timestamp,sql_redo,sql_undo from v\$logmnr_contents where  sql_redo not like '%AUD$%';
execute dbms_logmnr.end_logmnr;
EOF

使用如上的脚本,输入对应的redo日志就会解析出里面的内容来。

要得到当前的日志信息也很容易,写个脚本,写个SQL分分钟搞定。

脚本2:

sqlplus -s / as sysdba <<EOF
set linesize 150
col member format a50
select l.sequence#,l.status ,l.bytes/1024/1024 size_MB,f.member from v\$log l ,v\$logfile f  where l.group#=f.group#;
EOF

脚本1中直接调用即可,比如

sh showlog.sh /U01/app/oracle/oradata/newtest2/redo02.log我们使用如下的方式来做一个简单的测试。创建一个表,插入1行数据。

SQL> create table test_log (id number,name varchar2(30));
Table created.
SQL> insert into test_log values(100,'aaa');
1 row created.
SQL> commit;
Commit complete.

通过这种方式可以很容易读到一些关键的日志信息。


最开始的几个步骤可以很明显看到deferred_segment_creation的痕迹,


然后可以看到在基表中插入了元数据信息,基本是按照seg$,tab$,seg$的方式插入数据的。


通过上面的步骤可以看到,最后的insert,对应的undo_sql会基于ROWID来做一个反向的操作,即删除1条记录。

在这个基础上去解析闪回日志,就有了一些基本的思路。

查看闪回日志的信息可以使用SQL

select * from v$flashback_database_logfile;

解析闪回日志可以采用如下的方式:

alter system dump flashback logfile '/U01/app/oracle/fast_recovery_area/NEWTEST2/flashback/o1_mf_d2tp6v82_.flb' ;

或者基于对应的dba的方式,也就是数据块地址

alter system dump flashback logfile '/U01/app/oracle/fast_recovery_area/NEWTEST2/flashback/o1_mf_d2tp6v82_.flb'   dba 8 594285;

当然解读闪回日志发现比自己想得还要曲折一些,因为Logminer还解析不了闪回日志,想更细节的解析还是要花一些功夫,所以上面的两个问题还需要不断的深入理解才可以回答清楚。

个人公众号如下,欢迎扫码关注。

Oracle闪回原理-Logminer解读redo(r11笔记第17天)相关推荐

  1. Oracle闪回恢复区(fast recovery area,FRA)

    Oracle闪回恢复区(fast recovery area,FRA) 闪回恢复区(Fast Recovery Area,FRA)是一块可选的磁盘位置,可以用来存储与恢复相关的文件,例如控制文件和联机 ...

  2. 6. Oracle闪回特性

    Oracle 闪回 (flashback)是9i版本提供的新特性.这一特性:其他数据库(PostgreSQL,Mysql)是羡慕不已.对数据恢复提供非常便捷的方式.闪回技术通常用于快速简单恢复数据库中 ...

  3. oracle11g创建闪回分区多大,Oracle闪回区大小预估

    一个朋友问如何设置Oracle闪回区大小,有什么依据没有. 查证官方文档,有如下描述 For example, if you intend to setDB_FLASHBACK_RETENTION_T ...

  4. oracle闪回ddl,Oracle闪回详解

    Oracle 9i 开始支持闪回,Oracle10g开始全面支持闪回功能,Oracle11g有所完善,为大家快速的恢复数据,查询历史数据提供了很大的便捷方法. 本文主要对Oracle常用闪回使用做些详 ...

  5. Oracle 闪回技术详解

    概述 闪回技术是Oracle强大数据库备份恢复机制的一部分,在10g的时候就被推出一直延续到现在.在数据库发生逻辑错误的时候,闪回技术能提供快速且最小损失的恢复(多数闪回功能都能在数据库联机状态下完成 ...

  6. oracle闪回数据库详解

    --- 说明闪回数据库 --- 使用闪回表将表内容还原到过去的特定时间点 --- 从删除表中进行恢复 --- 使用闪回查询查看截止到任一时间点的数据库内容 --- 使用闪回版本查询查看某一行在一段时间 ...

  7. oracle 闪回表定义,oracle闪回表详解

    --- 说明闪回数据库 --- 使用闪回表将表内容还原到过去的特定时间点 --- 从删除表中进行恢复 --- 使用闪回查询查看截止到任一时间点的数据库内容 --- 使用闪回版本查询查看某一行在一段时间 ...

  8. oracle闪回区和归档的关系,闪回与归档参数的设置

    Oracle闪回技术提供了一组功能用来查看数据的过去状态并且支持数据按时间返回到之前的状态不用对数据库从备份中执行大量的还原操作或者执行按时间点恢复.在大部分情况下闪回功能非常有效破坏性比介质恢复小. ...

  9. Oracle 闪回特性 详解

    Oracle的闪回技术提供了一组功能,可以访问过去某一时间的数据并从人为错误中恢复.闪回技术是Oracle 数据库独有的,支持任何级别的恢复,包括行.事务.表和数据库范围.使用闪回特性,您可以查询以前 ...

最新文章

  1. 一文详解手眼标定之九点法
  2. Windows Server 2012 R2 WSUS-11:经典的客户端排错操作
  3. vagrant up报错 Warning: Authentication failure. Retrying...解决方案
  4. [课程设计]Scrum 2.5 多鱼点餐系统开发进度(下单一览页面-菜式添加框架设计)
  5. [Webapp]国内移动端浏览器占比
  6. 10个理由告诉你为何要学Java编程?
  7. perl6 HTTP::UserAgent (2)
  8. 电商系统_如何打造 一个完美的电商系统
  9. wait 和 sleep 区别
  10. 【SICP归纳】2 高阶函数和数据抽象
  11. 能力提升综合题单 Part 8.8 二分图
  12. java 水仙花数问题(java50道经典编程题)
  13. 网络重置有多难搞!!win10网络重置后怎么解决
  14. 四大经典大数据应用案例解析
  15. Freemarker word导出教程
  16. [AE 表达式]路径跟随动画
  17. [网络安全学习篇64]:业务安全
  18. 编写程序,生成一种贯穿10×10字符数组(初始时全为字符‘.‘)的“随机步法”。
  19. vue+element树形控件实现根据条件(例id)禁用选项
  20. Java打开jnlp

热门文章

  1. 金融贷款逾期的模型构建3——模型评估
  2. Linux——进程间通信(总结)
  3. mysql5.7.14安装版教程_MySQL5.7.14下载安装图文教程及MySQL数据库语句入门大全
  4. 图神经网络代码_第一篇:图神经网络(GNN)计算框架绪论
  5. 神策数据:游戏买量与长线运营的数据宝典
  6. 神策数据王磊:如何用 JS 实现页面录制与回放
  7. 免费的源代码编辑器Notepad++ 7.6.2 发布
  8. 通过 netty 实现异步任务回调获取执行结果
  9. 教你如何阅读Oracle数据库官方文档
  10. openstack domain serverID connect uri