Oracle闪回flashback

参考资料:Using Oracle Flashback Technology
Oracle 11g的新特性闪回操作
- 闪回查询
- 闪回查询
- 闪回版本查询
- 闪回事务查询
- 闪回数据
- 闪回表
- 闪回删除
- 闪回数据
- 闪回归档
下面会分别介绍这些操作。在介绍这些操作之前先看下闪回特性是否开启。
检查闪回特性是否启用
参考资料:
Configuring Your Database for Oracle Flashback Technology
确认数据库闪回特性已经启用:v$database
SQL> select flashback_on from v$database;
FLASHBACK_ON
------------------
NO
如果闪回特性没有启用,则需要先启用闪回。
打开闪回的步骤:
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database flashback on;
SQL> alter database open;
打开之后可再次检查闪回特性是否打开。只要打开了闪回特性,就可以进行闪回操作。
闪回查询
参考资料:Using Oracle Flashback Query (SELECT AS OF)
查询某一个历史时间点的数据。
查询某个时间点表中的数据——某个时间点表中快照的数据。
SQL> create table t(x int , y int);
表已创建。
SQL> insert into t values(1,2);
已创建 1 行。
SQL> insert into t values(2,3);
已创建 1 行。
SQL>
SQL> commit;
提交完成。
SQL> select * from t;
X Y
---------- ----------
1 2
2 3
SQL> set time on
21:11:45 SQL> delete from t where x=1;
已删除 1 行。
21:12:11 SQL> commit;
提交完成。
21:12:18 SQL> select * from t;
X Y
---------- ----------
2 3
21:12:21 SQL> select * from t as of timestamp to_timestamp('2016-03-21 21:11:45'
,'yyyy-mm-dd hh24-mi-ss');
X Y
---------- ----------
1 2
2 3
可见删除的数据已经提交,但是还是可以闪回查询到之前时间的数据。其中hh24表示可以用24小时制,否则只能小时不能超过12。至于为什么分钟用mi而不用mm,那是因为规定的格式就是mi,换成mm会显示和之前的月份mm冲突,换成其他的会显示日期格式无法识别。
基于SCN的闪回查询
如果有修改时候的SCN,那么就可以基于SCN进行闪回查询
21:18:34 SQL> select * from t;
X Y
---------- ----------
2 3
21:20:36 SQL> select current_scn from v$database;
CURRENT_SCN
-----------
2891887
21:20:53 SQL> insert into t values(3,4);
已创建 1 行。
21:21:13 SQL> commit;
提交完成。
21:21:16 SQL> select * from t;
X Y
---------- ----------
2 3
3 4
21:21:26 SQL> select * from t as of scn 2891887;
X Y
---------- ----------
2 3
可见基于SCN闪回查询得到插入数据之前表中的数据
闪回版本查询
闪回版本查询也就是flashback versions query。
- See all versions of a row between two times
- See transactions that changed the row
一个时间段内的某一行的所有版本,以及改变该行的所有事务。
参考资料:
Using Oracle Flashback Version Query
闪回事务查询
闪回事务查询也即是flashback trasaction query
- See all changes made by a transaction
闪回一个事务对数据的所有改变。
参考资料:
Using Oracle Flashback Transaction Query
闪回表
将表闪回到历史的某个时刻。
SQL> create table t(id int);
表已创建。
SQL> insert into t values(100);
已创建 1 行。
SQL> insert into t values(200);
已创建 1 行。
SQL> commit;
提交完成。
SQL> select rowid,id from t;
ROWID ID
------------------ ----------
AAASaxAABAAAV3xAAA 100
AAASaxAABAAAV3xAAB 200
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
2960668
SQL> delete from t;
已删除2行。
SQL> commit;
提交完成。
SQL> select * from t;
未选定行
SQL> alter table t enable row movement;
表已更改。
SQL> select * from t;
未选定行
SQL> flashback table t to scn 2960668
2 ;
flashback table t to scn 2960668
*
第 1 行出现错误:
ORA-08185: 用户 SYS 不支持闪回
SQL> show recyclebin
SQL>
解释1:由于当前是sys用户,会显示:
ORA-08185: 用户 SYS 不支持闪回
闪回技术只适用于普通用户而不适用于sys用户。system用户也不适用。
解释2:必须要启用表的行移动功能,否则不能闪回表。
- alter table t enable row movement;
闪回删除
参考资料:Oracle闪回功能详解
由于闪回技术不支持sys用户,所以使用普通用户测试。
Oracle10g以后,当我们删除表时,默认Oracle只是在数据库字典里面对被删的表的进行了重命名,并没有真正的把表删除。
回收站(recyclebin):用来维护表被删除前的名字与删除后系统生成的名字之间的对应关系的数据字典,表上的相关对象(索引、触发器等)也会一并进入回收站。
查看回收站的状态
只有dba(sys,system)才有权限执行查询recyclebin的状态。
SQL> show parameter recyclebin;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
recyclebin string on
可以发现recyclebin是开启状态,如果发现是关闭状态,可以通过下面命令开启
alter system set recyclebin=on;
如果要关闭回收站功能,使用下面的命令:
alter system set recyclebin=off;
禁用后删除的对象将直接删除,不会写到Recyclebin中。
闪回删除实验效果
由于sys用户和system用户不支持闪回技术,所以我们需要切换到普通用户进行实验,实验效果如下:
SQL> create table t(id int);
表已创建。
SQL> insert into t values(1);
已创建 1 行。
SQL> show recyclebin;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
T BIN$zqOXt7xBRA2SKyG5nGxb5w==$0 TABLE 2016-03-22:17:18:33
SQL> drop table t;
表已删除。
SQL> commit;
提交完成。
SQL> show recyclebin;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
T BIN$lpoDEIX2SSGAQt9TL3gUTA==$0 TABLE 2016-03-22:17:22:24
T BIN$zqOXt7xBRA2SKyG5nGxb5w==$0 TABLE 2016-03-22:17:18:33
SQL> select * from "BIN$lpoDEIX2SSGAQt9TL3gUTA==$0";
ID
----------
1
SQL> flashback table t to before drop;
闪回完成。
SQL> select * from t;
ID
----------
1
清空回收站操作
可以全部清空回收站,也可只清空回收站的部分文件。
全部清空回收站
SQL> purge recyclebin;
部分清空回收站
##假定回收站中有一个文件的ORIGINAL NAME是t1,永久删除他t1表
SQL> purge table t1;
回收站的空间管理
虽然Oracle并没真正删除被回收的表,但是在Oracle看来这一块空间已经是自由的(free)。使用下面的演示可以查看效果:(在普通用户下验证即可)
SQL> create table t as select * from user_objects;
表已创建。
SQL> select sum(blocks) from user_free_space where tablespace_name='USERS';
SUM(BLOCKS)
-----------
96
SQL> drop table t;
表已删除。
SQL> select sum(blocks) from user_free_space where tablespace_name='USERS';
SUM(BLOCKS)
-----------
104
SQL> show recyclebin;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
T BIN$kMskKvD5SJqmwaC5WDQiAg==$0 TABLE 2016-03-22:18:31:43
SQL> select blocks from user_segments where segment_name='BIN$kMskKvD5SJqmwaC5WDQiAg==$0';
BLOCKS
----------
8
实验效果表明删除表之后用户自由空间增大了,并且大小刚好就是回收站中的对应的表的大小。可见这一块空间在Oracle看来已经是free_space了。
闪回归档
参考资料:
Using Flashback Data Archive (Oracle Total Recall)
闪回归档:Flashback Data Archive。Oracle Total Recall,也即Oracle全面回忆功能。
闪回数据归档可以和我们一直熟悉的日志归档类比,日志归档记录的是Redo的历史状态,用于保证恢复的连续性;而闪回归档记录的是UNDO的历史状态,可以用于对数据进行闪回追溯查询;后台进程LGWR用于将Redo信息写出到日志文件,ARCH进程负责进行日志归档;在Oracle 11g中,新增的后台进程FBDA(Flashback Data Archiver Process)则用于对闪回数据进行归档写出。
具体操作见参考资料。
闪回数据库
参考资料:Oracle DB闪回(Flashback database)开启笔记
数据库的闪回
- 是Oracle不同于查询闪回和归档闪回的另外一种闪回机制
- Oracle 10g引入
- 需要配置闪回区域
- 记录数据块的修改,称为flashback logs(闪回日志)
- 通过后台恢复写入进程RVWR(Recovery Writer)来工作
- 就像一个向后转的按钮,让数据库向后回退。
- 可以用于人为失误操作或者业务的需要。
闪回数据库架构Flashback database architecture

开启闪回数据库功能之后,会在SGA中开辟内存Flashback buffer,会记录buffer cache中的部分改变然后后台恢复写入进程RVWR将记录写入闪回日志Flashback logs中。FBDA进程(Flashback Data Archive )则会将Flashback logs进行归档。
这个过程和重做日志非常非常的类似。
记得帮我点赞哦!
精心整理了计算机各个方向的从入门、进阶、实战的视频课程和电子书,按照目录合理分类,总能找到你需要的学习资料,还在等什么?快去关注下载吧!!!

念念不忘,必有回响,小伙伴们帮我点个赞吧,非常感谢。
我是职场亮哥,YY高级软件工程师、四年工作经验,拒绝咸鱼争当龙头的斜杠程序员。
听我说,进步多,程序人生一把梭
如果有幸能帮到你,请帮我点个【赞】,给个关注,如果能顺带评论给个鼓励,将不胜感激。
职场亮哥文章列表:更多文章

本人所有文章、回答都与版权保护平台有合作,著作权归职场亮哥所有,未经授权,转载必究!
Oracle闪回flashback的更多相关文章
- Oracle闪回flashback总结
1.说明: Ø 采用的技术. 使用的是多个技术. 1. 闪回日志 2. 回收站 3. 回滚段 无法使用回收站的操作 Drop table xxx purge; Drop ...
- Oracle 闪回特性(FLASHBACK DATABASE)
--===================================== -- Oracle 闪回特性(FLASHBACK DATABASE) --======================= ...
- Oracle 闪回归档(Flashback Database)
cmd --管理员身份打开 sqlplus / as sysdba --管理数据库 shu immediate; --独占方式开始 startup mount --修改日期模式 alter datab ...
- oracle之三闪回flashback
闪回 flashback 5.1 flashback 的功能:1)利用undo data回溯或撤销提交的数据,2)flashback log 使database 可以恢复到过去某个时间点,可以作为不完 ...
- oracle闪回表详解
--- 说明闪回数据库 --- 使用闪回表将表内容还原到过去的特定时间点 --- 从删除表中进行恢复 --- 使用闪回查询查看截止到任一时间点的数据库内容 --- 使用闪回版本查询查看某一行在一段时间 ...
- Oracle闪回操作
Oracle闪回操作 1. 记录当前时间或SCN 在数据库变动前记录时间或SCN SQL> select to_char(sysdate,'YYYY-MM-DD HH24:mi:ss') fr ...
- Oracle闪回表
Oracle闪回技术 场景:测试环境数据库的表数据被误删除. 解决思路:使用闪回表技术 原理 闪回技术是Oracle强大数据库备份恢复机制的一部分,在数据库发生逻辑错误的时候,闪回技术能提供快速且最小 ...
- Oracle 闪回
Oracle 闪回特性(FLASHBACK DATABASE) 本文来源于:gerainly 的<Oracle 闪回特性(FLASHBACK DATABASE) > -========== ...
- 6. Oracle闪回特性
Oracle 闪回 (flashback)是9i版本提供的新特性.这一特性:其他数据库(PostgreSQL,Mysql)是羡慕不已.对数据恢复提供非常便捷的方式.闪回技术通常用于快速简单恢复数据库中 ...
随机推荐
- .netcore tif文件转jpg,并通过webapi返回
网上能搜到很多关于c# tif转jpg的代码.最简单的就是下面这段获得转换后的图片图片对象.在netcore 中使用这段代码时由于netcore框架已经不自带System.Drawing命名空间了所有 ...
- 笔记:phpstudy、虚拟机CentOS安装、Linux命令
一.phpstudy 1.phpstudy实现w(Windows)a(Apache)m(Mysql)p(php)环境 Apache 用来发布Web服务 80端口 MySQL 开源的建议灵活的 ...
- python基础 Day13
python Day13 匿名函数(一句话函数,比较简单的函数) func=lambda a,b:a+b print(func(1,2)) ###结果:3 func=lambda a:(a[0],a[ ...
- Java中枚举的常见用法
在JDK1.5以后引入了一种新的类型,就是枚举(enum).enum是用来声明枚举类型数据,它可以像数组一样存储许多的元素,但是不同于数组的是,它除了数字不能存储以外, 其他类型的如字母.特殊符号.汉 ...
- 数字货币比特币以太坊买卖五档行情数据API接口
数字货币比特币以太坊买卖五档行情数据API接口 数字货币一般包含比特币BTC.以太坊ETH.瑞波币XRP.泰达币USDT.比特币现金BCH.比特币SV.莱特币LTC.柚子币EOS.OKB. ...
- LG P4161 [SCOI2009]游戏/LG P6280 [USACO20OPEN]Exercise G
Description(P4161) windy学会了一种游戏. 对于1到N这N个数字,都有唯一且不同的1到N的数字与之对应. 最开始windy把数字按顺序1,2,3,……,N写一排在纸上. 然后再在 ...
- 牛客网PAT练习场-数素数
题解:就是一道素数筛选法 题目地址:https://www.nowcoder.com/questionTerminal/e0fb49acb75f47e8b6fa2077d9071799 /** * C ...
- 开始进行lammps手册的学习啦,跟着Manual一边翻译一边做吧!(转载)
转载自:http://blog.sina.com.cn/s/blog_64813e370100ngsz.html 注明:黄色部分基本上为不懂的部分,红色字体为所做注释 一.各种文件的介绍: 1 in ...
- asp.net Core3.1自定义权限体系-菜单和操作按钮权限
我们在做项目项目,经常会碰到权限体系,权限体系属于系统架构的一个最底层的功能,也是非常重要的功能,几乎在每个项目都会用到.那么我们该如何设计一个比较合理的且扩展性较强的权限体系呢? 经过多天的摸索,参 ...
- Datanode 怎么与 Namenode 通信?
在分析DataNode时, 因为DataNode上保存的是数据块, 因此DataNode主要是对数据块进行操作. A. DataNode的主要工作流程 客户端和DataNode的通信: 客户端向Dat ...