查看回收站

租户管理员可以通过如下命令,查看回收站中的对象。

  1. obclient> SHOW RECYCLEBIN;

开启和关闭回收站

租户创建后,默认回收站为开启状态此时对数据库对象进行 Truncate 或 Drop 操作后,对象会进入到回收站。

控制回收站开启或关闭的命令分为租户级别和 Session 级别:

  • 租户级别的开启或关闭语句

    1. obclient> SET GLOBAL `recyclebin` = on /off;
  • Session 级别的开启或关闭语句

    1. obclient> SET @@recyclebin = on/off

恢复回收站对象

使用 FLASHBACK 命令可恢复回收站中的数据库和表对象,只有租户的管理员用户才可以使用该命令。恢复时可对修改对象的名称,但是不要和已有对象重名。

示例如下:

  • 恢复对象数据库

    1. obclient> FLASHBACK DATABASE object_name TO BEFORE DROP [RENAME TO database_name];
  • 恢复对象表

    1. obclient> FLASHBACK TABLE object_name TO BEFORE DROP [RENAME to table_name];

使用限制:

  • Flashback 数据库对象的顺序需要符合从属关系,即 Database->Table-> Index。

  • Oracle 模式下恢复表不会恢复其中的索引,即索引需要重建。

  • MySQL 模式下恢复表会连同索引一并恢复。

  • 通过 PURGE 命令可以删除表的索引,但是 FLASHBACK 命令不支持恢复索引。

  • 如果一张表在进入回收站前属于某个表组,那么删除该表组后再恢复该表会导致它不属于任何一个表组。如果表组未删除,则恢复后该表还在原表组中。

手动清理回收站

频繁删除数据库对象并重建,会在回收站产生大量数据,这些数据可以通过 PURGE 命令清理。

注意

Purge 操作会删除对象和从属于该对象的对象(Database->Table->Index)。例如,Purge 数据库会删除数据库和从属于该数据库的表和表索引。

Purge 操作会删除对象的元数据信息和 __all_recyclebin 中的记录。 执行 Purge 后,在 OceanBase 数据库中将再也查不到对象的信息,真实数据也最终会被作为垃圾回收。

当一个对象的上层对象被 Purge,那么当前回收站中关联的下一层对象也会被 Purge。

示例:

  • 从回收站中物理删除指定的数据库

    1. obclient> PURGE DATABASE object_name;
  • 从回收站中物理删除指定表

    1. obclient> PURGE TABLE object_name;
  • 从回收站中物理删除指定索引表

    1. obclient> PURGE INDEX object_name;
  • 清空整个回收站

    1. obclient> PURGE RECYCLEBIN;

自动清理回收站

OceanBase 数据库当前支持通过 recyclebin_object_expire_time 配置项自动 Purge 回收站中过期的 Schema 对象,其默认值为 0s。其中:

  • 值为 0s 时表示关闭自动 Purge 回收站功能。

  • 值为非 0s 时,表示回收一段时间前进入回收站的 Schema 对象。

开启自动 Purge 回收站功能,并回收 7 天前进入回收站的 Schema 对象,示例语句如下:

  1. obclient> ALTER SYSTEM SET recyclebin_object_expire_time = "7d";