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

简介: 说到闪回日志,我们都知道闪回日志中记录的都是逆操作,那么就有两个问题需要解释了。 闪回日志和回滚段保存的数据有什么差别? 如果做了truncate操作,闪回日志是怎么记录的,怎么能够通过闪回恢复数据。

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

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

如果做了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还解析不了闪回日志,想更细节的解析还是要花一些功夫,所以上面的两个问题还需要不断的深入理解才可以回答清楚。



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



相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
目录
相关文章
|
SQL Oracle 关系型数据库
不小心删除表或数据后,如何利用Oracle的闪回进行恢复
不小心删除表或数据后,如何利用Oracle的闪回进行恢复
|
11月前
|
Oracle 关系型数据库 数据库
【赵渝强老师】Oracle的闪回版本查询
本文介绍了Oracle数据库的闪回版本查询(Flashback Version Query)功能,通过示例详细讲解了其使用方法。闪回版本查询可获取指定时间区间内行的不同版本,利用`versions between`子句实现。文中包含视频讲解,并通过创建测试表、插入数据及执行查询等步骤,演示如何获取历史版本信息和伪列详情,帮助用户深入了解该功能的实际应用。
258 13
|
10月前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的闪回数据库
Oracle闪回数据库功能类似于“倒带按钮”,可快速将数据库恢复至 earlier 状态,无需还原备份。本文介绍了闪回数据库的使用方法及实战案例:包括设置归档模式、开启闪回功能、记录SCN号、执行误操作后的恢复步骤等。通过具体 SQL 操作演示了如何利用闪回数据库恢复被误删的用户数据。注意,使用此功能前需确保数据库为归档模式。
363 9
|
10月前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的闪回数据归档
本文介绍了Oracle闪回数据归档(Flashback Data Archive)的功能与实现方法。闪回数据归档可将表中的历史数据进行归档,支持全面的历史数据查询,引入了“Oracle Total Recall”概念。文中通过具体实战步骤演示了如何创建和启用闪回数据归档:包括创建表空间、数据归档,设置默认归档,授予用户权限,开启表的归档功能,并展示了误操作后如何通过归档恢复数据。最后通过执行计划验证了数据来源于归档。
292 4
|
10月前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的闪回事务查询
Oracle数据库的闪回事务查询(Flashback Transaction Query)是闪回版本查询的扩充,可用于审计或撤销已提交的事务。通过`flashback_transaction_query`视图,可生成还原特定事务的SQL语句。本文介绍了其基本概念,并通过实战演示如何使用该功能:从授权、开启UNDO数据增强,到创建测试表和事务,最后利用闪回查询撤销已提交的事务,验证数据恢复效果。附带视频讲解,帮助深入理解。
292 3
|
10月前
|
存储 Oracle 关系型数据库
【赵渝强老师】Oracle的闪回删除
本文介绍了Oracle数据库的闪回删除(Flashback Drop)功能,该功能可从回收站恢复已删除的对象至删除前状态。文章详细讲解了回收站的工作原理及操作步骤,包括检查回收站功能是否开启、删除表、查看回收站内容以及使用闪回删除恢复数据等实战操作。通过具体示例,演示了如何恢复被删除的员工表及其数据,并处理同名表冲突问题。文末还附有视频讲解,帮助读者更直观地理解操作流程。
247 1
|
运维 Oracle 容灾
Oracle dataguard 容灾技术实战(笔记),教你一种更清晰的Linux运维架构
Oracle dataguard 容灾技术实战(笔记),教你一种更清晰的Linux运维架构
|
11月前
|
Oracle 关系型数据库 数据管理
【赵渝强老师】Oracle数据库的闪回技术
在Oracle数据库操作中,难免会遇到误删表或提交错误事务等问题,可能导致数据丢失甚至数据库停止运行。传统解决方法依赖备份恢复,但需提前准备正确备份。为此,Oracle提供了闪回技术,无需备份即可快速恢复数据。它支持7种类型的操作,如闪回查询、版本查询、表恢复等,能有效应对逻辑损坏和用户错误。闪回技术基于还原(undo)数据管理,启用自动管理后可实现高效恢复。
349 0
|
Oracle 关系型数据库 MySQL
实时计算 Flink版操作报错之使用oracle-cdc的,遇到错误:ORA-01292: no log file has been specified for the current LogMiner session,该如何处理
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
SQL 存储 Oracle
Oracle数据库中游标的工作原理与优化方法
Oracle数据库中游标的工作原理与优化方法

推荐镜像

更多