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

Oracle Recycle Bin(回收站)深度解析:原理、操作與底層字典結構

     編輯:DB2 教學

Oracle Recycle Bin(回收站)深度解析:原理、操作與底層字典結構

環境資訊

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0
Enterprise Linux Server release 5.5

什麼是 Recycle Bin?

回收站是一個虛擬容器,用於儲存被 DROP 的物件。被刪除的物件仍佔用原有空間,直到被永久清除或回收站清空。可透過參數 recyclebin 控制開關(預設 ON)。

啟用/停用回收站

SHOW PARAMETER recyclebin;
ALTER SYSTEM SET recyclebin=OFF SCOPE=SPFILE; -- 需重啟生效

實戰演示:建立、刪除、查詢、清除

  1. 建立測試表 DIY_OS 並插入資料。
  2. DROP TABLE DIY_OS; 表進入回收站,系統自動重命名為 BIN$...$0 格式。
  3. 查詢回收站視圖:
SELECT * FROM USER_RECYCLEBIN;
-- 或 DBA 檢視所有用戶
SELECT * FROM DBA_RECYCLEBIN;

回收站參數與查詢結果

關鍵特性與注意事項

  • SYS 用戶物件不進回收站:刪除 SYS 物件直接永久移除,Oracle 不建議在 SYS 下建立業務物件。
  • 清除操作:
    • 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#);

深入理解字典結構,有助於從根源掌握回收站運作機制,進行更精準的管理與故障排查。

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