首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle 11g SecureFiles LOB 全解析:去重、壓縮、加密、存儲選項與 DB_SECUREFILE 參數深度實戰

     編輯:Oracle 資料庫相關知識

SecureFiles vs BasicFiles 核心差異

特性BasicFiles (傳統)SecureFiles (11g+)
存儲格式舊版 LOB 格式全新設計,支援隨機讀寫、流式 IO
去重不支援DEDUPLICATE 表/分區級塊級去重
壓縮不支援COMPRESS (LOW/MEDIUM/HIGH)
加密不支援ENCRYPT (AES128/192/256, TDE 整合)
效能基準隨機讀寫提升 3-10x,順序讀寫持平
相容性所有版本需 COMPATIBLE ≥ 11.0.0、ASSM 表空間

DB_SECUREFILE 參數:全庫級行為控制

值行為建議場景
PERMITTED (默認)顯式指定 SECUREFILE 才用新格式,否則 BasicFiles漸進式遷移、混合工作負載
ALWAYSASSM 表空間強制 SecureFiles,非 ASSM 退回 BasicFiles全新系統、統一標準
FORCE所有 LOB 強制 SecureFiles,非 ASSM 報錯強制合規、測試環境
NEVER禁止 SecureFiles,忽略 SECUREFILE 關鍵字舊應用相容、問題排查
IGNORE同 NEVER 但不報錯,靜默降級緊急降級

動態修改:ALTER SYSTEM SET db_securefile = 'ALWAYS' SCOPE=BOTH;

建表語法全景


CREATE TABLE secure_lob_demo (
    id          NUMBER PRIMARY KEY,
    doc_clob    CLOB,
    img_blob    BLOB,
    json_data   JSON  -- 19c+ 原生類型,底層 SecureFiles
)
LOB (doc_clob) STORE AS SECUREFILE secure_clob (
    TABLESPACE users
    ENABLE STORAGE IN ROW          -- 小 LOB (<4KB) 存行內
    CHUNK 8K                       -- 讀寫塊大小,8K/16K/32K
    RETENTION                      -- 保留舊版本支援一致性讀
    CACHE                          -- 緩存到 Buffer Cache
    COMPRESS MEDIUM                -- 壓縮等級
    DEDUPLICATE                    -- 去重(同表/分區內)
    ENCRYPT USING 'AES256'         -- 加密,需 TDE 錢包開啟
)
LOB (img_blob) STORE AS SECUREFILE secure_blob (
    TABLESPACE users
    NOCACHE                        -- 大二進制不緩存
    NOCOMPRESS                     -- 已壓縮格式 (JPG/PNG) 不再壓縮
    KEEP_DUPLICATES                -- 明確禁用去重
);

去重效能實測(1000 行 × 10KB 重複 CLOB)


-- 無去重表
CREATE TABLE nodup (id NUMBER, c CLOB)
LOB(c) STORE AS SECUREFILE (KEEP_DUPLICATES);

-- 去重表
CREATE TABLE dedup (id NUMBER, c CLOB)
LOB(c) STORE AS SECUREFILE (DEDUPLICATE);

-- 插入 1000 行相同 10KB 文本
DECLARE v_clob CLOB := RPAD('X', 10000, 'X');
BEGIN
  FOR i IN 1..1000 LOOP INSERT INTO nodup VALUES (i, v_clob); END LOOP;
  FOR i IN 1..1000 LOOP INSERT INTO dedup VALUES (i, v_clob); END LOOP;
  COMMIT;
END;
/

-- 統計段大小
SELECT segment_name, bytes/1024/1024 mb FROM user_segments
WHERE segment_name IN ('SECURE_CLOB', 'DEDUP_CLOB');

結果:

表段大小空間節省
nodup (KEEP_DUPLICATES)~18.4 MB基準
dedup (DEDUPLICATE)~0.25 MB98.6%

去重對**高重複率**(日志、郵件附件、模板文檔)效果驚人;低重複率數據開銷大於收益,建議 KEEP_DUPLICATES。

壓縮等級選擇指南

等級算法CPU 開銷壓縮比適用場景
LOWLZO極低~2x高寫入吞吐、文本/JSON/日志
MEDIUM (默認)ZLIB中等~3-4x通用文本、XML、源碼
HIGHZLIB 最佳高~5-6x歸檔數據、唯讀分析表

壓縮/去重可組合:COMPRESS MEDIUM DEDUPLICATE 先去重再壓縮,空間節省疊加。

加密實戰:TDE 整合


-- 1. 配置錢包 (僅一次)
ADMINISTER KEY MANAGEMENT CREATE KEYSTORE '/etc/oracle/wallet' IDENTIFIED BY "WalletPass#123";
ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY "WalletPass#123";
ADMINISTER KEY MANAGEMENT SET ENCRYPTION KEY IDENTIFIED BY "WalletPass#123" WITH BACKUP;

-- 2. 建表指定加密
CREATE TABLE encrypted_lob (
    id NUMBER PRIMARY KEY,
    secret CLOB
)
LOB (secret) STORE AS SECUREFILE (
    ENCRYPT USING 'AES256'
    ENCRYPT SALT          -- 默認加鹽,防彩虹表
    -- NO SALT 可選,若需索引/去重則必須 NO SALT
);

注意:加密 LOB **不支援去重**(除非 NO SALT),**不支援壓縮**(加密後熵高無法壓縮)。三者互斥,按安全/空間/效能優先級三選一或二選一。

遷移現有 BasicFiles 到 SecureFiles


-- 方法 1:在線重定義 (DBMS_REDEFINITION,零停機)
-- 方法 2:CTAS + 重建索引/約束/權限(停機窗口)
CREATE TABLE new_t AS
SELECT * FROM old_t
LOB (clob_col) STORE AS SECUREFILE (COMPRESS MEDIUM DEDUPLICATE);
-- 重建索引、約束、權限、同義詞
DROP TABLE old_t;
RENAME new_t TO old_t;

-- 方法 3:ALTER TABLE MOVE LOB (12c+,支援 ONLINE)
ALTER TABLE old_t MOVE LOB (clob_col) STORE AS SECUREFILE (COMPRESS MEDIUM) ONLINE;

監控與診斷視圖


-- SecureFiles 專用統計
SELECT * FROM v$securefile_timer;        -- 計時器統計
SELECT * FROM v$securefile_optimization; -- 優化器統計

-- 段級空間
SELECT segment_name, bytes, blocks
FROM user_segments
WHERE segment_type = 'LOBSEGMENT' AND segment_name LIKE 'SECURE%';

總結選型決策樹

  1. **需透明加密合規** → ENCRYPT(犧牲去重/壓縮)。
  2. **高重複率文本/文檔** → DEDUPLICATE + COMPRESS MEDIUM(空間節省 90%+)。
  3. **大二進制 (圖片/視頻/已壓縮)** → NOCACHE NOCOMPRESS KEEP_DUPLICATES(避免無效 CPU)。
  4. **通用業務文檔** → CACHE COMPRESS MEDIUM(平衡讀寫與空間)。
  5. **全新系統** → 設置 DB_SECUREFILE=ALWAYS + ASSM 表空間,統一 SecureFiles 標準。

SecureFiles 將 LOB 從「存儲負擔」轉變為「可計算、可壓縮、可去重、可加密的智能數據單元」,是 11g 以降存儲引擎最大亮點之一。

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