首批通过分布式安全可靠测评,为关键业务系统打造
恢复回收站对象
更新时间:2023-09-27 20:10:52
被删除的对象进入回收站后,可以使用 FLASHBACK 语句恢复回收站对象。
注意事项
在恢复表时,Flashback 对象的顺序需要符合从属关系,即先 Flashback 数据库,再 Flashback 表。
不支持直接恢复索引。在通过
FLASHBACK语句恢复表时,表上的索引也会被恢复。恢复回收站对象时可修改待恢复对象的名称,但是不能与已有对象重名,否则系统会报错。
对于 MySQL 租户,从回收站中恢复表前,如果该表从属的数据库已删除,则需要先恢复数据库再恢复表。
如果一张表在进入回收站前属于某个表组,从回收站中恢复后该表默认会恢复到原表组中;如果原表组已经被删除,则该表恢复后会不属于任何一个表组。
恢复租户
由于当前仅 sys 租户可以删除租户,故仅 sys 租户可以将回收站中的租户恢复为正常租户。恢复时可修改租户名称,但不能与已有租户重名,否则系统会报错。
sys租户登录到数据库。连接示例如下,连接数据库时请以实际环境为准。
obclient -h10.xx.xx.xx -P2883 -uroot@sys#obdemo -p***** -A有关更加详细的连接数据库的操作指引,请参见 连接数据库。
执行
SHOW RECYCLEBIN语句,获取回收站中对象的名称。obclient [(none)]> SHOW RECYCLEBIN; +-------------------------------------+-------------------+----------+----------------------------+ | OBJECT_NAME | ORIGINAL_NAME | TYPE | CREATETIME | +-------------------------------------+-------------------+----------+----------------------------+ | RECYCLE_$_100017_1672050541224936 | oracle001 | TENANT | 2023-01-16 11:01:40.258000 | | __recycle_$_100017_1673426335319344 | __idx_500788_idx1 | INDEX | 2023-01-11 16:38:55.318878 | | __recycle_$_100017_1673426335331800 | t1 | TABLE | 2023-01-11 16:38:55.331481 | | __recycle_$_100017_1673854707660504 | infotest | DATABASE | 2023-01-16 15:38:27.660436 | +-------------------------------------+-------------------+----------+----------------------------+ 4 rows in set根据业务需要,选择合适的场景,恢复回收站中的租户。
将回收站中的租户恢复为正常租户,且恢复后的租户名为进入回收站前的租户名。
语句如下:
FLASHBACK TENANT tenant_name TO BEFORE DROP;其中,
tenant_name可以使用回收站中的名称,也可以使用租户原始的名称。由于回收站中的名称全局唯一,因此使用回收站中的名称可以明确恢复的是哪个租户,建议使用回收站中的名称恢复租户。如果使用原始名称,当回收站中的多个租户存在相同的原始名称时,此时恢复的租户是这些租户中最后进入回收站中的租户。示例如下:
obclient [(none)]> FLASHBACK TENANT RECYCLE_$_100017_1672050541224936 TO BEFORE DROP; Query OK, 0 rows affected将回收站中的租户恢复为正常租户并重命名。
FLASHBACK TENANT tenant_name TO BEFORE DROP RENAME TO new_tenant_name;相关参数说明如下:
tenant_name可以使用回收站中的名称,也可以使用租户原始的名称。由于回收站中的名称全局唯一,因此使用回收站中的名称可以明确恢复的是哪个租户,建议使用回收站中的名称恢复租户。如果使用原始名称,当回收站中的多个租户存在相同的原始名称时,此时恢复的租户是这些租户中最后进入回收站中的租户。new_tenant_name表示重命名的租户名,即该租户从回收站中恢复后的名称。
示例如下:
obclient [(none)]> FLASHBACK TENANT RECYCLE_$_100017_1672050541224936 TO BEFORE DROP RENAME TO new_oracle; Query OK, 0 rows affected
恢复数据库
sys 租户或 MySQL 用户租户可以从回收站中恢复数据库。恢复时可修改数据库名称,但不能与已有数据库重名,否则系统会报错。
sys租户或 MySQL 用户租户的租户管理员登录到数据库。说明
默认 MySQL 租户的管理员用户为
root用户。连接示例如下,连接数据库时请以实际环境为准。
obclient -h10.xx.xx.xx -P2883 -uroot@sys#obdemo -p***** -A有关更加详细的连接数据库的操作指引,请参见 连接数据库。
执行
SHOW RECYCLEBIN语句,获取回收站中对象的名称。obclient [(none)]> SHOW RECYCLEBIN; +-------------------------------------+-------------------+----------+----------------------------+ | OBJECT_NAME | ORIGINAL_NAME | TYPE | CREATETIME | +-------------------------------------+-------------------+----------+----------------------------+ | __recycle_$_100017_1673426335319344 | __idx_500788_idx1 | INDEX | 2023-01-11 16:38:55.318878 | | __recycle_$_100017_1673426335331800 | t1 | TABLE | 2023-01-11 16:38:55.331481 | | __recycle_$_100017_1673854707660504 | infotest | DATABASE | 2023-01-16 15:38:27.660436 | +-------------------------------------+-------------------+----------+----------------------------+ 3 rows in set根据业务需要,选择合适的场景,恢复回收站中的数据库。
从回收站中恢复数据库,恢复后的数据库名为进入回收站前的名称。
FLASHBACK DATABASE object_name TO BEFORE DROP;其中,
object_name表示数据库对象在回收站中的名称,不支持使用原始名称。执行该语句后,如果待恢复的数据库与租户的已有数据库重名,系统会报错。
示例如下:
obclient [(none)]> FLASHBACK DATABASE __recycle_$_100017_1673854707660504 TO BEFORE DROP; Query OK, 0 rows affected从回收站中恢复数据库并重命名。
FLASHBACK DATABASE object_name TO BEFORE DROP RENAME TO new_database_name;其中:
object_name表示数据库对象在回收站中的名称,不支持使用原始名称。new_database_name:表示从回收站中恢复后数据库的名称。
示例如下:
obclient [(none)]> FLASHBACK DATABASE __recycle_$_100017_1673854707660504 TO BEFORE DROP RENAME TO new_infotest; Query OK, 0 rows affected
恢复表
sys 租户、 MySQL 用户租户和 Oracle 用户租户均可以从回收站中恢复表。恢复时可修改表的名称,但是不能与已有表重名,否则系统会报错。
sys租户或用户租户的租户管理员登录到数据库。说明
默认 MySQL 租户的管理员用户为
root用户,Oracle 租户的管理员用户为SYS用户。连接示例如下,连接数据库时请以实际环境为准。
obclient -h10.xx.xx.xx -P2883 -uroot@sys#obdemo -p***** -A有关更加详细的连接数据库的操作指引,请参见 连接数据库。
执行
SHOW RECYCLEBIN语句,获取回收站中对象的名称。obclient [(none)]> SHOW RECYCLEBIN; +-------------------------------------+-------------------+----------+----------------------------+ | OBJECT_NAME | ORIGINAL_NAME | TYPE | CREATETIME | +-------------------------------------+-------------------+----------+----------------------------+ | __recycle_$_100017_1673426335319344 | __idx_500788_idx1 | INDEX | 2023-01-11 16:38:55.318878 | | __recycle_$_100017_1673426335331800 | t1 | TABLE | 2023-01-11 16:38:55.331481 | | __recycle_$_100017_1673854707660504 | infotest | DATABASE | 2023-01-16 15:38:27.660436 | +-------------------------------------+-------------------+----------+----------------------------+ 3 rows in set根据业务需要,选择合适的场景,恢复回收站中的表。
从回收站中恢复表,恢复后的表名为进入回收站前的表名。
FLASHBACK TABLE object_name TO BEFORE DROP;其中,
object_name表示表对象在回收站中的名称。也可以使用原始名称,由于回收站中的名称全局唯一,建议使用回收站中的名称。示例如下:
obclient [(none)]> FLASHBACK TABLE __recycle_$_100017_1673426335331800 TO BEFORE DROP; Query OK, 0 rows affected执行该语句后,恢复后的表名为进入回收站前的名称,且该表从属的数据库或 Schema 对象仍为表删除前从属的数据库或 Schema 对象。如果该表进入回收站前的名称与已有表重名,则系统会报错。
从回收站中恢复表并重命名。
FLASHBACK TABLE object_name TO BEFORE DROP RENAME To new_table_name;其中,
object_name表示表对象在回收站中的名称,也可以使用原始名称,由于回收站中的名称全局唯一,建议使用回收站中的名称;new_table_name表示表恢复后重命名的表名。示例如下:
obclient [(none)]> FLASHBACK TABLE __recycle_$_100017_1673426335331800 TO BEFORE DROP RENAME To infotable; Query OK, 0 rows affected执行该语句后,恢复后的表名为重命名的表名,且该表从属的数据库或 Schema 对象仍为表删除前从属的数据库或 Schema 对象。如果重命名的表名与已有表重名,则系统会报错。
从回收站中将表恢复到指定的数据库或 Schema 对象并重命名。
FLASHBACK TABLE object_name TO BEFORE DROP RENAME To database_name.new_table_name;其中,
object_name表示表对象在回收站中的名称,也可以使用原始名称,由于回收站中的名称全局唯一,建议使用回收站中的名称;database_name.new_table_name表示表恢复后重命名的表名及其从属的数据库或 Schema 对象。Oracle 租户的 Schema 对象名与用户名同名。示例如下:
obclient [(none)]> FLASHBACK TABLE __recycle_$_100017_1673426335331800 TO BEFORE DROP RENAME To test.infotable; Query OK, 0 rows affected执行该语句后,恢复后的表名为重命名的表名,且该表从属的数据库或 Schema 对象为指定的数据库或 Schema 对象。如果重命名的表名与已有表重名,则系统会报错。
相关文档
更多回收站相关的内容,请参见以下信息: