首页 > 数据库 >达梦数据库闪回查询

达梦数据库闪回查询

时间:2022-11-08 10:34:20浏览次数:46  
标签:闪回 name para 数据库 value 毫秒 SQL 执行 达梦

概念: 闪回技术主要是通过回滚段存储的 UNDO 记录来完成历史记录的还原。设置ENABLE_FLASHBACK 为 1 后,开启闪回功能。DM 会保留回滚段一段时间,回滚段保留的时间代表着可以闪回的时间长度。由 UNDO_RETENTION 参数指定。         开启闪回功能后,DM 会在内存中记录下每个事务的起始时间和提交时间。通过用户指定的时刻,查询到该时刻的事务号,结合当前记录和回滚段中的 UNDO 记录,就可以还原出特定事务号的记录。即指定时刻的记录状态。从而完成闪回查询。闪回查询功能完全依赖于回滚段管理,对于 DROP 等误操作不能恢复。 闪回特性可应用在以下方面:         1. 自我维护过程中的修复:当一些重要的记录被意外删除,用户可以向后移动到一个时间点,查看丢失的行并把它们重新插入现在的表内恢复;         2. 用于分析数据变化:可以对同一张表的不同闪回时刻进行链接查询,以此查看变化的数据。 注意:闪回功能适用于DML误操作回退使用,不适用于drop,truncate等DDL操作。切记在生产环境慎用drop,truncate等危险命令。   测试模拟: 1、检查闪回是否开启 SQL> select para_name,para_value,default_value,para_type from v$dm_ini where para_name like '%FLASHBACK%'; 行号    para_name        para_value default_value para_type ---------- ---------------- ---------- ------------- --------- 1          ENABLE_FLASHBACK 0          0            SYS 2、开启闪回功能 SQL> SP_SET_PARA_VALUE (1, 'ENABLE_FLASHBACK', 1); DMSQL 过程已成功完成 已用时间: 6.101(毫秒). 执行号:60201. SQL> select para_name,para_value,default_value,para_type from v$dm_ini where para_name like '%FLASHBACK%'; 行号    para_name        para_value default_value para_type ---------- ---------------- ---------- ------------- --------- 1          ENABLE_FLASHBACK 1          0            SYS 已用时间: 2.874(毫秒). 执行号:60202. SQL> SELECT SF_GET_PARA_VALUE (1, 'ENABLE_FLASHBACK') in_file,       SF_GET_PARA_VALUE (2, 'ENABLE_FLASHBACK') in_mem;2    行号    in_file              in_mem              ---------- -------------------- -------------------- 1          1                    1 已用时间: 2.885(毫秒). 执行号:60203. 3、查看回滚段记录保留时间 由于回滚段会自动清理,所以需要延长回滚记录的保留时间,单位是秒。回滚段参数太大容易引发回滚段膨胀,需要合理的规划和设置。 SQL> select para_name,para_value,default_value,para_type from v$dm_ini where para_name like '%UNDO_RETENTION%'; 行号    para_name      para_value default_value para_type ---------- -------------- ---------- ------------- --------- 1          UNDO_RETENTION 90.000000  90.000000    SYS 4、修改回滚段记录保留时间 SQL> SP_SET_PARA_DOUBLE_VALUE (1, 'UNDO_RETENTION', 1200); DMSQL 过程已成功完成 已用时间: 2.992(毫秒). 执行号:60205. SQL> select para_name,para_value,default_value,para_type from v$dm_ini where para_name like '%UNDO_RETENTION%'; 行号    para_name      para_value  default_value para_type ---------- -------------- ----------- ------------- --------- 1          UNDO_RETENTION 1200.000000 90.000000    SYS 已用时间: 2.795(毫秒). 执行号:60206. SQL> ALTER SYSTEM SET 'undo_retention'=1500 BOTH; DMSQL 过程已成功完成 已用时间: 4.387(毫秒). 执行号:60207. SQL> select para_name,para_value,default_value,para_type from v$dm_ini where para_name like '%UNDO_RETENTION%'; 行号    para_name      para_value  default_value para_type ---------- -------------- ----------- ------------- --------- 1          UNDO_RETENTION 1500.000000 90.000000    SYS 已用时间: 2.916(毫秒). 执行号:60208. --------------------------------------------------------------------------------------------------------------------------------------- 注:上述内容转载至https://blog.csdn.net/weixin_52814866/article/details/125105327。 5、闪回测试 创建测试表 SQL> create table td1(i int,name varchar(10)); 操作已执行 已用时间: 6.403(毫秒). 执行号:61600. (1)插入删除场景模拟 SQL> insert into td1 values(1,'jjs'); 影响行数 1 已用时间: 1.451(毫秒). 执行号:61601. SQL> commit; 操作已执行 已用时间: 1.416(毫秒). 执行号:61602. SQL> select sysdate(); 行号    sysdate()          ---------- ------------------- 1          2022-11-08 09:48:02 已用时间: 0.370(毫秒). 执行号:61603. SQL> delete from td1 where i=1; 影响行数 1 已用时间: 1.041(毫秒). 执行号:61604. SQL> commit; 操作已执行 已用时间: 2.696(毫秒). 执行号:61605. SQL> select sysdate(); 行号    sysdate()          ---------- ------------------- 1          2022-11-08 09:48:23 已用时间: 0.259(毫秒). 执行号:61606. 查看删除之前数据 SQL> select * from td1 when timestamp'2022-11-08 09:48:02'; 行号    i          name ---------- ----------- ---- 1          1          jjs 已用时间: 0.871(毫秒). 执行号:61607. (2)清空表(truncate)场景模拟 SQL> truncate table td1; 操作已执行 已用时间: 6.376(毫秒). 执行号:61609. 查询清空表数据之前的记录 SQL> select * from td1 when timestamp'2022-11-08 09:48:02'; 未选定行 已用时间: 0.487(毫秒). 执行号:61610. 注:上述实验说明表数据的闪回查询在truncate操作后会被清空。 (3)数据更新场景模拟 SQL> insert into td1 values(2,'JUST'); 影响行数 1 已用时间: 2.581(毫秒). 执行号:61611. SQL> commit; 操作已执行 已用时间: 0.791(毫秒). 执行号:61612. SQL> select sysdate(); 行号    sysdate()          ---------- ------------------- 1          2022-11-08 09:57:33 已用时间: 0.274(毫秒). 执行号:61613. SQL> update td1 set name='where' where i=2; 影响行数 1 已用时间: 0.969(毫秒). 执行号:61614. SQL> commit; 操作已执行 已用时间: 0.648(毫秒). 执行号:61615. SQL> select sysdate(); 行号    sysdate()          ---------- ------------------- 1          2022-11-08 09:57:56 已用时间: 0.175(毫秒). 执行号:61616. 查询更新前的数据 SQL> select * from td1 when timestamp'2022-11-08 09:57:33'; 行号    i          name ---------- ----------- ---- 1          2          JUST 已用时间: 0.748(毫秒). 执行号:61617. (4)修改表字段场景模拟 SQL> update td1 set name='what' where i=2; 影响行数 1 已用时间: 1.926(毫秒). 执行号:61618. SQL> commit; 操作已执行 已用时间: 1.305(毫秒). 执行号:61619. SQL> select sysdate(); 行号    sysdate()          ---------- ------------------- 1          2022-11-08 09:59:35 已用时间: 0.398(毫秒). 执行号:61620. SQL> alter table td1 add column(jobname varchar(20)); 操作已执行 已用时间: 14.671(毫秒). 执行号:61621. 查询修改表字段前的数据 SQL> select * from td1 when timestamp'2022-11-08 09:57:33'; 未选定行 已用时间: 1.161(毫秒). 执行号:61622. 注:说明修改表字段的操作会使表的闪回查询失效。

标签:闪回,name,para,数据库,value,毫秒,SQL,执行,达梦
From: https://www.cnblogs.com/zbcblog/p/16868792.html

相关文章