
在Oracle中,什么是闪回表(Flashback TABLE)?
闪回表(Flashback TABLE)是将表恢复到过去的某个时间点或某个SCN值时的状态。对闪回表语句不能进行回滚,如果要闪回表,那么需要有对表的FLASHBACK对象权限或者FLASHBACK ANY TABLE系统权限。
1LHR@orclasm > CREATE TABLE T_FT_20170617_LHR (A NUMBER,B NUMBER);
2
3Table created.
4
5LHR@orclasm > INSERT INTO T_FT_20170617_LHR VALUES(1,1);
6
71 row created.
8
9LHR@orclasm > COMMIT;
10
11Commit complete.
12
13LHR@orclasm > SELECT DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER FROM DUAL;
14
15GET_SYSTEM_CHANGE_NUMBER
16------------------------
17 67902120
18
19LHR@orclasm > INSERT INTO T_FT_20170617_LHR VALUES(2,2);
20
211 row created.
22
23LHR@orclasm > COMMIT;
24
25Commit complete.
26
27LHR@orclasm > SELECT * FROM T_FT_20170617_LHR;
28
29 A B
30---------- ----------
31 1 1
32 2 2
33
34LHR@orclasm > SELECT DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER FROM DUAL;
35
36GET_SYSTEM_CHANGE_NUMBER
37------------------------
38 67902215
39
40LHR@orclasm > FLASHBACK TABLE T_FT_20170617_LHR TO SCN 67902120;----闪回表的时候,需要对表执行ROW MOVMENT
41FLASHBACK TABLE T_FT_20170617_LHR TO SCN 67902120
42 *
43ERROR at line 1:
44ORA-08189: cannot flashback the table because row movement is not enabled
45
46
47LHR@orclasm > ALTER TABLE T_FT_20170617_LHR ENABLE ROW MOVEMENT;
48
49Table altered.
50
51LHR@orclasm > FLASHBACK TABLE T_FT_20170617_LHR TO SCN 67902120;
52
53Flashback complete.
54
55LHR@orclasm > SELECT * FROM T_FT_20170617_LHR;
56
57 A B
58---------- ----------
59 1 1
60
61LHR@orclasm > FLASHBACK TABLE T_FT_20170617_LHR TO SCN 67902215;---闪回到最后的位置
62
63Flashback complete.
64
65LHR@orclasm > SELECT * FROM T_FT_20170617_LHR;
66
67 A B
68---------- ----------
69 1 1
70 2 2
下面是验证索引在FLASHBACK TABLE TO SCN中的情况:
1LHR@orclasm > DROP TABLE T_FT_20170617_LHR;
2
3Table dropped.
4
5LHR@orclasm > CREATE TABLE T_FT_20170617_LHR (A NUMBER,B NUMBER);
6
7Table created.
8
9LHR@orclasm > INSERT INTO T_FT_20170617_LHR VALUES(1,1);
10
111 row created.
12
13LHR@orclasm > COMMIT;
14
15Commit complete.
16
17LHR@orclasm > SELECT DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER FROM DUAL;
18
19GET_SYSTEM_CHANGE_NUMBER
20------------------------
21 67902871
22
23LHR@orclasm > INSERT INTO T_FT_20170617_LHR VALUES(2,2);
24
251 row created.
26
27LHR@orclasm > COMMIT;
28
29Commit complete.
30
31LHR@orclasm > CREATE INDEX IDX_T_LHR ON T_FT_20170617_LHR(A);
32
33Index created.
34
35LHR@orclasm > SELECT DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER FROM DUAL;---该SCN表中存在索引
36
37GET_SYSTEM_CHANGE_NUMBER
38------------------------
39 67902969
40
41LHR@orclasm > INSERT INTO T_FT_20170617_LHR VALUES(3,3);
42
431 row created.
44
45LHR@orclasm > COMMIT;
46
47Commit complete.
48
49LHR@orclasm > SELECT DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER FROM DUAL;
50
51GET_SYSTEM_CHANGE_NUMBER
52------------------------
53 67903002
54
55LHR@orclasm > SELECT INDEX_NAME,STATUS FROM USER_INDEXES WHERE TABLE_NAME='T_FT_20170617_LHR';
56
57INDEX_NAME STATUS
58------------------------------ --------
59IDX_T_LHR VALID
60
61LHR@orclasm > ALTER TABLE T_FT_20170617_LHR ENABLE ROW MOVEMENT;
62
63Table altered.
64
65LHR@orclasm > FLASHBACK TABLE T_FT_20170617_LHR TO SCN 67902871;
66
67Flashback complete.
68
69LHR@orclasm > SELECT * FROM T_FT_20170617_LHR;--恢复到没有创建索引之前的SCN
70
71 A B
72---------- ----------
73 1 1
74
75LHR@orclasm > SELECT INDEX_NAME,STATUS FROM USER_INDEXES WHERE TABLE_NAME='T_FT_20170617_LHR';--此时索引仍然存在
76
77INDEX_NAME STATUS
78------------------------------ --------
79IDX_T_LHR VALID
80
81LHR@orclasm > FLASHBACK TABLE T_FT_20170617_LHR TO SCN 67903002;--闪回到最后的SCN
82
83Flashback complete.
84
85LHR@orclasm > SELECT * FROM T_FT_20170617_LHR;
86
87 A B
88---------- ----------
89 1 1
90 2 2
91 3 3
92
93LHR@orclasm > DROP INDEX IDX_T_LHR;
94
95Index dropped.
96
97LHR@orclasm > FLASHBACK TABLE T_FT_20170617_LHR TO SCN 67902969;--闪回到创建索引的SCN ,但是经过闪回后索引已经不再存在了
98
99Flashback complete.
100
101LHR@orclasm > SELECT INDEX_NAME,STATUS FROM USER_INDEXES WHERE TABLE_NAME='T_FT_20170617_LHR';
102
103no rows selected
104
105LHR@orclasm >
本文选自《Oracle程序员面试笔试宝典》,作者:小麦苗

==================================================================================================================【干货来了|小麦苗IT资料分享】★小麦苗DB职场干货:https://mp.weixin.qq.com/s/Vm5PqNcDcITkOr9cQg6T7w★小麦苗数据库健康检查:https://share.weiyun.com/5lb2U2M★小麦苗微店:https://weidian.com/?userid=793741433★各种操作系统下的数据库安装文件(Linux、Windows、AIX等):https://pan.baidu.com/s/1hqff3Evv6oj2-Tn87MpFkQ★小麦苗分享的资料:https://share.weiyun.com/57HUxNi★小麦苗课堂资料:https://share.weiyun.com/5fAdN5m★小麦苗课堂试听资料:https://share.weiyun.com/5HnQEuL★小麦苗出版的相关书籍:https://share.weiyun.com/5sQBQpY★小麦苗博客文章:https://share.weiyun.com/5ufi4Dx★数据库系列(Oracle、MySQL、NoSQL):https://share.weiyun.com/5n1u8gv★公开课录像文件:https://share.weiyun.com/5yd7ukG★其它常用软件分享:https://share.weiyun.com/53BlaHX★其它IT资料(OS、网络、存储等):https://share.weiyun.com/5Mn6ESi★Python资料:https://share.weiyun.com/5iuQ2Fn★已安装配置好的虚拟机:https://share.weiyun.com/5E8pxvT★小麦苗腾讯课堂:https://lhr.ke.qq.com/★小麦苗博客:http://blog.itpub.net/26736162/★OCP培训:https://mp.weixin.qq.com/s/2cymJ4xiBPtTaHu16HkiuA★12c的OCP培训:https://mp.weixin.qq.com/s/hMLHlyjMHhLmA0xN4hLvfw★OCM培训:https://mp.weixin.qq.com/s/7-R6Cz8RcJKduVv6YlAxJA★高可用(RAC+DG+OGG)培训:https://mp.weixin.qq.com/s/4vf042CnOdAD8zDyjUueiw★小麦苗课堂腾讯视频:http://v.qq.com/vplus/71f69a319a24c6808cd6e6189ae90664==================================================================================================================



● 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用
● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/
● 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解
● 版权所有,欢迎分享本文,转载请保留出处
● QQ:646634621 QQ群:230161599、618766405
● 微信:lhrbestxh
● 微信公众号:DB宝
● 提供Oracle OCP、OCM、高可用(rac+dg+ogg)和MySQL最实用的技能培训
● 题目解答若有不当之处,还望各位朋友批评指正,共同进步

长按下图识别二维码或微信扫描下图二维码来关注小麦苗的微信公众号:DB宝,学习最实用的数据库技术。



文章转载自DB宝,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




