Oracle的flashback特性之二:Flashback Table
一、从recyclebin中恢复
flashback table tablename to before drop;
tablename 可以是表名也可以是recyclebin中的对象表,支持多表同时操作,表名之间以逗号分隔。
1、从recyclebin恢复一个被删除的表。
(1)
SQL> select object_name,original_name from recyclebin; OBJECT_NAME ------------------------------------------------------------ ORIGINAL_NAME ---------------------------------------------------------------- BIN$zQXVBB0C/4TgQKjACv18Aw==$0 TEST1
(2)
SQL> flashback table test1 to before drop; Flashback complete.
(3)
SQL> select object_name,original_name from recyclebin; no rows selected
2、如果要恢复的表再当前schema中已存在同名的表,可以在闪回恢复时通过rename to 指定一个新的表名。 (1)模拟场景:
SQL> create table test2 as select * from test1;
Table created. SQL> drop table test1; Table dropped. SQL> alter table test2 rename to test1; Table altered. SQL> flashback table test1 to before drop; flashback table test1 to before drop * ERROR at line 1: ORA-38312: original name is used by an existing object
(2)闪回table时应用rename to
SQL> flashback table test1 to before drop rename to new_test1;
Flashback complete.
二、从undo中恢复
如果表不是被删掉,而是反复修改多次,希望恢复到某个时间点,flashback query可以做,但要较多的where条件。
flashback table tablename to scn/timestamp
(1)记录当前scn
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
518475
(2)提交一些事务。
SQL> select * from test1;
ID NAME
---------- --------------------
6 ff
7 gg
6 dd
7 ee
SQL> update test1 set id = id + 1 where id > 6;
2 rows updated.
SQL> delete from test1 where id = 6 and name = 'ff';
1 row deleted.
SQL> insert into test1 values(1, 'aa');
1 row created.
SQL> commit;
Commit complete.
(3)发现上述事务提交是误操作,需要回撤。
SQL> flashback table test1 to scn 518475;
flashback table test1 to scn 518475
*
ERROR at line 1:
ORA-08189: cannot flashback the table because row movement is not enabled
这是由于基于undo的表恢复,被恢复表的必须启用row movement
SQL>alter table test1 enable row movement;
Table altered. SQL> select row_movement from user_tables where table_name = 'TEST1'; ROW_MOVEMENT ---------------- ENABLED
禁用alter table test1 disable row movement;
执行闪回:
SQL> flashback table test1 to scn 518475; Flashback complete.
SQL> select * from test1;
ID NAME
---------- --------------------
6 ff
7 gg
6 dd
7 ee
浙公网安备 33010602011771号