达梦数据库提供的闪回技术主要是在数据库发生逻辑错误的时候,能提供快速且最小损失的恢复。闪回技术旨在快速恢复数据库的逻辑错误。对于物理介质的损坏或者物理文件丢失,就不能使用闪回进行恢复。闪回特性可应用在以下方面:
- 自我维护过程中的修复:当一些重要的记录被意外删除,用户可以向后移动到一个时间点,查看丢失的行并把它们重新插入现在的表内恢复。
- 用于分析数据变化:可以对同一张表的不同闪回时刻进行链接查询,以此查看变化的数据。
视频讲解如下 |
---|
【赵渝强老师】达梦数据库的闪回技术 |
达梦数据库的闪回技术是以回滚(undo)数据中的内容为基础的。要使用闪回需要将enable_flashback设置为1,以开启闪回功能。另一方面,通过设置undo_retention 大小,可以决定保留回滚段时间,回滚段保留的时间代表着可以闪回的时间长度。开启闪回功能后,DM数据库 会在内存中记录下每个事务的起始时间和提交时间。通过用户指定的时刻,查询到该时刻的事务号,结合当前记录和回滚段中的 undo 记录,就可以还原出特定事务号的记录,即指定时刻的记录状态从而完成闪回查询。
通过执行下面的语句可以确定参数undo_retention和enable_flashback的值。
SQL> select name,type,value from v$parameter
where name='UNDO_RETENTION';
# 输出的信息如下:
行号 NAME TYPE VALUE
---------- -------------- ------- ---------
1 UNDO_RETENTION SYS 90.000000
SQL> select name,type,value from v$parameter
where name='ENABLE_FLASHBACK';
# 输出的信息如下:
行号 NAME TYPE VALUE
---------- ------------------- ------- -----
1 ENABLE_FLASHBACK SYS 0
在默认情况下,ENABLE_FLASHBACK的值为0,表示达梦数据库没有启用闪回功能。下面修改UNDO_RETENTION和ENABLE_FLASHBACK的值以启用达梦数据库闪回的功能。
SQL> sp_set_para_double_value(1,'UNDO_RETENTION',3600);
SQL> sp_set_para_value(1,'ENABLE_FLASHBACK',1);
这里将UNDO_RETENTION的值改为了3600秒,即一个小时。开启闪回也可以通过下面的语句完成:
SQL> alter system set 'ENABLE_FLASHBACK' = 1;
重新查询UNDO_RETENTION和ENABLE_FLASHBACK的值。
SQL> select name,type,value from v$parameter
where name in ('UNDO_RETENTION','ENABLE_FLASHBACK');
# 输出的信息如下:
行号 NAME TYPE VALUE
---------- ------------------- ------- -----------
1 ENABLE_FLASHBACK SYS 1
2 UNDO_RETENTION SYS 3600.000000