查詢 USER_TABLES 發現大量奇怪表名:BIN$xxx==$0,佔用空間、干擾物件管理。根因:Oracle 10g 引入 回收站,DROP TABLE 不再物理刪除,而是重命名移入回收站。
SELECT object_name, type, original_name
FROM user_recyclebin;
關鍵欄位:OBJECT_NAME (BIN$ 系統名)、ORIGINAL_NAME (原表名)、TYPE (TABLE/INDEX/LOB...)
-- 依原名清除表
PURGE TABLE original_table_name;
-- 依原名清除索引
PURGE INDEX original_index_name;
-- 依系統名清除
PURGE TABLE "BIN$xxx==$0";
PURGE RECYCLEBIN;
等同 PURGE USER_RECYCLEBIN,清除當前用戶回收站。DBA 可用 PURGE DBA_RECYCLEBIN 清除全庫。
DROP TABLE table_name PURGE;
立即物理刪除,不進回收站,無法恢復。生產環境謹慎使用!
ORA-01536: space quota exceededPURGE RECYCLEBIN 納入維護作業-- 恢復被 DROP 的表
FLASHBACK TABLE original_table_name TO BEFORE DROP;
-- 恢復並重命名
FLASHBACK TABLE original_table_name TO BEFORE DROP RENAME TO new_table_name;
這是回收站存在的核心價值:**誤刪救生圈**。
| 參數 | 值 | 效果 |
|---|---|---|
| RECYCLEBIN | ON (預設) | 啟用回收站 |
| OFF | 停用,DROP 即物理刪除 (session/system 級可設) |
-- Session 級暫停
ALTER SESSION SET RECYCLEBIN = OFF;
-- 系統級永久停用 (需重啟)
ALTER SYSTEM SET RECYCLEBIN = OFF SCOPE=SPFILE;
RECYCLEBIN=OFF 或習慣 DROP ... PURGE,避免垃圾堆積ON,建立每日 PURGE RECYCLEBIN 排程,保留 7-30 天誤刪保護窗口DBA_RECYCLEBIN 空間佔用,超過表空間 10% 告警DROP TABLE 釋放空間 → 實則只是改名,空間未釋放PURGE TABLE 需用 BIN$ 名 → 實則支援原名,更直觀FLASHBACK TABLE ... TO BEFORE DROP 秒級恢復誤刪表Oracle 10g 回收站以「軟刪除+閃回恢復」平衡安全與便利。理解 BIN$ 來源、掌握 PURGE/FLASHBACK 雙劍合璧,讓誤刪不再是災難,而是可控的小插曲。