暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

分布式数据库学习Note112:OceanBase社区版中,数据库、表和索引回收站如何理解?

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

查看回收站对象

背景信息

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

  • 如果回收站为开启状态,则该对象会进入回收站,回收站中可以查询到被 Truncate 或 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 模式中主要支持 INDEXTABLE 和 DATABASE 等三种类型。

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

开启或关闭回收站

租户被创建后,默认回收站为关闭状态。如果开启了回收站,则对数据库对象进行 Truncate 或 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;
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论