全部產品
Search
文件中心

AnalyticDB:表資源回收筒

更新時間:Mar 13, 2025

由於DDL語句無法復原,開發或營運人員如果誤刪除表可能會導致資料丟失。AnalyticDB for MySQL支援表資源回收筒(Recycle Bin)功能,能夠將刪除的表臨時轉移到表資源回收筒,還可以設定保留的時間,方便您找回誤刪資料。

前提條件

AnalyticDB for MySQL叢集需為3.2.3.0及以上版本。

說明
  • 查看企業版基礎版湖倉版叢集的核心版本,請執行SELECT adb_version();。如需升級核心版本,請聯絡支援人員。

  • 雲原生資料倉儲AnalyticDB MySQL控制台集群資訊頁面的配寘資訊地區,查看和升級數倉版叢集的核心版本。操作詳情請參見查看和升級版本

注意事項

  • 表資源回收筒功能僅支援AnalyticDB for MySQL內表(即表引擎為XUANWU或XUANWU_V2的表)。外表(External Table)不支援此功能。

  • 執行INSERT OVERWRITE SELECT任務時,若進行DROP TABLE操作,刪除的表會進入資源回收筒,INSERT OVERWRITE SELECT任務會執行失敗。

  • 執行BUILD任務時,若進行DROP TABLE操作,刪除的表會進入資源回收筒,BUILD任務會繼續正常執行直到結束。

  • 進入資源回收筒的表,依然會佔用儲存空間。

表資源回收筒介紹

表資源回收筒用於臨時存放已刪除的表。首次執行DROP操作時,AnalyticDB for MySQL會建立一個名為ADB_RECYCLE_BIN的隱藏庫,並將已刪除的表遷移到ADB_RECYCLE_BIN資料庫。

回收機制

通過DROP TABLE命令刪除的表,會自動遷移到表資源回收筒。

重要

通過DROP TABLE ... FORCE命令強制移除的表將直接被刪除,不會進入表資源回收筒。

保留時間長度與清理機制

表進入資源回收筒後,預設保留3天。超過3天將自動清理。您可以通過配置參數設定保留時間長度和清理機制。配置方法請參見資源回收筒配置。您也可以手動執行PURGE操作清理資源回收筒。具體用法請參見刪除資源回收筒中的表

資源回收筒支援的操作

  • 具有原表DROP許可權的使用者,才能操作資源回收筒中的表。

  • 資源回收筒中的表,僅支援刪除PURGE恢複(RESTORE)以及顯示(SHOW)操作。

資源回收筒表命名規則

表資源回收筒會從不同的資料庫回收表到統一的ADB_RECYCLE_BIN資料庫中。為了保證表名的唯一性,定義如下命名格式:原資料庫名_原表名_進入資源回收筒的時間戳記

例如:某使用者在2024年1月1日00:00:00刪除了adb_demo庫中的customer表,則這張表在表資源回收筒中重新命名為:adb_demo_customer_1704038400000。

說明
  • 如果新表名的長度超過了表名的長度上限,會自動按照原表名、原庫名的順序進行命名裁剪。因此,新表名中的原資料庫名和原表名可能會有部分缺失。

  • 當資源回收筒中已經有被刪除的相同表,新刪除的表仍會進入資源回收筒,需要根據時間戳記來進行區分。

資源回收筒配置

您可以通過SET ADB_CONFIG命令修改相關配置。

參數

說明

DROP_FORCE

執行DROP操作時是否預設永久刪除。若為FALSE,則進入表資源回收筒,若為TRUE,則永久刪除。預設值:FALSE。

RECYCLE_BIN_EXPIRED_TIME

進入表資源回收筒後的保留時間。修改該配置對已經在表資源回收筒中的表不生效。單位:毫秒(ms)。預設值:259200000,即3天。

重要

為了避免磁碟空間被佔滿,建議合理設定保留時間。

ENABLE_RECYCLE_BIN_CLEAN_EXPIRED_TABLE

是否開啟表資源回收筒的非同步清理任務線程。預設值:TRUE。

重要

建議保持非同步清理任務線程的預設開啟狀態。

RECYCLE_BIN_CLEAN_EXPIRED_TABLE_INTERVAL

表資源回收筒非同步清理任務線程的輪詢間隔。單位:毫秒(ms)。預設值:60000。

管理表資源回收筒

顯示錶資源回收筒中的表

文法

  • 顯示錶資源回收筒中所有表資訊。

    SHOW RECYCLE_BIN ALL;
  • 顯示錶資源回收筒中指定表資訊,可能包含同名庫的同名表。

    SHOW RECYCLE_BIN TABLE <原資料庫名>.<原表名>;
  • 顯示錶資源回收筒中指定表資訊,可能包含多個庫的同名表。

    SHOW RECYCLE_BIN TABLE <原表名>;
  • 顯示錶資源回收筒中指定庫所包含的表。

    SHOW RECYCLE_BIN DATABASE <原資料庫名>;

樣本

  • 查看錶資源回收筒中所有表,樣本語句如下:

    SHOW RECYCLE_BIN ALL;

    返回結果:

    +----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+
    | userName | schemaName      | tableName                       | originSchemaName | originTableName | recycledTime        | expiredTime         |
    +----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+
    | testUser | ADB_RECYCLE_BIN | adb_demo_customer_1720086117277 | adb_demo         | customer        | 2024-07-04 17:42:00 | 2024-07-07 17:42:00 |
    | testUser | ADB_RECYCLE_BIN | adb_demo_orders_1720086094102   | adb_demo         | orders          | 2024-07-04 17:41:37 | 2024-07-07 17:41:37 |
    | testUser | ADB_RECYCLE_BIN | testdb_customer_1720085752664   | testdb           | customer        | 2024-07-04 17:35:56 | 2024-07-07 17:35:56 |
    +----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+
  • 查看錶資源回收筒中的指定表adb_demo.customer,樣本語句如下:

    SHOW RECYCLE_BIN TABLE adb_demo.customer;

    返回結果:

    +----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+
    | userName | schemaName      | tableName                       | originSchemaName | originTableName | recycledTime        | expiredTime         |
    +----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+
    | testUser | ADB_RECYCLE_BIN | adb_demo_customer_1720086117277 | adb_demo         | customer        | 2024-07-04 17:42:00 | 2024-07-07 17:42:00 |
    +----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+
  • 查看所有原始表名為customer的表,樣本語句如下:

    SHOW RECYCLE_BIN TABLE customer;

    返回結果:

    +----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+
    | userName | schemaName      | tableName                       | originSchemaName | originTableName | recycledTime        | expiredTime         |
    +----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+
    | testUser | ADB_RECYCLE_BIN | adb_demo_customer_1720086117277 | adb_demo         | customer        | 2024-07-04 17:42:00 | 2024-07-07 17:42:00 |
    | testUser | ADB_RECYCLE_BIN | testdb_customer_1720085752664   | testdb           | customer        | 2024-07-04 17:35:56 | 2024-07-07 17:35:56 |
    +----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+
  • 查看所有原資料庫為adb_demo的表,樣本語句如下:

    SHOW RECYCLE_BIN DATABASE adb_demo;

    返回結果:

    +----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+
    | userName | schemaName      | tableName                       | originSchemaName | originTableName | recycledTime        | expiredTime         |
    +----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+
    | testUser | ADB_RECYCLE_BIN | adb_demo_customer_1720086117277 | adb_demo         | customer        | 2024-07-04 17:42:00 | 2024-07-07 17:42:00 |
    | testUser | ADB_RECYCLE_BIN | adb_demo_orders_1720086094102   | adb_demo         | orders          | 2024-07-04 17:41:37 | 2024-07-07 17:41:37 |
    +----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+

恢複原始表

規則

  • 恢複後的表仍然使用進入資源回收筒前的原表名。

  • 若在恢複時,原資料庫已經存在同名表,請按照提示先對原資料中的同名表進行更名、刪除或移動到其他資料庫等操作。

  • 若在大量復原時,表資源回收筒中有多張表的原庫名和原表名相同,只是時間戳記不同。則會按時間戳記倒序先恢複第一張表,恢複第二張表時會出現報錯,請按照提示先對原資料中已恢複的同名表進行更名、刪除或移動到其他資料庫等操作。

文法

  • 恢複表資源回收筒中所有表到原資料庫。

    RESTORE RECYCLE_BIN ALL;
  • 恢複表資源回收筒中指定表到原資料庫。

    RESTORE RECYCLE_BIN TABLE <ADB_RECYCLE_BIN資料庫中的表名>;

樣本

恢複表資源回收筒中的指定表adb_demo_customer_1720086117277,樣本語句如下:

RESTORE RECYCLE_BIN TABLE adb_demo_customer_1720086117277;

刪除資源回收筒中的表

文法

  • 刪除表資源回收筒中所有表。

    PURGE RECYCLE_BIN ALL;
  • 刪除表資源回收筒中指定表。

    PURGE RECYCLE_BIN TABLE <ADB_RECYCLE_BIN資料庫中的表名>;

樣本

永久刪除表資源回收筒中指定表adb_demo_customer_1720086117277,樣本語句如下:

PURGE RECYCLE_BIN TABLE adb_demo_customer_1720086117277;

修改自動保留時間

文法

修改表資源回收筒的自動保留時間。

SET adb_config RECYCLE_BIN_EXPIRED_TIME=<自訂的自動保留時間>;
重要

修改後的自動保留時間僅作用於修改配置後刪除的表,在修改之前已在資源回收筒的表仍將遵循以前的配置。

樣本

修改表資源回收筒的自動保留時間為2天,樣本語句如下:

#注意單位為毫秒,則樣本自動保留時間為:2 * 24 * 3600 * 1000 = 172800000(ms)
SET adb_config RECYCLE_BIN_EXPIRED_TIME=172800000;