设为首页 加入收藏

TOP

Oracle Flashback(闪回) 详解
2016-12-12 08:15:10 】 浏览:279
Tags:Oracle Flashback 闪回 详解

通常我们对数据库进行了误操作时, 需要把数据库Rollback到之前的版本。一个常用的方法就是使用日志来进行数据库恢复. 这个方法虽然强大有效, 但是花费时间等成本高。


例如当我们只是误提交了1个delete语句, 丢失了删除行的数据时, 如果我们执行数据库恢复的话, 就需要断开当前所有server processes, 甚至需要关闭数据库,相当于暂停了所有的生产活动。


而且使用日志恢复的话, 还往往需要相当长的时间(取决于备份文件的复制时间和日志的应用时间)


除了上面所说的日志恢复机制.


Oracle会将数据库数据的每1个改动记录在日志文件中, 所以理论上依靠日志文件, 是能将数据库回滚到任何一个时间点的.


而Flashback的机制有点类似与回收站, 会把数据库改动前的镜像放到undo表空间中.


如果用户要rollback1个数据库对象, 只需要找到undo表空间中对应的Undo数据即可.


很明显, Flashback并不依赖于日志文件, 只需Undo表空间中undo数据即可发挥作用.


所以Flashback可以满足用户逻辑错误的快速恢复.


所以优点如下:


1. 快速


2. 在线恢复, 无需关闭数据库


3. 操作简单.便捷.


Flashback缺点同样明显.


1. 只适用于用户逻辑错误, 所谓逻辑错误就是用户对数据的唔操作, 例如误删除一些数据行等等.


而对于数据文件的损坏则无能为力(只能通过日志恢复).


2. undo表空间的容量有限, 旧的undo数据有可能会被新的数据覆盖, 所以Flashback一般只适用于短时间内的恢复, 对于一段相当时间前的误操作, 很可能因为undo数据被覆盖而恢复失败.


为了正常使用Flashback功能, 通常我们要打开补充日志(Supplemental logging)功能, oracle 11g数据库默认情况下补充日志是关闭的.


补充日志也分成几个级别,最小(Minimal),支持所有字段(all),支持主键(primary key),支持唯一键(unique),支持外键(foreign key)。包括LONG,LOB,LONG RAW及集合等字段类型均无法利用补全日志.


例如:


使用如下命令来打开最小补全日志.


alter database add supplemental log data;


使用如下命令来查看补全日志是否被打开.


SQL> select supplemental_log_data_min, supplemental_log_data_pk, supplemental_log_data_ui, supplemental_log_data_fk, supplemental_log_data_all from v$database;


SUPPLEME SUP SUP SUP SUP
-------- --- --- --- ---
YES NO NO NO NO


使用Flashback 需要当前用户具有select any transaction 权限.


可以用dba账号执行:


grant select any transaction to xxx;


来获得这个权限.


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Oracle 12C数据库PSU补丁安装方式.. 下一篇Oracle 12C RAC启动实例时报ORA-0..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目