如果要在某个表上使用 FlashBack Table 特征,则要求必须具有以下条件:
用户必须具有 FlashBack ANY TABLE 系统权限或 FlashBack 对象权限
用户必须在表上具有SELECT、INSERT、DELETE 和 ALTER 权限
必须合理设置初始化参数undo_retention, 以确保 UNDO 信息保留足够时间
必须激活行移动特征:ALTER TABLE EMP ENABLE ROW MOVEMENT
(1) 激活行移动特征
(2) 模拟用户 DML 误操作
(3) 使用 FLASHBACK TABLE 恢复表数据到先前时间点
SCN:
SQL> conn scott/tiger@demo
已连接。
SQL> alter table emp enable row movement;
表已更改。
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
1975966
SQL> update emp set sal=sal*1.5 where deptno=10;
已更新3行。
SQL> commit;
提交完成。
SQL> select ename,sal from emp where deptno=10;
ENAME SAL
---------- ----------
CLARK 3675
KING 7500
MILLER 1950
SQL> flashback table emp to scn 1975966;
闪回完成。
SQL> select ename, sal from emp where deptno=10;
ENAME SAL
---------- ----------
CLARK 2450
KING 5000
MILLER 1300
TIMESTAMP:
SQL> host date
当前日期: 2009-02-19 星期四
输入新日期: (年月日)
SQL> host time
当前时间: 16:58:11.12
输入新时间:
SQL> update emp set sal=sal*1.5 where deptno=10;
已更新3行。
SQL> commit;
提交完成。
SQL> select ename,sal from emp where deptno=10;
ENAME SAL
---------- ----------
CLARK 3675
KING 7500
MILLER 1950
SQL> flashback table emp to timestamp to_timestamp('2009-02-19 16:58:11','YYYY-MM-DD HH24:MI:SS');
闪回完成。
SQL> select ename,sal from emp where deptno=10;
ENAME SAL
---------- ----------
CLARK 2450
KING 5000
MILLER 1300