ITPub博客

首页 > 数据库 > 国内数据库 > 【手摸手玩转 OceanBase 149】闪回回收站对象

【手摸手玩转 OceanBase 149】闪回回收站对象

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

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

使用限制

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

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

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

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

MySQL 模式下恢复数据库和表

使用  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 表示表恢复后重命名的表名及其从属的数据库。

Oracle 模式下恢复表

OceanBase 数据库的 Oracle 模式仅支持从回收站中恢复被删除的表。

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

  • 从回收站中恢复表。

    obclient> FLASHBACK TABLE object_name TO BEFORE DROP;

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

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

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

    执行该语句后,恢复后的表名为重命名的表名,且该表从属的 Schema 对象仍为表删除前从属的 Schema 对象。

  • 从回收站中恢复表并指定表恢复后从属的 Schema 对象。

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

    执行该语句后,恢复后的表名为重命名的表名,且该表从属的 Schema 对象为指定的 Schema 对象。

上述 SQL 语句中:

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

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

  • user_name.new_table_name 表示表恢复后重命名的表名及其从属的 Schema 对象。

恢复租户

在 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 表示重命名的租户名,即该租户从回收站中恢复后的名称。

恢复示例

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

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

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

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

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

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

更多  FLASHBACK 语句的说明信息,请参见 MySQL 模式中的  FLASHBACK 和 Oracle 模式中的  FLASHBACK TABLE BEFORE DROP。


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

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

注册时间:2023-01-18

  • 博文量
    184
  • 访问量
    93196