达梦数据库闪回技术(困难)

声明:仅供技术参考非官方专业指导,如操作导致数据问题概不负责!!!

1、概念

闪回技术,就是为了用户可以迅速处理数据逻辑损坏的情况而产生的。开启闪回功能后,DM 会在内存中记录下每个事务的起始时间和提交时间。通过用户指定的时刻,查询到该时刻的事务号,结合当前记录和回滚段中的 UNDO 记录,就可以还原出特定事务号的记录。即指定时刻的记录状态。从而完成闪回查询。闪回查询功能完全依赖于回滚段管理,对于 DROP 等误操作不能恢复。

2、原理

闪回技术主要是通过回滚段存储的 UNDO 记录来完成历史记录的还原。

3、试验步骤

①、开启闪回及修改UNDO的保留时间

达梦数据库默认是不开启闪回功能的,查询闪回是否开启,1为开启,0为关闭

 

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

 

行号       PARA_NAME        PARA_VALUE

---------- ---------------- ----------

1          ENABLE_FLASHBACK 0

 

已用时间: 4.498(毫秒). 执行号:54600

 

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

DMSQL 过程已成功完成

已用时间: 15.343(毫秒). 执行号:54601.

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

 

行号       PARA_NAME        PARA_VALUE

---------- ---------------- ----------

1          ENABLE_FLASHBACK 1

 

已用时间: 2.789(毫秒). 执行号:54602.

 

 

②、查询UNDO的保留时间并做修改

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

 

行号       PARA_NAME      PARA_VALUE

---------- -------------- ----------

1          UNDO_RETENTION 90.000000

 

SQL> SP_SET_PARA_DOUBLE_VALUE(1,'UNDO_RETENTION',1800);

DMSQL 过程已成功完成

已用时间: 14.577(毫秒). 执行号:54610.

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

 

行号       PARA_NAME      PARA_VALUE

---------- -------------- -----------

1          UNDO_RETENTION 1800.000000

 

已用时间: 3.107(毫秒). 执行号:54611.

 

③、

SQL> INSERT INTO T1 VALUES(1,'AAA1');

SQL> INSERT INTO T1 VALUES(2,'AAA2');

SQL> INSERT INTO T1 VALUES(3,'AAA3');

SQL> INSERT INTO T1 VALUES(4,'AAA3');

SQL> COMMIT;

操作已执行

已用时间: 2.530(毫秒). 执行号:54619.

SQL> SELECT * FROM T1;

 

行号       ID          NAME

---------- ----------- --------------------

1          1           AAA1

2          2           AAA2

3          3           AAA3

4          4           AAA3

 

已用时间: 0.604(毫秒). 执行号:54620.

 

 

SQL> SELECT SYSDATE;

 

行号       SYSDATE

---------- -------------------

1          2022-10-17 15:52:52

 

已用时间: 0.261(毫秒). 执行号:54621.

 

 

 

SQL> INSERT INTO T1 VALUES(5,'AAA5');

SQL> INSERT INTO T1 VALUES(6,'AAA6');

SQL> COMMIT;

SQL> SELECT * FROM T1;

 

行号       ID          NAME

---------- ----------- --------------------

1          1           AAA1

2          2           AAA2

3          3           AAA3

4          4           AAA3

5          5           AAA5

6          6           AAA6

 

6 rows got

 

已用时间: 0.407(毫秒). 执行号:54625.

SQL> SELECT VERSIONS_ENDTRXID, NAME FROM T1 VERSIONS BETWEEN TIMESTAMP '2022-10-17 15:52:52' AND SYSDATE;

 

行号       VERSIONS_ENDTRXID    NAME

---------- -------------------- --------------------

1          NULL                 AAA1

2          NULL                 AAA2

3          NULL                 AAA3

4          NULL                 AAA3

5          NULL                 AAA5

6          NULL                 AAA6

 

6 rows got

 

已用时间: 0.638(毫秒). 执行号:54626.

SQL> DELETE FROM T1 WHERE ID=5;

SQL> COMMIT;

操作已执行

已用时间: 2.509(毫秒). 执行号:54628.

SQL> SELECT VERSIONS_ENDTRXID, NAME FROM T1 VERSIONS BETWEEN TIMESTAMP '2022-10-17 15:52:52' AND SYSDATE;

 

行号       VERSIONS_ENDTRXID    NAME

---------- -------------------- --------------------

1          NULL                 AAA1

2          NULL                 AAA2

3          NULL                 AAA3

4          NULL                 AAA3

5          NULL                 AAA5

6          NULL                 AAA6

7          3624                 AAA5

 

7 rows got

 

已用时间: 0.547(毫秒). 执行号:54629.

通过操作时间及闪回版本查询,被删除的数据已经找到。

SQL>SELECT VERSIONS_ENDTRXID, NAME,* FROM T1 VERSIONS BETWEEN TIMESTAMP '2022-10-17 15:52:52' AND SYSDATE;

d1084c513b014ec4b8cbc5f7fdc3987a.png

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值