跳到主要内容

恢复回收站对象

被删除的对象进入回收站后,可以使用 FLASHBACK 语句恢复回收站对象。

注意事项

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

  • 不支持直接恢复索引。在通过 FLASHBACK 语句恢复表时,表上的索引也会被恢复。

  • 恢复回收站对象时可修改待恢复对象的名称,但是不能与已有对象重名,否则系统会报错。

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

恢复数据库

恢复时可修改数据库名称,但不能与已有数据库重名,否则系统会报错。

  1. 管理员 root 登录到 seekdb。

    连接示例如下,连接数据库时请以实际环境为准。

    mysql -h127.0.0.1 -uroot -P2881
  2. 执行 SHOW RECYCLEBIN 语句,获取回收站中对象的名称。

    SHOW RECYCLEBIN;
    +--------------------------------+---------------+----------+----------------------------+
    | OBJECT_NAME | ORIGINAL_NAME | TYPE | CREATETIME |
    +--------------------------------+---------------+----------+----------------------------+
    | __recycle_$_1_1765784426825016 | test_db | DATABASE | 2025-12-15 15:40:26.825340 |
    +--------------------------------+---------------+----------+----------------------------+
    1 row in set (0.003 sec)
  3. 根据业务需要,选择合适的场景,恢复回收站中的数据库。

    • 从回收站中恢复数据库,恢复后的数据库名为进入回收站前的名称。

      FLASHBACK DATABASE object_name TO BEFORE DROP;

      其中,object_name 表示数据库对象在回收站中的名称,不支持使用原始名称。

      执行该语句后,如果待恢复的数据库与已有数据库重名,系统会报错。

      示例如下:

      FLASHBACK DATABASE __recycle_$_1_1765784426825016 TO BEFORE DROP;
    • 从回收站中恢复数据库并重命名。

      FLASHBACK DATABASE object_name TO BEFORE DROP RENAME TO new_database_name;

      其中:

      • object_name 表示数据库对象在回收站中的名称,不支持使用原始名称。

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

      示例如下:

      FLASHBACK DATABASE __recycle_$_1_1765784426825016 TO BEFORE DROP RENAME TO new_infotest;

恢复表

恢复时可修改表的名称,但是不能与已有表重名,否则系统会报错。

  1. 管理员 root 登录到 seekdb。

    连接示例如下,连接数据库时请以实际环境为准。

    mysql -h127.0.0.1 -uroot -P2881
  2. 执行 SHOW RECYCLEBIN 语句,获取回收站中对象的名称。

    SHOW RECYCLEBIN;
    +--------------------------------+---------------+-------+----------------------------+
    | OBJECT_NAME | ORIGINAL_NAME | TYPE | CREATETIME |
    +--------------------------------+---------------+-------+----------------------------+
    | __recycle_$_1_1765785669490408 | tbl1 | TABLE | 2025-12-15 16:01:09.491488 |
    +--------------------------------+---------------+-------+----------------------------+
    1 row in set (0.002 sec)
  3. 根据业务需要,选择合适的场景,恢复回收站中的表。

    • 从回收站中恢复表,恢复后的表名为进入回收站前的表名。

      FLASHBACK TABLE object_name TO BEFORE DROP;

      其中,object_name 表示表对象在回收站中的名称。也可以使用原始名称,由于回收站中的名称全局唯一,建议使用回收站中的名称。

      示例如下:

      FLASHBACK TABLE __recycle_$_1_1765785669490408 TO BEFORE DROP;

      执行该语句后,恢复后的表名为进入回收站前的名称,且该表从属的数据库或 Schema 对象仍为表删除前从属的数据库或 Schema 对象。如果该表进入回收站前的名称与已有表重名,则系统会报错。

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

      FLASHBACK TABLE object_name TO BEFORE DROP RENAME To new_table_name;

      其中,object_name 表示表对象在回收站中的名称,也可以使用原始名称,由于回收站中的名称全局唯一,建议使用回收站中的名称;new_table_name 表示表恢复后重命名的表名。

      示例如下:

      FLASHBACK TABLE __recycle_$_1_1765785669490408 TO BEFORE DROP RENAME To infotable;

      执行该语句后,恢复后的表名为重命名的表名,且该表从属的数据库或 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 对象。

      示例如下:

      FLASHBACK TABLE __recycle_$_1_1765785669490408 TO BEFORE DROP RENAME To test.infotable;

      执行该语句后,恢复后的表名为重命名的表名,且该表从属的数据库或 Schema 对象为指定的数据库或 Schema 对象。如果重命名的表名与已有表重名,则系统会报错。

相关文档

更多回收站相关的内容,请参见以下信息: