将数据闪回到指定的快照点
当出现数据丢失、损坏时,可以通过ConshGuard来快速的将数据库临时的闪回到指定快照点的版本,从而恢复已经损坏或丢失的数据。
下面通过一个例子来介绍通过闪回到指定快照点来恢复数据的方法:
假设我们有一张表test,他在2024年的1月10日14点59分时发生数据的损坏,发现的时候已经是15点02分了,这时候我们希望能够回到14点59分前,从而恢复损坏的数据。
先执行下面的SQL来查询出快照情况:
postgres=# select * from consh_snapshot;
snap_name | snap_timestamp
---------------------+-------------------------------
00000009-00000007-1 | 2024-01-10 14:56:55.861918+08
00000008-00000007-1 | 2024-01-10 14:57:25.712646+08
00000007-00000007-1 | 2024-01-10 14:57:55.929685+08
00000006-00000007-1 | 2024-01-10 14:58:25.721977+08
00000005-00000007-1 | 2024-01-10 14:58:56.012892+08
00000004-00000007-1 | 2024-01-10 14:59:25.819478+08
00000003-00000007-1 | 2024-01-10 14:59:55.868616+08
00000002-00000007-1 | 2024-01-10 15:00:25.925132+08
0000000E-00000008-1 | 2024-01-10 15:00:55.860658+08
0000000B-00000008-1 | 2024-01-10 15:01:25.876552+08
0000000A-00000008-1 | 2024-01-10 15:01:55.954251+08
0000000D-00000008-1 | 2024-01-10 15:02:26.037894+08
(12 rows)
由于数据是在14:59分发生损坏的,所以这时我们可以回到59分前的最近一个快照00000005-00000007-1 | 2024-01-10 14:58:56.012892+08
,首先通过con_gen_snapshot_sql
函数来查出需要执行的SQL命令:
postgres=# select * from consh_gen_snapshot_sql('2024-01-10 15:01:40.301245+08');
consh_gen_snapshot_sql
----------------------------------------------------
-- flashback to 2024-01-10 2024-01-10 14:58:56.012892+08
BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ;
SET TRANSACTION SNAPSHOT '00000005-00000007-1';
(3 rows)
将上面SQL查出来的两行SQL命令在psql中执行:
postgres=# BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ;
SET TRANSACTION SNAPSHOT '00000005-00000007-1';
BEGIN
SET
执行上面的SQL之后,我们就可以切换到删除之前的快照点了,然后在执行查询,就可以看到已经损坏的数据回来了。
这时我们可以把快照点查询的数据恢复到另一张表中:
postgres=*# create table test_bak as select * from test;
SELECT 19800
目录