本节主要介绍如何从回收站中闪回数据库、表及租户。
使用限制
-
在恢复表时,Flashback 对象的顺序需要符合从属关系,即先 Flashback 数据库,再 Flashback 表。
-
通过
FLASHBACK 语句恢复表时,表上的索引也会恢复。
-
通过
PURGE 命令可以单独清除索引,但是
FLASHBACK 命令不支持单独恢复索引。
-
如果一张表在进入回收站前属于某个表组,通过闪回恢复后该表默认会恢复到该表组中;如果表组已经被删除,则该表恢复后会不属于任何一个表组。
MySQL 模式下恢复数据库和表
使用
FLASHBACK 命令可恢复回收站中的数据库和表对象,只有租户管理员用户才可以使用该命令。恢复时可修改对象的名称,但是不能和已有对象重名。
从回收站中恢复数据库
语句如下:
从回收站中恢复表
从回收站中闪回表前,如果该表从属的数据库已删除,则需要先恢复数据库再恢复表。
从回收站中恢复表的语句如下:
-
从回收站中恢复表。
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 语句将回收站内的租户恢复为正常租户。
恢复语句
语句如下:
其中:
恢复示例
假设当前回收站中有一个
Oracle1 租户,现在需要将该租户恢复为正常租户并重命名为
Oracle2。
-
使用
root 用户登录
sys 租户。
-
查看回收站中的对象。
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
-
执行以下语句,闪回租户
Oracle1 并重命名为
Oracle2。
obclient> FLASHBACK TENANT Oracle1 TO BEFORE DROP RENAME TO Oracle2;
-
执行以下语句,确认租户已恢复。
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/
,如需转载,请注明出处,否则将追究法律责任。