本节主要介绍如何从回收站中闪回数据库、表及租户。
使用限制
在恢复表时,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。
使用
root用户登录sys租户。查看回收站中的对象。
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执行以下语句,闪回租户
test并重命名为test1。obclient> FLASHBACK TENANT Oracle1 TO BEFORE DROP RENAME TO test1;执行以下语句,确认租户已恢复。
obclient> SELECT * FROM oceanbase.DBA_OB_TENANTS; obclient> SHOW RECYCLEBIN; Empty set
更多 FLASHBACK 语句的说明信息,请参见 FLASHBACK




