回收站从原理上来说就是一个数据字典表,用于放置用户删除的数据库对象信息,包括数据库和表等信息。用户删除的信息被放入回收站后,其实仍然占据着物理空间,除非您手动清除(PURGE)或者对象定期被数据库系统删除。
回收站支持的对象
如下表所示,在当前版本中,支持进入回收站的对象有索引、表和库。
| 模式 | 索引(Index) | 表(Table) | 数据库(Database) | 租户(Tenant) |
|---|---|---|---|---|
| MySQL | 支持 | 支持 | 支持 | 支持 |
| Oracle | 支持 | 支持 | 不支持 | 不支持 |
注意
直接
DROP索引不会进入回收站,删表时表上的索引会跟随主表一起进入回收站。不能对回收站的对象做任何查询和 DML 操作,DDL 操作中只能进行 Purge 和 Flashback。
租户回收站的管理主要由
sys租户来完成。
查看回收站
租户管理员可以通过如下命令,查看回收站中的对象:
obclient> SHOW RECYCLEBIN;
开关回收站
租户被创建后,默认回收站为关闭状态。如果开启了回收站,在对数据库对象进行 TRUNCATE 或 DROP 操作后,对象会进入回收站,控制回收站开启关闭的命令分为 Global 级别和 Session 级别:
Global 级别的开启、关闭语句如下所示:
obclient> SET GLOBAL recyclebin = ON/OFF;Session 级别的开启、关闭语句如下所示:
obclient> SET @@recyclebin = ON/OFF;
回收站恢复
使用 FLASHBACK 命令可恢复回收站中的数据库和表对象,只有租户的管理员用户才可以使用该命令。恢复时可修改对象的名称,但是不要和已有对象重名。
下述示例语句展示了如何恢复回收站中的租户、数据库及表对象:
恢复租户
obclient> FLASHBACK TENANT tenant_name TO BEFORE DROP [RENAME to new_tenant_name];恢复对象数据库
obclient> FLASHBACK DATABASE object_name TO BEFORE DROP [RENAME TO database_name];恢复对象表
obclient> FLASHBACK TABLE object_name TO BEFORE DROP [RENAME to table_name];
命令的使用限制如下:
FLASHBACK数据库对象的顺序需要符合从属关系,即:Database > Table。恢复表会连同索引一并恢复。
通过
PURGE命令可以单独删除索引,但是FLASHBACK命令不支持单独恢复索引。如果一张表在进回收站之前属于某个表组,则删除该表组后再恢复改表会导致它不属于任何一个表组。如果表组还在,则恢复后该表还在原表组中。
回收站清理
频繁删除数据库对象并重建,会在回收站产生大量数据,这些数据可以通过 PURGE 命令清理。需要注意的是,PURGE 操作会删除对象和从属于该对象的对象(Database > Table > Index )。
执行 PURGE 命令后,在 OceanBase 数据库的回收站中将再也查不到对象的信息,真实数据也最终会被垃圾回收。当一个对象的上层对象被 Purge,则当前回收站中关联的下一层对象也会被 Purge。
下述示例展示了一些如何通过 PURGE 命令清理回收站中的数据:
sys租户从回收站把指定租户物理删除。obclient> PURGE TENANT tenant_name;从回收站把指定库物理删除。
obclient> PURGE DATABASE object_name;从回收站中把指定表物理删除。
obclient> PURGE TABLE object_name;从回收站中把指定索引表物理删除。
obclient> PURGE TABLE object_name;清空整个回收站。
obclient> PURGE RECYCLEBIN;




