人大金仓数据库KingbaseES中FLASHBACK_TABLE

本文介绍了KingbaseES数据库中使用FLASHBACKTABLE关键字进行数据恢复的方法,包括闪回回收站中的表、根据时间戳或CSN恢复到特定时刻,以及如何启用和禁用触发器。此功能有助于在数据误删或意外操作后快速恢复数据,提升数据库可用性。
摘要由CSDN通过智能技术生成

金仓数据库KingbaseES中FLASHBACK TABLE关键字:

KingbaseES、闪回、FLASHBACK TABLE、时间戳、CSN、人大金仓

前提条件

FLASHBACK TABLE是指将某个表闪回至一个历史的快照时刻,也可以将回收站中的表闪回。回收站功能默认关闭,需要手动开启。开启或关闭回收站的参数名称为kdb_flashback.db_recyclebin,参数为bool类型,参数级别为pgc_sighup。根据时间戳或CSN返回时,需要将配置文件kingbase.conf中的track_commit_timestamp参数改为on,并且需要重新初始化数据库使其生效。

FLASHBACK TABLE的语法

FLASHBACK TABLE table_name TO
{ [ BEFREO DROP [ RENAME TO newname ] ] |
[ { TIMESTAMP | CSN | SCN } asof_item [ { ENABLE | DISABLE } TRIGGERS ] ]}
其中,
table_name表示需要闪回的表名;
BEFREO DROP表示将回收站当中的表闪回;
RENAME TO newname表示将table_name重命名为newname,也可以不进行重命名,但是如果在当前SCHEMA下已经存在同名的表,就会闪回失败,那么必须需要使用RENAME TO重命名。
asof_item表示闪回到表的历史时刻,时刻由时间戳(TIMESTAMP)或CSN决定
{ENABLE | DISABLE } TRIGGERS 指开启或关闭触发器行为,默认情况下是开启的。

FLASHBACK TABLE实例

  • 闪回回收站中的表
首先,查询回收站功能是否开启:
test=# show kdb_flashback.db_recyclebin;
kdb_flashback.db_recyclebin
-----------------------------
on
(1 row)
开启时,可用FLASHBACK TABLE table_name TO{ [ BEFREO DROP [ RENAME TO newname ] ] 闪回回收站中的表,如:
test=# create table a (id int);
CREATE TABLE
test=# insert into a values(1),(2),(3);
INSERT 0 3
test=# select * from a;
id
----
1
2
3
(3 rows)
test=# drop table a;
DROP TABLE
创建以上表,并将该表删除,该表就会被放置到回收站当中。利用FLASHBACK TABLE将该表闪回至被删除之前的时刻。
test=# flashback table a to before drop;
FLASHBACK TABLE
test=# select * from a;
id
----
1
2
3
(3 rows)
也可以进行重命名:
test=# flashback table a to before drop rename to aaa;
FLASHBACK TABLE
test=# select * from aaa;
id
----
1
2
3
(3 rows)
  • 闪回至某一历史的快照时刻
FLASHBACK TABLE table_name TO [ { TIMESTAMP | CSN | SCN } asof_item [ { ENABLE | DISABLE } TRIGGERS ] ]}
使用该方式闪回时,需要确定一个时间戳或者CSN,可以通过now函数和pg_current_commit_seqno来记住一个想要闪回的快照时刻。
例如,根据时间戳闪回:
test=# select now;
now
-------------------------------
2023-08-28 16:30:11.158656+08
(1 row)
test=# update a set id=999 where id=3;
UPDATE 1
test=# select * from a;
id
-----
1
2
999
(3 rows)
test=# flashback table a to timestamp('2023-08-28 16:30:11.158656+08');
FLASHBACK TABLE
test=# select * from a;
id
----
1
2
3
(3 rows)
使用FLASHBACK TABLE之后,当前表中存储的数据为指定时间戳之前的数据。
根据CSN闪回:
test=# select pg_current_commit_seqno;
pg_current_commit_seqno
-------------------------
65536000008
(1 row)
test=# insert into a values(4);
INSERT 0 1
test=# insert into a values(5);
INSERT 0 1
test=# select * from a;
id
----
1
2
3
4
5
(5 rows)
test=# flashback table a to csn 65536000008;
FLASHBACK TABLE
test=# select * from a;
id
----
1
2
3
4
(4 rows)
从闪回数据来看,其与时间戳闪回的表现有所不同,这是因为,利用pg_current_commit_seqno函数返回CSN值时,其返回的是将要使用是CSN值,比如在上表的例子中返回的是insert into a values(4);语句的CSN,所以上表返回的数据当中有4。

总结

FLASHBACK TABLE功能是KingbaseES数据库中一个高效的恢复功能,可以帮助在意外操作或错误删除表时进行快速恢复。通过合理地使用FLASHBACK TABLE功能,可以最大程度地减少数据丢失的风险,并提高数据库的可用性。

参考资料

提供该题目相关内容在产品手册中可以系统学习的位置,例如:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值