达梦数据库闪回技术初探

7 篇文章 0 订阅
6 篇文章 0 订阅

目录

 

一、前言

二、开启闪回功能

三、测试

3.1、创建表并插入记录

3.2、插入数据并闪回查询

3.3、修改数据并闪回查询

3.4、删除数据并闪回查询

3.5、闪回版本查询


一、前言

当用户操作不慎导致错误的删改数据时,非常希望有一种简单快捷的方式可以恢复数据。闪回技术,就是为了用户可以迅速处理这种数据逻辑损坏的情况而产生的。 闪回技术主要是通过回滚段存储的 UNDO 记录来完成历史记录的还原。设置 ENABLE_FLASHBACK 为 1 后,开启闪回功能。DM 会保留回滚段一段时间,回滚段保留的时间代表着可以闪回的时间长度。由 UNDO_RETENTION 参数指定。 开启闪回功能后,DM 会在内存中记录下每个事务的起始时间和提交时间。通过用户指定的时刻,查询到该时刻的事务号,结合当前记录和回滚段中的 UNDO 记录,就可以还原出特定事务号的记录。即指定时刻的记录状态。从而完成闪回查询。闪回查询功能完全依赖于回滚段管理,对于 DROP 等误操作不能恢复。闪回特性可应用在以下方面:

1. 自我维护过程中的修复:当一些重要的记录被意外删除,用户可以向后移动到一个时间点,查看丢失的行并把它们重新插入现在的表内恢复;

2. 用于分析数据变化:可以对同一张表的不同闪回时刻进行链接查询,以此查看变化的数据。

二、开启闪回功能

达梦数据库除了直接看参数文件,也可以查询相关的视图。 最主要的视图是:

1)v$parameter:显示 ini 参数和 dminit 建库参数的类型及参数值信息(当前会话值、系统值及 dm.ini文件中的值)。
        2)v$dm_ini:所有 ini 参数和 dminit 建库参数信息。 但这个视图查询的内容有点多,DM提供了分类的视图,比如V$DM_ARCH_INI,查询归档的相关参数值。

跟闪回功能有关的参数为 ENABLE_FLASHBACK

root@dmdsc01:/home/dmdba/dmdbms/bin# ./disql SYSDBA/SYSDBA

服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间: 11.267(毫秒)
disql V7.6.1.92-Build(2021.02.26-135621)ENT 
SQL> select * from v$dm_ini where para_name='ENABLE_FLASHBACK';

行号     PARA_NAME        PARA_VALUE MIN_VALUE MAX_VALUE MPP_CHK SESS_VALUE FILE_VALUE DESCRIPTION                          PARA_TYPE
---------- ---------------- ---------- --------- --------- ------- ---------- ---------- ------------------------------------ ---------
1          ENABLE_FLASHBACK 0          0         1         N       0          0          Whether to enable flashback function SYS

已用时间: 9.921(毫秒). 执行号:39415.
SQL> select * from v$parameter where name='ENABLE_FLASHBACK';

行号     ID          NAME             TYPE VALUE SYS_VALUE FILE_VALUE DESCRIPTION                         
---------- ----------- ---------------- ---- ----- --------- ---------- ------------------------------------
1          392         ENABLE_FLASHBACK SYS  0     0         0          Whether to enable flashback function

已用时间: 7.486(毫秒). 执行号:39416.

可以通过ALTER SYSTEM语法修改静态或动态(系统级、会话级)参数值,使修改之后的参数值能够在全局范围内起作用。此参数为系统级SYS,修改后立即生效。

SQL> select * from v$parameter where name='ENABLE_FLASHBACK';

行号     ID          NAME             TYPE VALUE SYS_VALUE FILE_VALUE DESCRIPTION                         
---------- ----------- ---------------- ---- ----- --------- ---------- ------------------------------------
1          392         ENABLE_FLASHBACK SYS  1     1         0          Whether to enable flashback function

已用时间: 4.475(毫秒). 执行号:39418.
SQL> select * from v$dm_ini where para_name='ENABLE_FLASHBACK';

行号     PARA_NAME        PARA_VALUE MIN_VALUE MAX_VALUE MPP_CHK SESS_VALUE FILE_VALUE DESCRIPTION                          PARA_TYPE
---------- ---------------- ---------- --------- --------- ------- ---------- ---------- ------------------------------------ ---------
1          ENABLE_FLASHBACK 1          0         1         N       1          0          Whether to enable flashback function SYS

已用时间: 3.787(毫秒). 执行号:39419.

三、测试

3.1、创建表并插入记录

SQL> create table test_flashback(id int, name varchar2(32));

操作已执行
已用时间: 368.969(毫秒). 执行号:39420.

SQL> select * from test_flashback;
未选定行

3.2、插入数据并闪回查询

SQL> insert into test_flashback values(1,'lilv1');
影响行数 1

已用时间: 0.850(毫秒). 执行号:39475.
SQL> commit
2   ;
操作已执行
已用时间: 1.385(毫秒). 执行号:39476.
SQL> select sysdate ;

行号     SYSDATE                    
---------- ---------------------------
1          2021-05-22 23:49:34

已用时间: 0.728(毫秒). 执行号:39477.
SQL> insert into test_flashback values(2,'lilv2');
影响行数 1

已用时间: 0.862(毫秒). 执行号:39478.
SQL> commit;
操作已执行
已用时间: 1.342(毫秒). 执行号:39479.
SQL> select * from test_flashback;

行号     ID          NAME 
---------- ----------- -----
1          1           lilv1
2          2           lilv2

已用时间: 0.300(毫秒). 执行号:39481.
SQL> select * from test_flashback when timestamp '2021-05-22 23:49:34';

行号     ID          NAME 
---------- ----------- -----
1          1           lilv1

已用时间: 0.697(毫秒). 执行号:39482.

3.3、修改数据并闪回查询

SQL> update test_flashback set name='lilv22' where id=2;
影响行数 1

已用时间: 2.378(毫秒). 执行号:39483.
SQL> commit;
操作已执行
已用时间: 2.304(毫秒). 执行号:39484.
SQL> select * from test_flashback;

行号     ID          NAME  
---------- ----------- ------
1          1           lilv1
2          2           lilv22

SQL> select * from test_flashback when timestamp '2021-05-22 23:50:21';

行号     ID          NAME 
---------- ----------- -----
1          1           lilv1

3.4、删除数据并闪回查询

SQL> delete from test_flashback;
影响行数 2

已用时间: 0.809(毫秒). 执行号:39513.
SQL> commit;
操作已执行
已用时间: 0.928(毫秒). 执行号:39514.
SQL> select * from test_flashback when timestamp '2021-05-23 00:06:17';

行号     ID          NAME   
---------- ----------- -------
1          1           lilv
2          2           lilv222

已用时间: 0.734(毫秒). 执行号:39515.
SQL> select * from test_flashback;
未选定行

3.5、闪回版本查询

SQL> select * from test_flashback versions between timestamp '2021-05-23 00:04' and sysdate;

行号     ID          NAME   
---------- ----------- -------
1          1           lilv
2          2           lilv222
3          1           lilv
4          2           lilv222
5          2           lilv2

已用时间: 2.257(毫秒). 执行号:39517.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值