更新时间:2026-07-28 GMT+08:00
闪回库
背景信息
可以恢复意外删除的库,从库级回收站(database recycle bin)中恢复被删除的库及其关联对象。闪回库DROP是基于回收站机制,通过还原回收站中记录的库的物理文件,实现已DROP库的恢复。
前提条件
- 开启enable_db_recyclebin参数,启用回收站,参数使用请参见《参考》中“数据库运行参数说明 > GUC参数说明 > 闪回相关参数”章节中的enable_db_recyclebin。
- dbrecyclebin_retention_time参数用于设置回收站对象的保留时间,超过该时间的回收站对象将被自动清理,参数使用请参见《参考》中“数据库运行参数说明 > GUC参数说明 > 闪回相关参数”章节中的dbrecyclebin_retention_time。
- dbrecyclebin_maxsize参数用于设置回收站容量,超过容量将不能放入回收站,参数使用请参见《参考》中“数据库运行参数说明 > GUC参数说明 > 闪回相关参数”章节中的dbrecyclebin_maxsize。
规格约束
- 回收站中的数据库,在没有恢复前需要占用额外的存储空间。
- 当表空间不足或者达到配置的清理周期时,回收站数据将自动清理,被清理或部分清理的库对象将不能被闪回,当库级回收站和表级回收站同时存在对象时,将优先清理表空间关联的库回收站对象,清理空间将对DML性能产生影响。
- 回收站中的数据库不支持连接、DQL、DML、DDL、DCL操作。
- 支持包含Astore、Ustore数据表的数据库场景,不支持Dstore场景。
- 继承DROP DATABASE的报错场景约束。
- 不支持PDB闪回。
- 不支持对M-Compatibility兼容模式库下创建的库进行闪回。
- 当前DROP DATABASE在事务提交后,文件物理删除之前存在短暂时间窗口,若此时宕机会发生文件残留现象。闪回库在PURGE清理过程原理相同,有低概率发生文件残留现象。
- 系统库所在表空间的磁盘达到容量阈值,被设置为磁盘只读后,无法进行闪回。
相关语法
- 删除库放入回收站。
DROP DATABASE database_name [PURGE]
- 清理库回收站对象。
PURGE { DATABASE {database_name} | DATABASE RECYCLEBIN }
- 闪回被删除的库。
TIMECAPSULE DATABASE { database_name } TO BEFORE DROP [RENAME TO new_database_name]
参数说明
- DROP DATABASE database_name [PURGE]
- 默认将数据库放入回收站中,使用PURGE直接清理。
- PURGE DATABASE RECYCLEBIN
- 表示清理库级回收站对象。
- TO BEFORE DROP 使用这个子句检索回收站中已删除的库对象,可以指定原始用户指定的库的名称,或库对象删除时系统生成的名称。
- RENAME TO
语法示例
- 示例一:开启库级回收站后,删除数据库放入回收站。
--查看回收站。 gaussdb=# select * from gs_db_recyclebin; rcydbid | rcyname | rcyoriginname | rcyrecyclecsn | rcyrecycletime | rcytablespaces | rcydbsize ---------+---------+---------------+---------------+----------------+----------------+----------- (0 rows) --创建数据库。 gaussdb=# create database flashback_db; CREATE DATABASE --删除数据库放入回收站。 gaussdb=# drop database flashback_db; DROP DATABASE gaussdb=# select * from gs_db_recyclebin; rcydbid | rcyname | rcyoriginname | rcyrecyclecsn | rcyrecycletime | rcytablespaces | rcydbsize ---------+---------------------------+---------------+---------------+-------------------------------+----------------+----------- 82520 | BIN$1425867F$2F70DBD0==$0 | flashback_db | 13908 | 2024-12-11 09:00:07.451273-05 | 1663 | 26272 (1 row)
- 示例二:开启库级回收站后,删除数据库不加入回收站。
--查看回收站。 gaussdb=# select * from gs_db_recyclebin; rcydbid | rcyname | rcyoriginname | rcyrecyclecsn | rcyrecycletime | rcytablespaces | rcydbsize ---------+---------+---------------+---------------+----------------+----------------+----------- (0 rows) --创建数据库。 gaussdb=# create database flashback_db; CREATE DATABASE --删除数据库不放入回收站。 gaussdb=# drop database flashback_db purge; DROP DATABASE gaussdb=# select * from gs_db_recyclebin; rcydbid | rcyname | rcyoriginname | rcyrecyclecsn | rcyrecycletime | rcytablespaces | rcydbsize ---------+---------+---------------+---------------+----------------+----------------+----------- (0 rows)
- 示例三:开启库级回收站后,闪回回收站中的数据库。
--查看回收站。 gaussdb=# select * from gs_db_recyclebin; rcydbid | rcyname | rcyoriginname | rcyrecyclecsn | rcyrecycletime | rcytablespaces | rcydbsize ---------+---------+---------------+---------------+----------------+----------------+----------- (0 rows) --创建数据库。 gaussdb=# create database flashback_db; CREATE DATABASE --删除数据库放入回收站。 gaussdb=# drop database flashback_db; DROP DATABASE gaussdb=# select * from gs_db_recyclebin; rcydbid | rcyname | rcyoriginname | rcyrecyclecsn | rcyrecycletime | rcytablespaces | rcydbsize ---------+---------------------------+---------------+---------------+------------------------------+----------------+----------- 82523 | BIN$1425B67F$2F7B1738==$0 | flashback_db | 13916 | 2024-12-11 09:02:35.20606-05 | 1663 | 26272 (1 row) --可通过回收站名闪回drop后的数据库。 gaussdb=# timecapsule database "BIN$1425B67F$2F7B1738==$0" to before drop; TimeCapsule Database --可通过原名闪回drop后的数据库。 gaussdb=# timecapsule database flashback_db to before drop; TimeCapsule Database --可通过回收站名闪回后重命名。 gaussdb=# timecapsule database "BIN$1425B67F$2F7B1738==$0" to before drop rename to flashback_db1; TimeCapsule Database --可通过原名闪回后重命名。 gaussdb=# timecapsule database flashback_db to before drop rename to flashback_db1; TimeCapsule Database gaussdb=# select * from gs_db_recyclebin; rcydbid | rcyname | rcyoriginname | rcyrecyclecsn | rcyrecycletime | rcytablespaces | rcydbsize ---------+---------+---------------+---------------+----------------+----------------+----------- (0 rows) --查看闪回后的库。 gaussdb=# select * from pg_database where datname = 'flashback_db'; datname | datdba | encoding | datcollate | datctype | datistemplate | datallowconn | datconnlimit | datlastsysoid | datfrozenxid | dattablespace | datcompatibility | datacl | datfrozenxid64 | datminmxid | dattimezone | dattype --------------+--------+----------+-------------+-------------+---------------+--------------+--------------+---------------+--------------+--------------- +------------------+--------+----------------+------------+-------------+--------- flashback_db | 10 | 7 | en_US.UTF-8 | en_US.UTF-8 | f | t | -1 | 12995 | 0 | 1663 | A | | 40936 | 2 | PRC | D (1 row)
- 示例四:清理库回收站中的数据库。
--查看回收站。 gaussdb=# select * from gs_db_recyclebin; rcydbid | rcyname | rcyoriginname | rcyrecyclecsn | rcyrecycletime | rcytablespaces | rcydbsize ---------+---------+---------------+---------------+----------------+----------------+----------- (0 rows) --创建数据库。 gaussdb=# create database flashback_db; CREATE DATABASE --删除数据库放入回收站。 gaussdb=# drop database flashback_db; DROP DATABASE --查看回收站。 gaussdb=# select * from gs_db_recyclebin; rcydbid | rcyname | rcyoriginname | rcyrecyclecsn | rcyrecycletime | rcytablespaces | rcydbsize ---------+---------------------------+---------------+---------------+-------------------------------+----------------+----------- 82527 | BIN$1425F67F$2F9075F0==$0 | flashback_db | 13943 | 2024-12-11 09:11:47.673528-05 | 1663 | 26272 (1 row) --清理回收站中的数据库。 gaussdb=# purge database "BIN$1425F67F$2F9075F0==$0"; PURGE DATABASE --查看回收站中的数据库已经被清理。 gaussdb=# select * from gs_db_recyclebin; rcydbid | rcyname | rcyoriginname | rcyrecyclecsn | rcyrecycletime | rcytablespaces | rcydbsize ---------+---------+---------------+---------------+----------------+----------------+----------- (0 rows)
- 示例五:清理库级回收站。
--查看回收站。 gaussdb=# select * from gs_db_recyclebin; rcydbid | rcyname | rcyoriginname | rcyrecyclecsn | rcyrecycletime | rcytablespaces | rcydbsize ---------+---------+---------------+---------------+----------------+----------------+----------- (0 rows) --创建若干数据库。 gaussdb=# create database flashback_db1; CREATE DATABASE gaussdb=# create database flashback_db2; CREATE DATABASE gaussdb=# create database flashback_db3; CREATE DATABASE --删除数据库放入回收站。 gaussdb=# drop database flashback_db1; DROP DATABASE gaussdb=# drop database flashback_db2; DROP DATABASE gaussdb=# drop database flashback_db3; DROP DATABASE --查看库级回收站。 gaussdb=# select * from gs_db_recyclebin; rcydbid | rcyname | rcyoriginname | rcyrecyclecsn | rcyrecycletime | rcytablespaces | rcydbsize ---------+---------------------------+---------------+---------------+-------------------------------+----------------+----------- 82524 | BIN$1425C67F$2FAD4D88==$0 | flashback_db1 | 13955 | 2024-12-11 09:14:55.763265-05 | 1663 | 26272 82531 | BIN$1426367F$2FAD59A8==$0 | flashback_db2 | 13956 | 2024-12-11 09:14:57.271674-05 | 1663 | 26272 82532 | BIN$1426467F$2FAD6530==$0 | flashback_db3 | 13957 | 2024-12-11 09:14:58.37639-05 | 1663 | 26272 (3 rows) --清理回收站。 gaussdb=# purge database recyclebin; PURGE DATABASE RECYCLEBIN gaussdb=# select * from gs_db_recyclebin; rcydbid | rcyname | rcyoriginname | rcyrecyclecsn | rcyrecycletime | rcytablespaces | rcydbsize ---------+---------+---------------+---------------+----------------+----------------+----------- (0 rows)
父主题: 闪回恢复