ITPub博客

首页 > 数据库 > 国内数据库 > 【手摸手玩转 OceanBase 148】数据库、表和索引回收站

【手摸手玩转 OceanBase 148】数据库、表和索引回收站

原创 国内数据库 作者:13579NB232 时间:2023-01-19 16:42:06 0 删除 编辑

本节主要介绍数据库、表和索引级回收站的相关操作,主要包括查看、开启、关闭和清理回收站。

查看回收站对象

背景信息

在对数据库对象进行 Drop 操作时:

  • 如果回收站为开启状态,则该对象会进入回收站,回收站中可以查询到被 Drop 的对象。

  • 如果回收站为关闭状态,则该对象不会进入回收站,回收站中也无法查询到该对象。

操作步骤

  1. 租户管理员登录数据库。

  2. 执行以下语句,查看回收站中的对象。

    obclient> SHOW RECYCLEBIN;
    +-------------------------------------+---------------+-------+----------------------------+
    | OBJECT_NAME                         | ORIGINAL_NAME | TYPE  | CREATETIME                 |
    +-------------------------------------+---------------+-------+----------------------------+
    | __recycle_$_100015_1637217861309360 | t1            | TABLE | 2021-11-18 14:44:21.310663 |
    +-------------------------------------+---------------+-------+----------------------------+
    1 row in set

    返回结果中:

    • OBJECT_NAME:表示该对象在回收站中的名称。

    • ORIGINAL_NAME:表示原对象名。

    • TYPE:表示回收站对象所属的类型。

      MySQL 模式中主要支持  INDEX、 TABLE 和  DATABASE 等三种类型。

      Oracle 模式中主要支持  INDEX 和  TABLE 两种类型。

    • CREATETIME:表示该对象进入回收站的时间。

开启或关闭回收站

租户被创建后,默认回收站为关闭状态。如果开启了回收站,则对数据库对象进行 Drop 操作后,对象会进入到回收站。

  1. 租户管理员登录数据库。

  2. 执行以下语句,查看回收站的状态。

    obclient> SHOW VARIABLES LIKE 'recyclebin';
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | recyclebin    | OFF   |
    +---------------+-------+
    1 row in set
  3. 根据业务需要,选择合适的方式开启或关闭回收站功能。

    • 执行以下语句,开启或关闭 Global 级别的回收站。

      Global 级别的回收站设置在整个租户内生效。同时,Global 级别的回收站设置后,对当前 Session 无效,需要重新登录建立新的 Session 才会生效。

      由于变量  recyclebin 为 Bool 类型的变量,故支持多种取值,其中:

      • on 、 1 或  true :表示开启回收站。

      • off 、 0 或  false:表示关闭回收站。

      语句如下:

      obclient> SET GLOBAL recyclebin = on;
      obclient> SET GLOBAL recyclebin = off;

      或者

      obclient> SET GLOBAL recyclebin = 1;
      obclient> SET GLOBAL recyclebin = 0;

      或者

      obclient> SET GLOBAL recyclebin = true;
      obclient> SET GLOBAL recyclebin = false;
    • 执行以下语句,开启或关闭 Session 级别的回收站。

      Session 级别的回收站设置仅对当前 Session 有效。

      obclient> SET @@recyclebin = on;
      obclient> SET @@recyclebin = off;

      或者

      obclient> SET @@recyclebin = 1;
      obclient> SET @@recyclebin = 0;

      或者

      obclient> SET @@recyclebin = true;
      obclient> SET @@recyclebin = false;

手动清理回收站

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

注意

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

执行 Purge 操作前,您可以通过回收站来查看删除的对象。执行 Purge 操作后,在 OceanBase 数据库的回收站中将再也查询不到对象的信息,真实数据也最终会被作为垃圾回收。

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

手动清理回收站的操作如下:

  1. 租户管理员登录数据库。

  2. 手动执行以下语句,清理回收站。

    以下语句中的  object_name 均表示该 Schema 对象在回收站中的名称,可以通过  SHOW RECYCLEBIN 语句获取该名称。

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

      obclient> PURGE DATABASE object_name;
    • 从回收站中物理清理指定的表

      obclient> PURGE TABLE object_name;
    • 从回收站中物理清理指定的索引表

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

      obclient> PURGE RECYCLEBIN;

自动清理回收站

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

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

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

更多配置项  recyclebin_object_expire_time 的说明信息请参见  recyclebin_object_expire_time。

开启自动清理回收站的操作如下:

  1. 使用  root 用户登录数据库的  sys 租户。

  2. 执行以下语句,开启自动清理回收站的功能并指定清理多少时间前进入回收站的对象。

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

    obclient> ALTER SYSTEM SET recyclebin_object_expire_time = '7d';
  3. (可选)完成后,可以执行以下语句,确认回收站中符合条件的对象是否被清理。

    obclient> SHOW RECYCLEBIN;


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70026124/viewspace-2932861/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2023-01-18

  • 博文量
    184
  • 访问量
    93196