关于如何使用flashback table来进行表数据恢复
目的
对于偶然性误删除表数据进行及时恢复
使用flashback table特性来进行表恢复
- flashback table命令可以使得用户得以对之前某个时间点的表数据进行恢复。
- 它对于用户偶然性勿操作导致的表数据删除或修改提供了一种快速,实时的恢复表恢复方案。
- flashback drop的恢复也比其它此类情景下的恢复方法要更快,这种时间点恢复可以保证不会出现事务丢失和宕机情况。
- 用户可以使用SCN或时间戳来将指定表中的数据恢复到某个时间点上。
- 这种恢复都是在线进行的。
注意:你必须使用自动UNDO管理才能使用flashback table特性。可闪回的数据是存在在undo表空间下的。
- 随着表闪回,同时也会将表相关的属性,如索引、触发器等其它必要对象进行自动恢复。
- 同时对被远程复制的表的闪回在分布式环境中也会进行相关的远程状态维护。
- 在表闪回时,会首先检查其数据恢复是否影响到表的完整性约束。不过不违反则会进行闪回。
- 即便在闪回后,之前表中的数据并不会丢失。你也可以在之后逆转回来。
在使用FLASHBACK TABLE语句前,你必须已经被授予了FLASHBACK ANY TABLE系统权限,或者对需要闪回的表具有flashback对象权限。此外你必须对表具有SELECT, INSERT, DELETE和UPDATE权限。需要进行flashback操作的表也需要启用row movement。
例子:
SQL>alter tablespace UNDOTBS1 retention guarantee;
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> ALTER TABLE flash_test_table enable row movement;
Table altered.
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');
1 row created.
SQL> insert into flash_test_table values(6,'John');
1 row created.
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.
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
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 (to_timestamp) 时间戳来进行闪回恢复
SQL> flashback table xxx to timestamp to_timestamp('2012-09-01 11:00:00', 'YYYY-MM-DD HH24:MI:SS') ;