全部產品
Search
文件中心

PolarDB:從表資源回收筒中恢複誤刪的表

更新時間:Jul 06, 2024

由於DDL語句無法復原,如果誤刪除了表(例如DROP TABLE),可能會導致資料丟失。PolarDB提供了表資源回收筒的功能,刪除的表會被臨時轉移到表資源回收筒,因此您可以從表資源回收筒恢複誤刪的表。

背景資訊

關於更多表資源回收筒的資訊,請參見表資源回收筒

前提條件

  • 僅當叢集版本為PolarDB MySQL版8.0版本,且核心小版本為8.0.1.1.2及以上時,才支援表資源回收筒功能。

  • 請確保誤刪除前已開啟表資源回收筒功能:設定叢集參數loose_recycle_binON,設定參數值的具體操作請參見設定叢集參數和節點參數

  • 請確保誤刪表的時間點在表資源回收筒內資料的最長保留周期內。可設定叢集參數loose_recycle_bin_retention(單位:秒),來定義該最長保留周期,設定參數值的具體操作請參見設定叢集參數和節點參數

操作步驟

  1. 執行如下語句,查看資源回收筒中所有臨時儲存的表。

    CALL DBMS_RECYCLE.show_tables();

    返回結果如下:

    +-----------------+---------------+---------------+--------------+---------------------+---------------------+
    | SCHEMA          | TABLE         | ORIGIN_SCHEMA | ORIGIN_TABLE | RECYCLED_TIME       | PURGE_TIME          |
    +-----------------+---------------+---------------+--------------+---------------------+---------------------+
    | __recycle_bin__ | __innodb_1063 | product_db    | t1           | 2019-08-08 11:01:46 | 2019-08-15 11:01:46 |
    | __recycle_bin__ | __innodb_1064 | product_db    | t2           | 2019-08-08 11:01:46 | 2019-08-15 11:01:46 |
    | __recycle_bin__ | __innodb_1065 | product_db    | parent       | 2019-08-08 11:01:46 | 2019-08-15 11:01:46 |
    | __recycle_bin__ | __innodb_1066 | product_db    | child        | 2019-08-08 11:01:46 | 2019-08-15 11:01:46 |
    +-----------------+---------------+---------------+--------------+---------------------+---------------------+
    4 rows in set (0.00 sec)

    返回結果中的參數說明如下:

    參數

    說明

    SCHEMA

    資源回收筒的Schema。

    TABLE

    進入資源回收筒後的表名。

    ORIGIN_SCHEMA

    原始表的Schema。

    ORIGIN_TABLE

    原始表的表名。

    RECYCLED_TIME

    回收時間。

    PURGE_TIME

    預計在資源回收筒中被清理的時間。

  2. 執行如下語句,快速恢複資源回收筒內的某張表。

    CALL DBMS_RECYCLE.restore_table('RECYCLE_TABLE','DEST_DB','DEST_TABLE');
    說明

    PolarDB MySQL版8.0叢集版的Revision version為8.0.1.1.12或以上才支援通過restore_table命令,快速恢複資源回收筒內的表。您可以參見查詢版本號碼確認叢集版本。

    該語句中的參數說明如下:

    參數

    說明

    RECYCLE_TABLE

    需要恢複的表在資源回收筒內的表名。

    說明

    如果僅傳入此參數,會恢複到原始表。

    DEST_DB

    為恢複後的表指定目標資料庫。

    DEST_TABLE

    為恢複後的表指定新的表名。

    樣本:

    CALL dbms_recycle.restore_table('__innodb_1063','testDB','testTable');