Oracle 10g 引入回收站機制,將 DROP TABLE 轉化為「標記刪除、保留元數據與數據、支援秒級恢復」的軟刪除操作。這與 Windows 回收站邏輯一致,是防誤刪、降低 RTO 的核心特性。本文詳解回收站原理、恢復語法、清理策略與常見誤區。
DROP TABLE t → 表重命名為 BIN$$0 、移至回收站、數據塊不釋放、索引/約束/觸發器同步保留QUOTA 限制PURGE TABLE t / DROP TABLE t PURGE → 永久刪除,繞過回收站SELECT object_name, original_name, type, droptime, tablespace_name
FROM user_recyclebin
WHERE original_name = 'DROP_TEST';
關鍵欄位:OBJECT_NAME (回收站內部名,如 BIN$...$0)、ORIGINAL_NAME (原表名)、TYPE (TABLE/INDEX/LOB...)
FLASHBACK TABLE drop_test TO BEFORE DROP;
drop_test,所有結構屬性原樣保留FLASHBACK TABLE drop_test TO BEFORE DROP RENAME TO drop_test_restored;
| 操作 | 語法 | 說明 |
|---|---|---|
| 查看所有用戶回收站 (DBA) | SELECT * FROM dba_recyclebin; | 需 SYSDBA 權限 |
| 清空當前用戶回收站 | PURGE RECYCLEBIN; | 釋放空間,不可恢復 |
| 清空指定表空間回收站 | PURGE TABLESPACE users; | 釋放表空間配額 |
| 清空指定用戶回收站 (DBA) | PURGE DBA_RECYCLEBIN; | 跨用戶清理 |
| 關閉回收站 (會話級) | ALTER SESSION SET RECYCLEBIN = OFF; | 該會話 DROP 直接永久刪除 |
| 關閉回收站 (系統級) | ALTER SYSTEM SET RECYCLEBIN = OFF DEFERRED; | 新會話生效,需重啟 |
| 查看回收站空間佔用 | SELECT SUM(space) FROM user_recyclebin; | 單位:塊 |
DROP TABLESPACE、DROP USER、DROP CLUSTER、DROP TYPE — 這些操作無回收站,直接永久刪除TRUNCATE TABLE — 截斷表直接釋放空間,無回收站ALTER TABLE ... DROP COLUMN — 欄位刪除無回收站DROP TABLE 整表進回收站;ALTER TABLE ... DROP PARTITION 分區直接永久刪除 (12c+ 可 FLASHBACK TABLE ... TO BEFORE DROP PARTITION)ENABLE 子表外鍵PURGE RECYCLEBIN,釋放空間FLASHBACK TABLE ... TO BEFORE DROP 語法,演練恢復流程回收站將 DROP TABLE 從「毀滅性操作」降級為「可逆標記操作」,是 Oracle 為人為錯誤設計的安全網。請務必熟練掌握 USER_RECYCLEBIN 查詢、FLASHBACK TABLE TO BEFORE DROP 恢復、PURGE 清理三板斧,並在團隊建立「誤刪 5 分鐘恢復 SOP」。下次手抖執行 DROP TABLE core_biz_table 時,深呼吸,輸入 FLASHBACK TABLE core_biz_table TO BEFORE DROP; —— 數據還在,業務不停。