金仓数据库KingbaseES中闪回查询
关键字:
KingbaseES、kdb_flashback、时间戳、CSN、人大金仓
什么是闪回查询
闪回查询是KingbaseES数据库提供的强大工具,闪回查询是基于数据库日志的功能,它可以回滚到过去的某个时间点或CSN,并查询该时刻数据库的状态。通过闪回查询,用户可以快速、准确地识别和解决数据库中发生的问题,而无需执行复杂的恢复操作,对于故障排查、数据对比以及修复错误等工作的进行,闪回查询是一项非常有用的技术。
闪回查询相关技术的使用方法
在进行闪回查询之前,需要确认数据库的参数设置是否支持闪回查询。可以通过以下步骤来修改参数设置:
- 需要在配置文件中开启track_commit_timestamp 这个参数,并重新启动数据库。
- 在数据库中开启kdb_flashback.enable_flashback_query参数。
闪回查询主要有两种使用方式:基于时间戳和CSN(commit sequence number)。
时间戳即timestamp 用户可以在闪回查询的快照时间表达式里指定任意一个有效的时间戳。CSN 是提交顺序号,在KES中,初始的CSN是65536000000,随着用户的操作,CSN号会线性增加,用户同样可以通过CSN号实现闪回查询。闪回查询技术有一定的限制,在数据进行深度清理后和部分schema change 后将拒绝闪回查询。
闪回查询实例
通过时间戳(timestamp)闪回。
在以下的例子中,在表中分别插入2个和4个数据时,分别查询一下当前时间。
test=# create table a(id int, name varchar(10)); CREATE TABLE test=# insert into a values(1, 'haha'),(2, 'nana'); INSERT 0 2 test=# select now(); now ------------------------------- 2023-08-25 11:26:39.037865+08 (1 row) test=# insert into a values(3, 'bobo'),(4, 'qiqi'); INSERT 0 2 test=# select now(); now ------------------------------- 2023-08-25 11:27:20.794392+08 (1 row) test=# insert into a values(5, 'keke'),(6, 'sisi'); INSERT 0 2 |
test=# select * from a; id | name ----+------ 1 | haha 2 | nana 3 | bobo 4 | qiqi 5 | keke 6 | sisi (6 rows) test=# select * from a as of timestamp '2023-08-25 11:26:39.037865+08'; id | name ----+------ 1 | haha 2 | nana (2 rows) test=# select * from a as of timestamp '2023-08-25 11:27:20.794392+08'; id | name ----+------ 1 | haha 2 | nana 3 | bobo 4 | qiqi (4 rows) |
使用普通查询时,会返回表中所有数据,当分别使用所记录的两个时间戳查询时,会返回在该时间戳所记录时,表中所存在的数据。
根据CSN值查询。
同样是上述表,
ttest=# delete a; DELETE 6 test=# select pg_current_commit_seqno(); pg_current_commit_seqno ------------------------- 65536000031 (1 row) test=# insert into a values(1,'coco'); INSERT 0 1 test=# insert into a values(2,'pipi'); INSERT 0 1 test=# select * from a; id | name ----+------ 1 | coco 2 | pipi (2 rows) test=# select * from a as of csn 65536000031; id | name ----+------ 1 | coco (1 row) |
将表清空后,利用pg_current_commit_seqno()函数记录下当前csn值, pg_current_commit_seqno();函数返回的是下一条记录的csn值,所以在分别插入两条数据后,根据所记录csn值进行闪回时,闪回的结果中记录了一条数据。
总结
总之,闪回查询是KingbaseES数据库提供的强大功能,它可以帮助用户快捷回溯过去的数据库状态,进行故障排查和数据库恢复工作。使用闪回查询,可以根据时间戳或者csn值来查询过去的数据状态,无需执行复杂的恢复操作。通过合理配置数据库参数,可以增加闪回查询的保留时间,提高应用的可用性和可靠性。闪回查询是开发人员和数据库管路员日常工作中的重要工具,掌握其使用方法对于提升工作效率和增强数据库安全性具有重要意义。
参考资料
提供该题目相关内容在产品手册中可以系统学习的位置,例如: