概述
TDSQL Boundless 回收站功能提供数据安全保障机制,当用户误删除表时,可以通过回收站快速恢复数据。系统通过一张数据字典表,存储被删除的数据库对象信息(包括数据库和表等信息),支持数据恢复操作。
工作原理
当启用回收站功能后,执行
DROP TABLE 操作时,系统会自动转换为RENAME TABLE db.t TO __tdsql__recycle_bin__.<RECYCLED_TABLE>,将被 DROP 的表移到__tdsql__recycle_bin__中。恢复表时执行反向操作,执行
RENAME TABLE __tdsql__recycle_bin__.<RECYCLED_TABLE> TO db.t,将被 DROP 的表恢复到原来的数据库中。使用限制
不支持指定库恢复到任意时刻。
不支持库级别的回收和恢复。
不支持库的触发器、function、存储过程的回收与恢复。
不支持普通用户恢复表。
不支持单独回收索引或者恢复索引。
不支持分区表的某个子分区(含一级和二级)的回收与恢复。
不支持临时表。
不支持指定 Drop 表前的表名来执行 Flashback Query。
使用说明
当打开回收站功能后,用户删除的表默认被放入回收站中(也意味着数据空间并未释放),除非用户手动清除(PURGE)或者对象定期被数据库系统删除。
开启回收站功能
开启回收站:
tdsql> SET PERSIST tdsql_recycle_bin_enabled=1;
关闭回收站:
tdsql> SET PERSIST tdsql_recycle_bin_enabled=0;
说明:
回收站功能默认关闭,开启后删除的表会自动进入回收站。
tdsql_recycle_bin_enabled为全局变量。查看回收站表信息
tdsql>SHOWRECYCLEBIN;
返回结果示例:
tdsql > SHOW RECYCLEBIN;+-----------+---------------+--------------+--------------------------------+---------------------+---------------------+| tindex_id | origin_schema | origin_table | recycle_table | drop_time | purge_time |+-----------+---------------+--------------+--------------------------------+---------------------+---------------------+| 53135 | sbtest | sbtest1_*** | bin$zxrh/bsnned9vygu4ioafg==$1 | 2026-01-14 16:19:54 | 2026-01-21 16:19:54 |+-----------+---------------+--------------+--------------------------------+---------------------+---------------------+1 row in set (0.01 sec)
字段说明:
参数 | 说明 |
tindex_id | 表对象 ID。 |
origin_schema | 原数据库名。 |
origin_table | 原表名。 |
recycle_table | 回收站中的表名。 命名规则说明: 由于回收站需要集中管理来自不同数据库被删除的表,系统采用特定编码确保表名全局唯一。编码格式为: bin$base64(md5(__ + tdsql_ + {db_name} + {table_name}))${version},其中${version}为递增数值标记,用于区分同一表名的多次删除记录。 |
drop_time | 删除时间。 |
purge_time | 自动清理时间(默认7天后)。 |
恢复表
语法:
FLASHBACK TABLE $recycle_table_name TO BEFORE DROP [RENAME TO $new_table_name];
按照指定的方式恢复表。如果有同名表,会报错。
可以指定:
$recycle_table: 表进入回收站后的别名。$new_table_name:表恢复时的新命名。说明:
权限要求: 需要具备原表的操作权限,或拥有管理员/超级用户权限。
使用示例:
-- 恢复表并重命名tdsql> FLASHBACK TABLE `bin$zxrh/bsnned9vygu4ioafg==$1` TO BEFORE DROP RENAME TO sbtest11;
直接删除表(不再转存入回收站库)
DROP TABLE $NAME PURGE;
清理回收站
清理特定表:
PURGE RECYCLEBIN $recyele_table_name;
清空整个回收站
PURGE RECYCLEBIN;
相关参数
参数名 | 类型 | 默认值 | 说明 |
tdsql_recycle_bin_enabled | bool | 0 | 是否开启回收站。 0(默认值):关闭。 1:开启 |
tdsql_recycle_bin_max_size | ulong | 18446744073709551615 | 回收站最大对象数量限制。 |
tdsql_recycle_bin_drop_if_exceed_limit | ulong | 1 | 超过限制时是否 DROP 表。 0:否。 1(默认值):是。 |
tdsql_recycle_bin_retention | ulong | 604800 | 回收站对象保留时间(秒),默认7天,超过时间的表将被自动清理。 |