kingbase回收站与闪回查询
kingbase回收站与闪回查询依赖插件kdb_flashback
插件kdb_flashback
KingbaseES数据库默认将他添加到 kingbase.conf 文件的 shared_preload_libraries 中,重启数据库时自动加载。

开启回收站
1、设置回收站参数
01、编辑参数文件kingbase.conf再文件末尾添加参数
kdb_flashback.db_recyclebin=on
02、生效参数变更
sys_ctl reload -D 数据目录
03、查看参数已生效
show kdb_flashback.db_recyclebin ;

2、查看回收站并闪回表drop
–查看回收站
select * from recyclebin;
select * from sys_recyclebin ;
–查看对象视图
select oid,relname,relpages,reltuples,relkind from sys_class where relname like ‘bin%’;
–闪回表drop
flashback table tbin to before drop;

3、清理回收站
不同database的回收站是独立的
回收站不会被自动清理,回收站需用户定期维护,避免回收站膨胀,用户可以通过PURGE操作对回收站进行维护,PURGE操作分为删除回收站中一个指定表和清空回收站。清理回收站时,回收站视图recyclebin和系统表sys_recyclebin中相关对象将被清除。
清理回收站的某个表:purge table 表名;
清空回收站:purge recyclebin;


使用脚本定期检查清理回收站里指定droptime之前的表
自定义函数,周期性调用该函数,传入参数希望清理多久之前的回收站的表
例如
清理5分钟前被删除的表:select purge_rceyclebin_table(‘5 mins’);
清理5小时前被删除的表:select purge_rceyclebin_table(‘5 hours’);
清理5天前被删除的表:select purge_rceyclebin_table(‘5 days’);
CREATE OR REPLACE FUNCTION purge_rceyclebin_table(interval_time interval)
RETURNS VOID AS $$
DECLARE
rec RECORD;
dead_ratio NUMERIC;
BEGIN
-- 获取需要处理的表列表
FOR rec IN
SELECT
nspname AS schema_name,
original_name AS table_name
FROM
sys_recyclebin
WHERE
droptime<now-interval_time
LOOP
RAISE NOTICE 'purge table : %.%', rec.schema_name, rec.table_name;
EXECUTE format('purge table %I.%I', rec.schema_name, rec.table_name);
END LOOP;
END;
$$ LANGUAGE plpgsql;


4、彻底删除表不进入回收站
drop table tbin purge;

闪回查询
能闪回查询的数据依赖于未被vacuum的记录,如果表上做了vacuum,死元组被清理了,就无法闪回了,所以不能保证可以闪回多久之前的数据
1、设置闪回查询参数
kdb_flashback.enable_flashback_query=on
track_commit_timestamp=on
2、闪回时间戳查询
select * from fb_example as of timestamp ‘2025-07-11 17:39:08’;

3、闪回CSN查询
通常CSN 方式进行闪回查询的时候,需要借助闪回版本查询确定合适的CSN 号
select versions_startscn, versions_endcsn, * from fb_example versions between csn minvalue and maxvalue;
select * from fb_example as of csn 65536000012;

4、闪回表到指定时间点
flashback table fb_example to csn 65536000012;
flashback table fb_example to timestamp ‘2025-07-11 17:50:20’;


641

被折叠的 条评论
为什么被折叠?



