闪回数据库不是“万金油”(r11笔记第73天)

闪回数据库这个特性在很多Oracle DBA眼里就是鸡肋特性,因为谁会因为恢复数据而需要在主库闪回,最后可能丢掉更多的数据,这个观点没错。

但是如果是备库呢,这个特性就顺利成章的满足了绝大多数的恢复需求,无论你是truncate,还是一些drop table的操作都是可以轻而易举的恢复。所以更多的时候我们其实更偏爱于Data Guard基础上的这种数据恢复方式,而原本的逻辑备份exp,expdp,物理备份RMAN就显得有些臃肿了。

拿一个真实的小案例来说明,有一次因为数据查询的SQL有问题,结果查出的数据结果有问题,但是发现的时候这个时间已经过去了好几天,要追溯到那天那个时间点的数据状态,使用备份是完全不可能的。这个时候因为备库开启了闪回,我们可以很轻松的恢复到几天前的任意一个时间点,就这样这个问题就引刃而解了。这也算是闪回数据库尝到了一些甜头。所以在后来这个特性我也会逐步放开手脚去使用。

但是对于闪回数据库,很多场景虽然恢复起来全然没有问题,但是它可能不是罪完美的,如果让你说出个一二三,可能也会不是很肯定。

其实闪回数据库不是数据恢复的“万金油”,有一些场景它是无法实现闪回的。我们要清楚的这个这个边界才能在数据恢复的时候更加充满信心。这个信息还是从官方文档中能够得到要合适一些。(https://docs.oracle.com/cd/E11882_01/backup.112/e10642/flashdb.htm#BRADV286)

大体来说,有下面的几个场景是无法实现闪回的。

1.通过闪回数据库来修复介质问题或者是数据文件丢失

2.如果对数据文件做了收缩操作,比如数据文件为200M,我们收缩为190M,那么这个我们是无法闪回到收缩前的状态的。

3.如果drop datafile这样的操作,本身也是无法支持闪回的,而且在10g的子版本中,这个操作直接会导致MRP异常终止。

4.一些特殊的NOLOGGING操作是不支持闪回的,比如做一个direct path的数据导入,比如持续时间是9:00~9:15,启用了Nologging,如果你要闪回到9:07的这个状态是不可以的。

总体来看上面的几个场景,也算是极为罕见了。而且放开所有的权限,开发同学是全然没有这些权限去破坏和操作的。

我们来简单做一个例子来强化理解一下。

SQL> select file_id,file_name ,bytes/1024/1024 from dba_data_files; FILE_ID FILE_NAME BYTES/1024/1024 ---------- -------------------------------------------------- ---- 4 /home/oracle/users01.dbf 935 3 /U01/app/oracle/oradata/dataguru/undotbs01.dbf 295 2 /U01/app/oracle/oradata/dataguru/sysaux01.dbf 1250 1 /U01/app/oracle/oradata/dataguru/system01.dbf 750 5 /U01/app/oracle/oradata/dataguru/test_new01.dbf 200 6 /U01/app/oracle/oradata/dataguru/test/test02.dbf 10 我们记下一个时间戳。然后在主库端把5号文件从200M收缩到190M.

alter database datafile '/U01/app/oracle/oradata/dataguru/test_new01.dbf' resize 190M;这个时候查看数据文件的大小是明显发生了变化,收缩到了190M.

那么我们在备库端取消日志应用,准备开始闪回。

SQL> recover managed standby database cancel; Media recovery complete. SQL> alter database close; Database altered.

开始闪回数据库到收缩前的状态。

SQL> flashback database to timestamp to_timestamp('2017-02-12 22:32:15','yyyy-mm-dd hh24:mi:ss'); flashback database to timestamp to_timestamp('2017-02-12 22:32:15','yyyy-mm-dd hh24:mi:ss') * ERROR at line 1: ORA-38766: cannot flashback data file 5; file resized smaller ORA-01110: data file 5: '/U01/app/oracle/oradata/dataguru/test_new01.dbf'

由此可以看出这个操作是支持不了的,所以对于闪回数据库这些场景就是一些底线,我们需要了解闪回数据库能够做什么,哪些是不支持的。

明确了这些问题,其实闪回数据库还是大有可为。

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2017-02-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Hadoop数据仓库

HAWQ取代传统数仓实践(十四)——事实表技术之累积快照

一、累积快照简介         累积快照事实表用于定义业务过程开始、结束以及期间的可区分的里程碑事件。通常在此类事实表中针对过程中的关键步骤都包含日期外键,并...

45950
来自专栏xingoo, 一个梦想做发明家的程序员

循序渐进,了解Hive是什么!

一直想抽个时间整理下最近的所学,断断续续接触hive也有半个多月了,大体上了解了很多Hive相关的知识。那么,一般对陌生事物的认知都会经历下面几个阶段: ...

25350
来自专栏HappenLee的技术杂谈

数据模型与查询语言 ------《Designing Data-Intensive Applications》读书笔记2

作为一个开发者来说,在一个复杂的应用程序中,是存在很多分层模型的,但基本思想还是一样的:每一层都提供了一个干净的数据模型,从而隐藏了底层的复杂性。通过这样的抽象...

13020
来自专栏杨建荣的学习笔记

通过外部表改进一个繁琐的大查询 (r8笔记第32天)

今天处理了一个比较有意思的案例,说是有意思,因为涉及多个部门,但是哪个部门似乎都不愿意接。最后还是用了一些巧力,化干戈为玉帛。 问题的背景是这样的,业务部门需要...

34190
来自专栏HappenLee的技术杂谈

OLAP与数据仓库------《Designing Data-Intensive Applications》读书笔记4

联机事务处理过程(On-Line Transaction Processing)也就是我们通常称之的OLTP。 联机分析处理过程(On-Line Analys...

10930
来自专栏逸鹏说道

ASP.NET + SqlSever 大数据解决方案 PK HADOOP

ASP.NET + SqlSever 大数据解决方案 PK HADOOP 半个月前看到博客园有人说.NET不行那篇文章,我只想说你们有时间去抱怨不如多写些实在的...

48470
来自专栏腾讯Bugly的专栏

【Dev Club 分享】微信 iOS SQLite 源码优化实践

Dev Club 是一个交流移动开发技术,结交朋友,扩展人脉的社群,成员都是经过审核的移动开发工程师。每周都会举行嘉宾分享,话题讨论等活动。 本期,我们邀请了腾...

38280
来自专栏Ken的杂谈

分布式ID生成器解决方案SnowflakeX

UUID 是 通用唯一识别码(Universally Unique Identifier)的缩写,是一种软件建构的标准,亦为开放软件基金会组织在分布式计算环境领...

41620
来自专栏数据和云

在线重定义生产环境大表分区的惨烈踩雷记录

本文来源于读者投稿,作者在此分享在线重定义生产环境大表分区的惨烈踩雷记录,感谢投稿,欢迎大家投稿分享自己日常中“难忘”的解决过程。

19430
来自专栏智能大石头

性能&分布式&NewLife.XCode对无限数据的支持

上周发布了《改进版CodeTimer及XCode性能测试》,展示了NewLife.XCode在性能上的表现。实际上NewLife.XCode是一个很平凡的ORM...

25380

扫码关注云+社区

领取腾讯云代金券