暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

达梦数据库闪回查询如何设置

原创 Tonyhacks 2024-09-24
943

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.闪回使用说明

  1. 使用闪回功能需要打开 dm.ini 中的 ENABLE_FLASHBACK 参数;
  2. 当前闪回表功能支持:批量闪回多个表、触发器的禁用与启用、DMDPC 环境(除使用 LOCAL 登录外)、DMDSC 环境;
  3. 当前闪回表功能不支持在 DM MPP 环境下使用;
  4. 闪回表利用的是 UNDO 表空间里记录的数据被改变前的值,只能闪回到 UNDO_RETENTION 指定值范围内的时间点;
  5. 用户必须具有 FLASHBACK ANY TABLE 系统权限或 FLASHBACK 对象权限
  6. 闪回表语句是作为单个事务处理来执行。同时闪回多个表时,必须成功闪回所有表,否则会回退整个事务。闪回作为 DDL 语句,开启自动提交时,闪回成功后会自动提交;
  7. 必须对要执行闪回操作的表启动行移动(分区表具有 MOVEMENT 功能的不能关闭,否则闪回可能会报错);
  8. 不会闪回受影响对象的统计信息;
  9. 闪回会保留所有现有的索引;
  10. 闪回中会正常检查约束条件,如果在闪回执行期间违反了任何约束条件,则会回滚闪回操作;
  11. 闪回不能跨越修改了表结构的 DDL。比如,在闪回数据之前,做过删除一个字段的操作,那么是无法闪回的;
  12. 不能对系统表、临时表、HUGE 表、内部辅助表、动态表等执行闪回表操作;
  13. DMDPC 环境下由于各节点的 SCN/LSN 不同,只支持闪回到时间点 TIMESTAMP;
  14. 限制重复闪回。闪回作为 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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论