1.查看是否开启闪回,0表示没开启,1表示开启。
select para_name,para_value from v$dm_ini where para_name='ENABLE_FLASHBACK';
SQL> select para_name,para_value from v$dm_ini where para_name='ENABLE_FLASHBACK';
行号 para_name para_value
---------- ---------------- ----------
1 ENABLE_FLASHBACK 0
已用时间: 26.815(毫秒). 执行号:80401.
SQL>
2.开启闪回
SP_SET_PARA_VALUE(1,'ENABLE_FLASHBACK',1);
SQL> SP_SET_PARA_VALUE(1,'ENABLE_FLASHBACK',1);
DMSQL 过程已成功完成
已用时间: 9.915(毫秒). 执行号:80402.
SQL>
SQL> select para_name,para_value from v$dm_ini where para_name='ENABLE_FLASHBACK';
行号 para_name para_value
---------- ---------------- ----------
1 ENABLE_FLASHBACK 1
已用时间: 6.521(毫秒). 执行号:80403.
SQL>
3.验证闪回查询
SELECT * FROM t4 WHEN TIMESTAMP '2024-09-23 10:15:10';
SQL> insert into t4 values (8);
影响行数 1
已用时间: 6.998(毫秒). 执行号:80405.
SQL> commit;
操作已执行
已用时间: 2.008(毫秒). 执行号:80406.
SQL> select * from t4;
行号 id
---------- -----------
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
8 rows got
已用时间: 0.452(毫秒). 执行号:80407.
SQL> SELECT * FROM t4 WHEN TIMESTAMP '2024-09-23 09:23:10';
SELECT * FROM t4 WHEN TIMESTAMP '2024-09-23 09:23:10';
[-9801]:闪回版本已过期.
已用时间: 1.203(毫秒). 执行号:0.
SQL> SELECT * FROM t4 WHEN TIMESTAMP '2024-09-23 10:15:10';
行号 id
---------- -----------
1 1
2 2
3 3
4 4
5 5
6 6
7 7
7 rows got
已用时间: 9.976(毫秒). 执行号:80409.
SQL>
4.闪回使用说明
- 使用闪回功能需要打开 dm.ini 中的 ENABLE_FLASHBACK 参数;
- 当前闪回表功能支持:批量闪回多个表、触发器的禁用与启用、DMDPC 环境(除使用 LOCAL 登录外)、DMDSC 环境;
- 当前闪回表功能不支持在 DM MPP 环境下使用;
- 闪回表利用的是 UNDO 表空间里记录的数据被改变前的值,只能闪回到 UNDO_RETENTION 指定值范围内的时间点;
- 用户必须具有 FLASHBACK ANY TABLE 系统权限或 FLASHBACK 对象权限
- 闪回表语句是作为单个事务处理来执行。同时闪回多个表时,必须成功闪回所有表,否则会回退整个事务。闪回作为 DDL 语句,开启自动提交时,闪回成功后会自动提交;
- 必须对要执行闪回操作的表启动行移动(分区表具有 MOVEMENT 功能的不能关闭,否则闪回可能会报错);
- 不会闪回受影响对象的统计信息;
- 闪回会保留所有现有的索引;
- 闪回中会正常检查约束条件,如果在闪回执行期间违反了任何约束条件,则会回滚闪回操作;
- 闪回不能跨越修改了表结构的 DDL。比如,在闪回数据之前,做过删除一个字段的操作,那么是无法闪回的;
- 不能对系统表、临时表、HUGE 表、内部辅助表、动态表等执行闪回表操作;
- DMDPC 环境下由于各节点的 SCN/LSN 不同,只支持闪回到时间点 TIMESTAMP;
- 限制重复闪回。闪回作为 DDL,对于同一个表,不允许再次闪回到上一次闪回之前的 LSN/TIMESTAMP。
闪回表利用的是 UNDO 表空间里所记录的数据被改变前的值。因此,如果因保留时间超过了初始化参数 UNDO_RETENTION 所指定的值,从而导致闪回表时所需要的 UNDO 数据被其他事务覆盖的话,那么就不能将表中数据恢复到指定的时间了。
5.查看UNDO_RETENTION的值
SELECT * FROM v$dm_ini WHERE para_name LIKE 'UNDO_RETENTION';
SQL> SELECT * FROM v$dm_ini WHERE para_name LIKE 'UNDO_RETENTION';
行号 PARA_NAME PARA_VALUE MIN_VALUE MAX_VALUE DEFAULT_VALUE MPP_CHK SESS_VALUE FILE_VALUE
---------- -------------- ---------- --------- --------- ------------- ------- ---------- ----------
DESCRIPTION PARA_TYPE SYNC_FLAG SYNC_LEVEL
---------------------------------------------------------------------------------------- --------- --------- ----------
1 UNDO_RETENTION 90.000000 0 86400 90.000000 N 90.000000 90.000000
Maximum retention time in seconds for undo pages since relative transaction is committed SYS ALL_SYNC CAN_SYNC
已用时间: 6.078(毫秒). 执行号:840008.
6.设置UNDO_RETENTION为2小时
SP_SET_PARA_DOUBLE_VALUE(1, 'UNDO_RETENTION', 7200);
SQL> SP_SET_PARA_DOUBLE_VALUE(1, 'UNDO_RETENTION', 7200);
DMSQL 过程已成功完成
已用时间: 5.014(毫秒). 执行号:840018.
SQL> SELECT * FROM v$dm_ini WHERE para_name LIKE 'UNDO_RETENTION';
行号 PARA_NAME PARA_VALUE MIN_VALUE MAX_VALUE DEFAULT_VALUE MPP_CHK SESS_VALUE FILE_VALUE
---------- -------------- ----------- --------- --------- ------------- ------- ----------- -----------
DESCRIPTION PARA_TYPE SYNC_FLAG SYNC_LEVEL
---------------------------------------------------------------------------------------- --------- --------- ----------
1 UNDO_RETENTION 7200.000000 0 86400 90.000000 N 7200.000000 7200.000000
Maximum retention time in seconds for undo pages since relative transaction is committed SYS ALL_SYNC CAN_SYNC
已用时间: 6.210(毫秒). 执行号:840019.
SQL>
最后修改时间:2024-09-24 11:11:48
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




