闪回概念是Oracle最先提出来的,我们看一下Oracle对于闪回的解释:
尽管采取了预防措施,但还是会发生人为错误。Oracle数据库闪回技术是一组独特且丰富的数据恢复解决方案,可通过有选择地有效地进行回滚操作来逆转人为错误。在闪回之前,损坏数据库可能需要几分钟,而恢复数据库需要花费数小时。使用闪回,纠正错误所花费的时间不会比产生错误所花费的时间长。而且,从此恢复正确的状态所需的时间不取决于数据库大小,这是Oracle数据库独有的功能。
其本质是为了回退错误操作产生的,避免人为的“灾难”,并且要能够快速回退。
那么我们看一下Oracle能够实现的闪回方案:
闪回数据库:使用Oracle优化的闪回日志,而不是通过备份和正向恢复,将整个数据库还原到特定的时间点。命令是为了加快原本很慢的时间点数据库恢复(point in time database recovery)过程。闪回可以取得完整的数据库恢复和使用归档日志的前滚,主要目的是加快从“意外状态“中恢复。闪回数据库基于闪回日志flashback log,闪回日志包含已修改数据块的”前影像“,可用于将数据库恢复到该时间点之前的状态。闪回数据库允许复原整个数据库到具体的时间点,从而撤销该时间点以来的所有数据库的变化 用户误删除表中数据、删除表、truncate表、索引、触发器,表空间等。Dba误操作等。简而言之,所有操作都可以闪回。
闪回表:轻松地将表恢复到特定的时间点,当逻辑损坏仅限于一个或一组表而不是整个数据库时,此功能很有用。复原一个表到某个时间点,或者某个SCN而不用回复数据文件。闪回表依赖UNDO数据,当表结构改变的时候,不能进行闪回。
闪回删除:恢复意外删除的表。它从回收站(所有删除对象的逻辑容器)恢复删除的表及其所有索引,约束和触发器。用户恢复被误删除的表。允许你从当前数据库中恢复一个被drop的对象。在执行drop操作时,现在oracle不是真正删除他,而是将对象自动放入回收站,对于一个对象的删除,其实就是一个简单的重命令操作,并且所在的表空间不变。表上面的约束也在放在回收站里面,在闪回后,索引的名称还是系统默认的,需要手工还原。表上的物化视图日志不会随着表的删除而放入回收站。
闪回事务:撤消单个事务及其所有从属事务的影响。通过单个PL SQL操作或使用企业管理器向导。
闪回事务查询:查看特定事务所做的所有更改,当错误事务更改了多行或多表中的数据时很有用。实际上是查询的数据字典flashback_transaction_query。可以根据flashback_transaction_query 的undo_sql列值返回数据以前版本。
闪回查询:查询过去某个时间点的任何数据。此强大功能可用于查看和逻辑上重建可能已无意删除或更改的损坏数据。最基本的闪回功能,直接利用回滚段中的旧数据构造某一个时刻的一致性数据版本。只适合单个表数据恢复。对事务中相关多表数据恢复不适合,无法确保相关数据的参照完整性。
闪回版本查询:在指定的时间间隔而不是单个时间点检索行的不同版本。
全面召回:有效管理和查询长期历史数据。Total Recall会自动跟踪对数据库中存储的数据所做的每一个更改,并维护历史数据的安全,高效和易于访问的存档。闪回数据归档(Flashback Data Archive)。通过这一功能Oracle数据库可以将UNDO数据进行归档,从而提供全面的历史数据查询,也因此Oracle引入一个新的概念Oracle Total Recall,也即Oracle全面回忆功能。
REDO日志也就是重做日志文件(redo log file),Oracle维护着两类重做日志文件:在线(online)重做日志文件和归档(archived)重做日志文件。这两类重做日志文件都用于恢复;其主要目的是,万一实例失败或介质失败,它们能够恢复数据。
UNDO表空间,从概念上讲,undo正好与redo相对。你对数据执行修改时,数据库会生成undo信息,这样万一你执行的事务或语句由于某种原因失败了,或者如果你用一条ROLLBACK语句请求回滚,就可以利用这些undo信息将数据放回到修改前的样子。redo用于在失败时重放事务(即恢复事务),undo则用于取消一条语句或一组语句的作用。UNDO主要用来做事务恢复或回滚操作的。例如,当我们执行操作时,意外发生错误,导致事务终止,这时候有可能会用到undo表空间进行回退,再比如我们的闪回操作,手动回退错误操作。
另外,UNDO与REDO一起配合保证数据的一致性。
以上是对Oracle的闪回分析,那么按照Oracle的闪回逻辑看一下其他数据库。
SQL Server
稀疏文件 (sparse file),NTFS 文件系统提供的文件,需要的磁盘空间要比其他文件格式少很多。稀疏文件用于存储复制到数据库快照的页面。首次创建稀疏文件时,稀疏文件占用的磁盘空间非常少。随着数据写入数据库快照,NTFS 会将磁盘空间逐渐分配给相应的稀疏文件。
MySQL
T-TDSQL
GuassDB
PostgreSQL
缺点:目前对于依赖项识别不清,功能过于简单,难以完成复杂操作的闪回,比如存在依赖项。
缺点:由于无效数据变多,严重影响数据库性能。
I Love PG 关于我们
中国开源软件推进联盟PostgreSQL分会(简称:PG分会)于2017年成立,由国内多家PG生态企业所共同发起,业务上接受工信部产业发展研究院指导。PG分会致力于构建PG产业生态,推动PG产学研用发展,是国内一家PG行业协会组织。
技术文章精彩回顾 PostgreSQL学习的九层宝塔 PostgreSQL职业发展与学习攻略 搞懂PostgreSQL数据库透明数据加密之加密算法介绍 一文读懂PostgreSQL-12分区表 PostgreSQL源码学习之:RegularLock Postgresql源码学习之词法和语法分析 PostgreSQL buffer管理 最佳实践—PG数据库系统表空间重建 PostgreSQL V12中的流复制配置 2019,年度数据库舍 PostgreSQL 其谁? PostgreSQL使用分片(sharding)实现水平可扩展性 一文搞懂PostgreSQL物化视图 PostgreSQL原理解析之:PostgreSQL备机是否做checkpoint PostgreSQL复制技术概述 PG活动精彩回顾 见证精彩|PostgresConf.CN2019大会盛大开幕 PostgresConf.CN2019大会DAY2|三大分论坛,精彩不断 PostgresConf.CN2019培训日|爆满!Training Day现场速递! 「PCC-Training Day」培训日Day2圆满结束,PCC2019完美收官 创建PG全球生态!PostgresConf.CN2019大会盛大召开 首站起航!2019“让PG‘象’前行”上海站成功举行 走进蓉城丨2019“让PG‘象’前行”成都站成功举行 中国PG象牙塔计划发布,首批合作高校授牌仪式在天津举行 PostgreSQL实训基地落户沈阳航空航天大学和渤海大学,高校数据库课改正当时 群英论道聚北京,共话PostgreSQL 相聚巴厘岛| PG Conf.Asia 2019 DAY0、DAY1简报 相知巴厘岛| PG Conf.Asia 2019 DAY2简报 相惜巴厘岛| PG Conf.Asia 2019 DAY3简报 独家|硅谷Postgres大会简报 全球规模最大的PostgreSQL会议等你来! PG培训认证精彩回顾 关于中国PostgreSQL培训认证,你想知道的都在这里! 首批中国PGCA培训圆满结束,首批认证考试将于10月18日和20日举行! 中国首批PGCA认证考试圆满结束,203位考生成功获得认证! 中国第二批PGCA认证考试圆满结束,115位考生喜获认证! 请查收:中国首批PGCA证书! 重要通知:三方共建,中国PostgreSQL认证权威升级! 一场考试迎新年 | 12月28日,首次PGCE中级认证考试开考! 近500人参与!首次PGCE中级、第三批次PGCA初级认证考试落幕!