- 最后登录
- 2018-9-14
- 在线时间
- 47 小时
- 威望
- 205
- 金钱
- 2327
- 注册时间
- 2011-10-13
- 阅读权限
- 150
- 帖子
- 90
- 精华
- 0
- 积分
- 205
- UID
- 26
|
4#
发表于 2017-8-1 17:06:44
本帖最后由 biotwang 于 2017-8-1 17:33 编辑
使用Flashback特性进行表恢复
Flashback Table语句使得用户可以将表恢复到之前的某个时间点上。对于用户或应用偶发性误删除,它提供了一个快速地在线解决方案,它比其它恢复机制速(如时间点恢复等)速度更快。
在进行指定表的所有数据恢复到之前某个时间点或SCN时,这个表上会持有一个DML排它锁,以在线进行恢复作业。
注意:你必须使用automatic undo management来使用flashback表特性。因此此特性的恢复基于存储在undo表空间中的undo信息。
flashback table表特性在恢复表的同时,也会自动恢复相应表的属性如index, trigger等相关对象。
当然闪回表的时间会检查相应的完整性约束,如果被闪回表和另一张表具有引用关系,而另一张表并未被闪回,则闪回失败。
即便你已经进行了一次flashback,数据在闪回之前的状态也不会丢失。你也可以之后转回原先的状态。
在使用Flashback Table语句前,你需要授权你的登陆用户有FLASH ANY TABLE的权限,或者至少对于你要闪回的对象的闪回权限。此外,你必须对你要闪回的表具有SELECT, INSERT, DELETE和UPDATE操作权限。需要被闪回的表必须启用row movement。
例如:- SQL> alter tablespace UNDOTBS1 retention gurantee;
- SQL> select tablespace_name, retention from dba_tablespaces;
- TABLESPACE_NAME RETENTION
- ------------------------------ -----------
- SYSTEM NOT APPLY
- UNDOTBS1 GUARANTEE
- SYSAUX NOT APPLY
- TEMP NOT APPLY
- EXAMPLE NOT APPLY
- USERS NOT APPLY
- HISTORY NOT APPLY
- 7 rows selected.
- SQL> select * from flash_test_table;
- EMPNO EMPNAME
- ---------- ------------------------------
- 1 Kiran
- 2 Scott
- 3 Tiger
- 4 Jeff
- SQL> select current_scn from v$database;
- CURRENT_SCN
- ----------------
- 332348
- SQL> connect scott/tiger
- Connected.
- SQL> insert into flash_test_table values(5,'Jane');
- SQL> insert into flash_test_table values(6,'John');
- SQL> commit;
- Commit complete.
- SQL> connect / as sysdba
- Connected.
- SQL> select current_scn from v$database;
- CURRENT_SCN
- ----------------
- 332376
- SQL> connect scott/tiger
- Connected.
- SQL> select * from flash_test_table;
- EMPNO EMPNAME
- ---------- ------------------------------
- 1 Kiran
- 2 Scott
- 3 Tiger
- 4 Jeff
- 5 Jane
- 6 John
- 6 rows selected.
- -- 必须启动row movement
- SQL> alter table flash_test_table enable row movement;
- Table altered.
- -- 闪回至scn 332348
- SQL> flashback table flash_test_table to scn 332348;
- Flashback complete.
- SQL> select * from flash_test_table;
- EMPNO EMPNAME
- ---------- ------------------------------
- 1 Kiran
- 2 Scott
- 3 Tiger
- 4 Jeff
- -- 闪回回插入新数据时候的scn 332376
- SQL> flashback table flash_test_table to scn 332376;
- Flashback complete.
- SQL> select * from flash_test_table;
- EMPNO EMPNAME
- ---------- ------------------------------
- 1 Kiran
- 2 Scott
- 3 Tiger
- 4 Jeff
- 5 Jane
- 6 John
- 6 rows selected.
复制代码 若使用timestamp进行flashback table,举例:- SQL> flashback table xxx to timestamp to_timestamp('2012-09-01 11:00:00', 'YYYY-MM-DD HH24:MI:SS') ;
复制代码 |
|