首页
产品
CLup:PostgreSQL高可用集群平台 CMiner: PostgreSQL中的CDC CData高性能数据库云一体机 CBackup数据库备份恢复云平台 CPDA高性能双子星数据库机 CSYun超融合虚拟机产品 ZQPool数据库连接池 ConshGuard数据保护产品
解决方案
数据库专业技术服务全栈式PostgreSQL解决方案Oracle分布式存储化数据库云PolarDB一体化解决方案
文章
客户及伙伴
中启开源
关于我们
公司简介 联系我们
中启开源
修改标题
往前插入
往后插入
删除

将数据闪回到指定的快照点

当出现数据丢失、损坏时,可以通过ConshGuard来快速的将数据库临时的闪回到指定快照点的版本,从而恢复已经损坏或丢失的数据。

下面通过一个例子来介绍通过闪回到指定快照点来恢复数据的方法:

假设我们有一张表test,他在2024年的1月10日14点59分时发生数据的损坏,发现的时候已经是15点02分了,这时候我们希望能够回到14点59分前,从而恢复损坏的数据。

先执行下面的SQL来查询出快照情况:

  1. postgres=# select * from consh_snapshot;
  2. snap_name | snap_timestamp
  3. ---------------------+-------------------------------
  4. 00000009-00000007-1 | 2024-01-10 14:56:55.861918+08
  5. 00000008-00000007-1 | 2024-01-10 14:57:25.712646+08
  6. 00000007-00000007-1 | 2024-01-10 14:57:55.929685+08
  7. 00000006-00000007-1 | 2024-01-10 14:58:25.721977+08
  8. 00000005-00000007-1 | 2024-01-10 14:58:56.012892+08
  9. 00000004-00000007-1 | 2024-01-10 14:59:25.819478+08
  10. 00000003-00000007-1 | 2024-01-10 14:59:55.868616+08
  11. 00000002-00000007-1 | 2024-01-10 15:00:25.925132+08
  12. 0000000E-00000008-1 | 2024-01-10 15:00:55.860658+08
  13. 0000000B-00000008-1 | 2024-01-10 15:01:25.876552+08
  14. 0000000A-00000008-1 | 2024-01-10 15:01:55.954251+08
  15. 0000000D-00000008-1 | 2024-01-10 15:02:26.037894+08
  16. (12 rows)

由于数据是在14:59分发生损坏的,所以这时我们可以回到59分前的最近一个快照00000005-00000007-1 | 2024-01-10 14:58:56.012892+08,首先通过con_gen_snapshot_sql函数来查出需要执行的SQL命令:

  1. postgres=# select * from consh_gen_snapshot_sql('2024-01-10 15:01:40.301245+08');
  2. consh_gen_snapshot_sql
  3. ----------------------------------------------------
  4. -- flashback to 2024-01-10 2024-01-10 14:58:56.012892+08
  5. BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ;
  6. SET TRANSACTION SNAPSHOT '00000005-00000007-1';
  7. (3 rows)

将上面SQL查出来的两行SQL命令在psql中执行:

  1. postgres=# BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ;
  2. SET TRANSACTION SNAPSHOT '00000005-00000007-1';
  3. BEGIN
  4. SET

执行上面的SQL之后,我们就可以切换到删除之前的快照点了,然后在执行查询,就可以看到已经损坏的数据回来了。

这时我们可以把快照点查询的数据恢复到另一张表中:

  1. postgres=*# create table test_bak as select * from test;
  2. SELECT 19800
目录
img