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

分布式数据库学习Note114:OceanBase社区版中,什么是闪回回收站?

本节主要介绍如何从回收站中闪回数据库、表及租户。

使用限制

  • 在恢复表时,Flashback 对象的顺序需要符合从属关系,即先 Flashback 数据库,再 Flashback 表。

  • 通过 FLASHBACK 语句恢复表时,表上的索引也会恢复。

  • 通过 PURGE 命令可以单独清除索引,但是 FLASHBACK 命令不支持单独恢复索引。

  • 如果一张表在进入回收站前属于某个表组,通过闪回恢复后该表默认会恢复到该表组中;如果表组已经被删除,则该表恢复后会不属于任何一个表组。

恢复数据库和表

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

从回收站中恢复数据库

语句如下:

  • 从回收站中恢复数据库

    obclient> FLASHBACK DATABASE object_name TO BEFORE DROP;
    

    语句中的 object_name 表示数据库对象在回收站中的名称,可以通过 SHOW RECYCLEBIN 语句获取该名称,有关查询回收站的操作,请参见 数据库、表和索引回收站

    执行该语句后,恢复后的数据库名为进入回收站前的名称。

  • 从回收站中恢复数据库并重命名

    obclient> FLASHBACK DATABASE object_name TO BEFORE DROP RENAME TO database_name;
    

    其中:

    • object_name 表示数据库对象在回收站中的名称。

    • database_name:表示从回收站中恢复后数据库的名称。

从回收站中恢复表

从回收站中闪回表前,如果该表从属的数据库已删除,则需要先恢复数据库再恢复表。

从回收站中恢复表的语句如下:

  • 从回收站中恢复表。

    obclient> FLASHBACK TABLE object_name TO BEFORE DROP;
    

    执行该语句后,恢复后的表名为进入回收站前的名称,且该表从属的数据库仍为表删除前从属的数据库。

  • 从回收站中恢复表并重命名。

    obclient> FLASHBACK TABLE object_name TO BEFORE DROP RENAME to new_table_name;
    

    执行该语句后,恢复后的表名为重命名的表名,且该表从属的数据库仍为表删除前从属的数据库。

  • 从回收站中将表恢复到指定的数据库并重命名。

    obclient> FLASHBACK TABLE object_name TO BEFORE DROP RENAME to database_name.new_table_name;
    

    执行该语句后,恢复后的表名为重命名的表名,且该表从属的数据库为指定的数据库。

上述 SQL 语句中:

  • object_name 表示表对象在回收站中的名称,可以通过 SHOW RECYCLEBIN 语句获取该名称,有关查询回收站的操作,请参见 数据库、表和索引回收站

  • new_table_name 表示表恢复后重命名的表名。

  • user_name.new_table_name 表示表恢复后重命名的表名及其从属的数据库。

恢复租户

在 OceanBase 数据库中仅系统租户(sys 租户)支持租户回收站功能。

当 sys 租户的回收站功能开启时,执行 DROP TENANT 操作后,相应的租户默认会进入回收站。sys 租户的管理员(即 root 用户)可以使用 FLASHBACK 语句将回收站内的租户恢复为正常租户。

恢复语句

语句如下:

  • 将系统租户回收站中的租户闪回为正常租户。

    obclient> FLASHBACK TENANT tenant_name TO BEFORE DROP;
    
  • 将系统租户回收站中的 tenant_name 闪回为正常租户,并重命名 new_tenant_name

    obclient> FLASHBACK TENANT tenant_name TO BEFORE DROP RENAME TO new_tenant_name;
    

其中:

  • tenant_name 可以是租户原始的名称,也可以使用回收站中的名称,回收站中的名称全局唯一,因此使用回收站中的名称,可以明确恢复的是哪个租户。当多个租户存在相同的原始名称时,此时恢复的租户是这些租户中最后进入回收站中的租户。

  • new_tenant_name 表示重命名的租户名,即该租户从回收站中恢复后的名称。

恢复示例

假设当前回收站中有一个 test 租户,现在需要将该租户恢复为正常租户并重命名为 test1

  1. 使用 root 用户登录 sys 租户。

  2. 查看回收站中的对象。

    obclient> SHOW RECYCLEBIN;
    +-----------------------------------+---------------+--------+----------------------------+
    | OBJECT_NAME                       | ORIGINAL_NAME | TYPE   | CREATETIME                 |
    +-----------------------------------+---------------+--------+----------------------------+
    | RECYCLE_$_100017_1637551598530048 | test          | TENANT | 2021-11-22 11:27:14.548125 |
    +-----------------------------------+---------------+--------+----------------------------+
    1 row in set
    
  3. 执行以下语句,闪回租户 test 并重命名为 test1

    obclient> FLASHBACK TENANT Oracle1 TO BEFORE DROP RENAME TO test1;
    
  4. 执行以下语句,确认租户已恢复。

    obclient>  SELECT * FROM oceanbase.DBA_OB_TENANTS;
    
    obclient>  SHOW RECYCLEBIN;
    Empty set
    

更多 FLASHBACK 语句的说明信息,请参见 FLASHBACK

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论