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

Oracle 11g 回收站與閃回技術全解析:Recyclebin 參數變化、FDA 架構、表恢復實戰與空間管理

     編輯:Oracle 資料庫基礎

11g 回收站核心參數變化:DEFERRED vs IMMEDIATE

版本參數名資料型別Session 可修改System 修改生效
10.2.0recyclebinStringTRUEIMMEDIATE (立即影響所有 Session)
11.1.0recyclebinStringTRUEDEFERRED (僅影響新連接 Session)

實務影響:11g 中 ALTER SYSTEM SET RECYCLEBIN=OFF **不會關閉當前已連接 Session 的回收站功能**,需重新連接生效。這避免了生產環境動態關閉導致正在執行的 DROP 操作行為不一致。

閃回資料庫架構演進:Undo vs Flashback Data Archive (FDA)

特性傳統閃回Oracle 11g FDA
儲存基礎Undo Segment (Undo 表空間)獨立 **Flashback Archive 表空間**
保留期限制受 UNDO_RETENTION 限制 (通常小時級)**獨立保留策略** (可設年級:RETENTION 1 YEAR)
空間管理共用 Undo 表空間,競爭激烈專用空間,可設 QUOTA、自動清理
對主業務影響長保留導致 Undo 膨脹、Snapshot Too Old**零影響**,完全隔離
啟用對象資料庫級**表級** (FLASHBACK ARCHIVE)

FDA 建立與啟用流程

-- 1. 建立專用表空間 (建議大檔案、自動擴展)
CREATE BIGFILE TABLESPACE fba_ts 
DATAFILE '/u01/oradata/ORCL/fba_ts01.dbf' SIZE 10G AUTOEXTEND ON NEXT 1G MAXSIZE 100G;

-- 2. 建立 Flashback Archive
CREATE FLASHBACK ARCHIVE fba_1yr
TABLESPACE fba_ts
RETENTION 1 YEAR  -- 保留 1 年
QUOTA 50G;        -- 空間配額

-- 3. 為表啟用 FDA
ALTER TABLE important_table FLASHBACK ARCHIVE fba_1yr;

-- 4. 查詢歷史版本 (AS OF TIMESTAMP/SCN)
SELECT * FROM important_table AS OF TIMESTAMP SYSDATE - 30;  -- 30 天前版本
SELECT * FROM important_table VERSIONS BETWEEN TIMESTAMP SYSDATE-7 AND SYSDATE; -- 週內所有版本

回收站核心操作實戰

啟用閃回資料庫前置條件

-- 1. 歸檔模式 (必須)
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;

-- 2. 配置快速恢復區 (FRA)
ALTER SYSTEM SET DB_RECOVERY_FILE_DEST = '/u01/fra' SCOPE=BOTH;
ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE = 50G SCOPE=BOTH;

-- 3. 設定閃回保留目標 (分鐘,預設 1440=1 天)
ALTER SYSTEM SET DB_FLASHBACK_RETENTION_TARGET = 2880 SCOPE=BOTH;  -- 2 天

-- 4. 啟用閃回資料庫
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE FLASHBACK ON;
ALTER DATABASE OPEN;

執行閃回資料庫操作

-- 閃回到指定時間點
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
FLASHBACK DATABASE TO TIMESTAMP TO_DATE('2024-01-15 10:00','YYYY-MM-DD HH24:MI:SS');
-- 或閃回到 SCN
FLASHBACK DATABASE TO SCN 1234567890;

-- 唯讀驗證
ALTER DATABASE OPEN READ ONLY;
-- 確認資料正確後
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE OPEN RESETLOGS;  -- 必須 RESETLOGS 重置 SCN

回收站查詢與表恢復

-- 查看當前用戶回收站
SHOW RECYCLEBIN;
-- 或
SELECT * FROM RECYCLEBIN;

-- 查看所有用戶回收站 (需 DBA 權限)
SELECT * FROM DBA_RECYCLEBIN;

-- 恢復被 DROP 的表 (原名)
FLASHBACK TABLE t_name TO BEFORE DROP;

-- 恢復並重命名 (避免名稱衝突)
FLASHBACK TABLE t_name TO BEFORE DROP RENAME TO t_name_restored;

-- 直接按回收站物件名恢復 (BIN$... 格式)
FLASHBACK TABLE "BIN$qrjyuHuVotHgQAB/AQAQ3w==$0" TO BEFORE DROP;

繞過回收站永久刪除

-- 表級
DROP TABLE t_name PURGE;

-- 用戶級 (含所有對象)
DROP USER username CASCADE;

-- 表空間級
DROP TABLESPACE users INCLUDING CONTENTS AND DATAFILES;

清空回收站釋放空間

-- 清空特定索引
PURGE INDEX idx_name;

-- 清空當前用戶回收站
PURGE RECYCLEBIN;
-- 或
PURGE USER_RECYCLEBIN;

-- 清空所有用戶回收站 (需 SYSDBA)
PURGE DBA_RECYCLEBIN;

閃回恢復區 (FRA) 空間監控與管理

查看 FRA 使用情況

-- 檔案類型佔用
SELECT FILE_TYPE, PERCENT_SPACE_USED, PERCENT_SPACE_RECLAIMABLE, NUMBER_OF_FILES
FROM V$FLASH_RECOVERY_AREA_USAGE;

-- 計算總佔用百分比
SELECT SUM(PERCENT_SPACE_USED) * 3 / 100 AS TOTAL_PCT_USED  -- 近似計算
FROM V$FLASH_RECOVERY_AREA_USAGE;

-- 詳細檔案清單
SELECT NAME, SPACE_USED, SPACE_RECLAIMABLE, NUMBER_OF_FILES
FROM V$RECOVERY_FILE_DEST;

FRA 空間不足導致資料庫 Hang/無法開啟的緊急處理

-- 緊急擴大 FRA 空間 (需實例運行)
ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE = 100G SCOPE=BOTH;  -- SPFILE 生效

-- 或臨時移動/刪除舊備份/歸檔 (RMAN)
RMAN> DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';
RMAN> DELETE OBSOLETE;

關鍵視圖與監控指標

視圖用途關鍵欄位
V$FLASHBACK_DATABASE_LOG閃回日誌空間、最早可閃回 SCN/時間OLDEST_FLASHBACK_SCN, OLDEST_FLASHBACK_TIME, ESTIMATED_FLASHBACK_SIZE
V$FLASH_RECOVERY_AREA_USAGEFRA 各檔案類型空間佔用FILE_TYPE, PERCENT_SPACE_USED, PERCENT_SPACE_RECLAIMABLE
V$DATABASE當前 SCN、閃回狀態CURRENT_SCN, FLASHBACK_ON
RECYCLEBIN / DBA_RECYCLEBIN回收站物件清單OBJECT_NAME, ORIGINAL_NAME, TYPE, DROPTIME, CAN_UNDROP

總結

Oracle 11g 將回收站參數修改改為 **DEFERRED** 生效,保護現有 Session 一致性。**FDA (Flashback Data Archive) 徹底解決了長期歷史版本查詢與 Undo 空間衝突**,實現表級、年級保留。**回收站 + 閃回資料庫 + FDA** 構成三層防護:**誤 DROP 表 → 回收站秒級恢復;誤批次更新 → 閃回資料庫分鐘級恢複;合規審計/歷史分析 → FDA 年級查詢**。DBA 必須掌握 FRA 空間監控與緊急擴容,避免空間耗盡導致資料庫不可用。

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