首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 10g 回收桶機制詳解:徹底刪除垃圾表 (BIN$...) 釋放空間

     編輯:Oracle 資料庫基礎

Oracle 10g 新特性:回收桶 導致「刪不掉的表」

Oracle 10g 引入 Recycle Bin (回收桶) 機制:DROP TABLE 不會真正刪除物件,而是改名為 BIN$...==$0 格式移入回收桶。這導致 Middlegen/Hibernate 反向工程掃描到大量垃圾表、空間無法釋放、物件名稱汙染等問題。本文說明如何查看、清除與關閉回收桶。

現象識別

  • DROP TABLE MY_TABLE 後,SELECT * FROM USER_TABLES 仍看到 BIN$R8PK5HhrrgMK8KmgQ9nw==$0 類似物件
  • 無法用 DELETE 清除,佔用表空間
  • Hibernate/Middlegen 反向生成配置時掃描到大量垃圾物件

查看回收桶內容

SHOW RECYCLEBIN;
-- 或
SELECT * FROM USER_RECYCLEBIN;

徹底刪除 (PURGE) 操作

-- 刪除單一表 (需雙引號包住原始名稱)
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 RECYCLEBIN
  • FLASHBACK TABLE ... TO BEFORE DROP 可還原誤刪表 (前提是回收桶未清空)
  • 11g 以降預設開啟,建議依專案需求決定是否關閉

總結

Oracle 10g 回收桶雖提供誤刪保護,但若未妥善管理會造成空間洩漏與工具掃描干擾。定期執行 PURGE RECYCLEBIN 或在 DROP 時加 PURGE 選項 是最簡單有效的維護策略。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved