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

简介:     闪回数据库这个特性在很多Oracle DBA眼里就是鸡肋特性,因为谁会因为恢复数据而需要在主库闪回,最后可能丢掉更多的数据,这个观点没错。     但是如果是备库呢,这个特性就顺利成章的满足了绝大多数的恢复需求,无论你是truncate,还是一些drop table的操作都是可以轻而易举的恢复。

    闪回数据库这个特性在很多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'     由此可以看出这个操作是支持不了的,所以对于闪回数据库这些场景就是一些底线,我们需要了解闪回数据库能够做什么,哪些是不支持的。

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




     


   

   

   

目录
相关文章
|
2月前
|
Go 数据库
数据库的实现【笔记】
数据库的实现【笔记】
13 0
|
2月前
|
数据库
数据库设计【笔记】
数据库设计【笔记】
13 0
|
3月前
|
SQL 存储 数据库
【数据库SQL server】自学终极笔记
【数据库SQL server】自学终极笔记
103 0
|
4月前
|
SQL Dart 数据库
Flutter笔记: 在Flutter应用中使用SQLite数据库
Flutter笔记: 在Flutter应用中使用SQLite数据库
230 0
|
4月前
|
SQL Java 数据库连接
(数据库链接池)spring内容复习7月16日笔记
(数据库链接池)spring内容复习7月16日笔记
15 0
|
5月前
|
SQL 存储 数据库
Flask狼书笔记 | 05_数据库
5 数据库 这一章学习如何在Python中使用DBMS(数据库管理系统),来对数据库进行管理和操作。本书使用SQLite作为示例。 注:按下Ctrl+F5,或Shift+F5可以清除浏览器缓存。 5.1 数据库的分类
34 0
|
5月前
|
存储 小程序 前端开发
前端知识笔记(四十六)———什么是小程序,什么是数据库
前端知识笔记(四十六)———什么是小程序,什么是数据库
24 0
|
5月前
|
运维 关系型数据库 MySQL
阿里大牛的595页MySQL笔记,透彻即系数据库、架构与运维
数据库运维的变革,经历从手工造到脚本化、系统化、平台化、智能化的转变,逐步实现DBA对数据库的规范化、自动化、自助化、可视化、智能化、服务化管理,从而保障数据库的安全、稳定、高效运行。
|
7月前
|
机器学习/深度学习 存储 算法
系统分析师笔记-数据库
系统分析师笔记-数据库
|
7月前
|
SQL Java 数据库
[笔记]Springboot入门《三》springboot集成Quartz简单使用+数据库
[笔记]Springboot入门《三》springboot集成Quartz简单使用+数据库