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

干货攻略 | 达梦数据库闪回机制

达梦E学 2021-06-23
1506

/ 这是我的第213篇文章

达梦干货攻略

【Date:2021.06.23】

MY ARTICLE

当用户操作不慎导致错误的删改数据时,非常希望有一种简单快捷的方式可以恢复数据。闪回技术,就是为了用户可以迅速处理这种数据逻辑损坏的情况而产生的。

闪回技术主要是通过回滚段存储的 UNDO 记录来完成历史记录的还原。数据库会在内存中记录下每个事务的起始时间和提交时间。通过用户指定的时刻,查询到该时刻的事务号,结合当前记录和回滚段中的 UNDO 记录,就可以还原出特定事务号的记录。


本章内容已在如下环境上测试:
操作系统:CentOS7;
数据库:达梦数据库DM8。

GAN HUO

开启闪回


数据库默认是没有开启闪回

查询是否开启闪回,0为关闭,1为打开

    SQL> select para_name,para_value from v$dm_ini where para_name='ENABLE_FLASHBACK';


    开启闪回

      SQL> SP_SET_PARA_VALUE(1,'ENABLE_FLASHBACK',1);

      或者

        SQL> alter system set 'ENABLE_FLASHBACK' = 1 both;


        再次查询闪回状态

          SQL> select para_name,para_value from v$dm_ini where para_name='ENABLE_FLASHBACK';






          GAN HUO

          闪回查询


          例:闪回查询特定时刻的 PERSON_TYPE2 表

          创建测试表PERSON_TYPE2 表
            SQLCREATE TABLE PERSON.PERSON_TYPE2 AS SELECT * FROM PERSON.PERSON_TYPE;
            SQL> SELECT * FROM PERSON.PERSON_TYPE2;

            查询当前时间

              SQL> SELECT SYSDATE FROM DUAL;

                SQL> INSERT INTO PERSON.PERSON_TYPE2 VALUES(5,'防损员');
                SQL> INSERT INTO PERSON.PERSON_TYPE2 VALUES(6,'保洁员');
                SQL> COMMIT;

                  SQL> SELECT * FROM PERSON.PERSON_TYPE2;

                  查询数据插入之前的数据

                    SQL> SELECT * FROM PERSON.PERSON_TYPE WHEN TIMESTAMP '2021-06-23 09:53:20';



                    GAN HUO

                    闪回版本查询

                    用户通过闪回版本查询子句,可以得到指定表过去某个时间段内,事务导致记录变化的全部记录。指定条件可以为时刻,或事务号。

                    查询数据

                      SQL> select * from person.person_type2;

                      更新数据

                        SQL> SELECT SYSDATE FROM DUAL;

                          UPDATE PERSON.PERSON_TYPE2 SET NAME='保安员' WHERE   PERSON_TYPEID=5;
                          COMMIT;
                          UPDATE PERSON.PERSON_TYPE2 SET NAME='收银员' WHERE   PERSON_TYPEID=5;
                          COMMIT;

                          进行闪回版本查询,获得指定时间段内变化的记录。

                            SQL> SELECT VERSIONS_ENDTRXID, NAME FROM PERSON.PERSON_TYPE2 VERSIONS BETWEEN TIMESTAMP '2021-06-23 10:16:40' AND SYSDATE;






                            好,以上是本次分享内容,希望能给大家带来帮助。

                            往期干货回顾

                            干货丨DMSQL执行耗时异常问题排查

                            干货丨达梦数据库大内存SQL定位和监控

                            干货丨达梦数据库动态增加实时备库


                            【内容】:林夕

                            【编辑】:王


                            文章转载自达梦E学,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                            评论