OceanBase 数据库中的租户如何进入回收站机制?

适用版本

OceanBase 数据库 V2.2.7x 及后续版本。

回收站原理

目前,在 OceanBase 数据库中,能进入回收站的对象包括租户、数据库、表和索引。它们之间有一定的从属关系。有关数据库、表、索引等数据库对象进入回收站的机制,请参见 OceanBase 数据库数据库对象进入回收站机制

注意所有的回收站操作都需要 root 权限。

与租户进入回收站相关的系统变量为 recyclebin,该变量用于设置是否开启回收站。该参数设置为 on 时,表示开启回收站。有关该变量的详细信息,请参见《OceanBase 数据库 参考指南》中的 系统变量 章节。

可以通过 SHOW RECYCLEBIN 语句查看回收站中的数据库对象。

obclient> SHOW RECYCLEBIN; ±-------------------------------±--------------±------±---------------------------+ | OBJECT_NAME | ORIGINAL_NAME | TYPE | CREATETIME | ±-------------------------------±--------------±------±---------------------------+ | __recycle_$_2_1613633676885952 | tenant_name | TENANT | 2021-02-18 15:34:36.891812 | ±-------------------------------±--------------±------±---------------------------+ 1 row in set (0.00 sec)

回收站有两个重要的属性,OBJIECT_NAME 和 ORIGINAL_NAME。

  • OBJIECT_NAME 表示被删除的对象在回收站的对象名。
  • OBJECT_NAME 的生成规则为 OBJECT_NAME = __recycle_$ORIGINAL_ID。
  • ORIGINAL_NAME 表示对象原来的名称,如原来的表名、索引名、租户名等。

此外,TYPE 列表示对象原来的类型,如 TABLE、INDEX、DATABASE 等。每个进入回收站的对象都会在表中增加一条记录;每个对象退出回收站后,会删除其在表中的记录。

租户的 PURGE 操作

PURGE 用来将回收站中的对象删除。经过 PURGE RECYCLEBIN 操作后,会将回收站清空,彻底删除其中的数据库对象。PURGE 相关的操作包括:

  • 从回收站把指定的租户删除,收回租户所占用的实际资源 。

PURGE TENANT object_name;

  • 清空回收站 。

PURGE RECYCLEBIN;

注意默认情况下,配置项 recyclebin 为 on,执行删除租户的操作后,租户会进入回收站。在执行了 PURGE 操作清空回收站后,OceanBase 数据库只会修改租户状态标识使该租户不可见,但是并不会真正地删除租户;在 7 天后,该租户才会真正被删除。这个行为由另一个配置项schema_history_expire_time 控制。

有关 schema_history_expire_time 与 recyclebin 的信息,请参见《OceanBase 数据库 参考指南》中的 系统配置项 章节。

租户的 FLASHBACK 操作

FLASHBACK 用来恢复回收站的对象,恢复对象时,也会将从属它的对象恢复。FLASHBACK 的语法如下:

其中 RENAME TO 子句用于将 FLASHBACK 的数据库对象重命名。

  • 还原回收站中的租户。

FLASHBACK TENANT OBJECT_NAME TO BEFORE DROP [RENAME TO NEW_OBJECT_NAME];