Oracle 10g 引入 Recycle Bin (回收桶) 機制:DROP TABLE 不會真正刪除物件,而是改名為 BIN$...==$0 格式移入回收桶。這導致 Middlegen/Hibernate 反向工程掃描到大量垃圾表、空間無法釋放、物件名稱汙染等問題。本文說明如何查看、清除與關閉回收桶。
DROP TABLE MY_TABLE 後,SELECT * FROM USER_TABLES 仍看到 BIN$R8PK5HhrrgMK8KmgQ9nw==$0 類似物件DELETE 清除,佔用表空間SHOW RECYCLEBIN;
-- 或
SELECT * FROM USER_RECYCLEBIN;
-- 刪除單一表 (需雙引號包住原始名稱)
PURGE TABLE "BIN$R8PK5HhrrgMK8KmgQ9nw==$0";
-- 刪除目前用戶所有回收桶物件
PURGE RECYCLEBIN;
-- 刪除指定表空間回收桶 (需 DBA 權限)
PURGE TABLESPACE USERS;
PURGE TABLESPACE USERS USER SCOTT;
-- DBA 清理全庫回收桶
PURGE DBA_RECYCLEBIN;
-- 會話層級關閉 (僅當前連線)
ALTER SESSION SET RECYCLEBIN = OFF;
-- 系統層級關閉 (需重啟實例生效)
ALTER SYSTEM SET RECYCLEBIN = OFF SCOPE=SPFILE;
-- 重啟資料庫後生效
DROP TABLE MY_TABLE PURGE; -- 立即永久刪除,不經回收桶
PURGE DBA_RECYCLEBIN 需 SYSDBA 或 PURGE DBA_RECYCLEBIN 系統權限PURGE RECYCLEBINFLASHBACK TABLE ... TO BEFORE DROP 可還原誤刪表 (前提是回收桶未清空)Oracle 10g 回收桶雖提供誤刪保護,但若未妥善管理會造成空間洩漏與工具掃描干擾。定期執行 PURGE RECYCLEBIN 或在 DROP 時加 PURGE 選項 是最簡單有效的維護策略。