Oracle Database 11g Enterprise Edition Release 11.2.0.1.0
Enterprise Linux Server release 5.5
回收站是一個虛擬容器,用於儲存被 DROP 的物件。被刪除的物件仍佔用原有空間,直到被永久清除或回收站清空。可透過參數 recyclebin 控制開關(預設 ON)。
SHOW PARAMETER recyclebin;
ALTER SYSTEM SET recyclebin=OFF SCOPE=SPFILE; -- 需重啟生效
DIY_OS 並插入資料。DROP TABLE DIY_OS; 表進入回收站,系統自動重命名為 BIN$...$0 格式。SELECT * FROM USER_RECYCLEBIN;
-- 或 DBA 檢視所有用戶
SELECT * FROM DBA_RECYCLEBIN;

PURGE RECYCLEBIN:清空當前用戶回收站PURGE DBA_RECYCLEBIN:清空所有用戶回收站(需權限)PURGE TABLESPACE ts_name / PURGE TABLE user.table_name:針對性清除DROP TABLESPACE ... INCLUDING CONTENTS 或 DROP USER ... CASCADE 時,回收站中相關物件會被一併永久刪除。FLASHBACK TABLE DIY_OS TO BEFORE DROP;(本文不詳細展開 Flashback)。查詢 DBA_RECYCLEBIN 的執行計劃涉及多張基礎表(RECYCLEBIN$, TS$, USER$, OBJ$ 等)的複雜連接與過濾。
核心字典表 RECYCLEBIN$ 結構(節選自 ?/rdbms/admin/dsqlddl.bsq):
CREATE TABLE recyclebin$ (
obj# NUMBER NOT NULL, -- 原物件編號
owner# NUMBER NOT NULL, -- 擁有者用戶編號
original_name VARCHAR2(32), -- 原物件名稱
operation NUMBER NOT NULL, -- 操作類型:0=DROP, 1=TRUNCATE(不支援)
type# NUMBER NOT NULL, -- 物件類型
ts# NUMBER, -- 表空間編號
file# NUMBER, -- 段頭文件編號
block# NUMBER, -- 段頭區塊編號
droptime DATE, -- 刪除時間
dropscn NUMBER, -- 導致刪除的交易 SCN
partition_name VARCHAR2(32), -- 分區名稱
flags NUMBER, -- 還原處理標誌
related NUMBER NOT NULL, -- 階層上一層物件
bo NUMBER NOT NULL, -- 基礎物件
purgeobj NUMBER NOT NULL, -- 清除時對應物件
base_ts# NUMBER, -- 基礎物件表空間
base_owner# NUMBER, -- 基礎物件擁有者
space NUMBER, -- 物件佔用區塊數
con# NUMBER, -- 約束關聯編號
spare1, spare2, spare3 NUMBER -- 備用欄位
);
-- 索引
CREATE INDEX recyclebin$_obj ON recyclebin$(obj#);
CREATE INDEX recyclebin$_ts ON recyclebin$(ts#);
CREATE INDEX recyclebin$_owner ON recyclebin$(owner#);
深入理解字典結構,有助於從根源掌握回收站運作機制,進行更精準的管理與故障排查。