遷移場景
數據倉庫/BI 環境大量使用 LOB 儲存 XML 商務文檔、醫療影像。需將既有 BasicFile LOB 表遷移至 SecureFile 以獲得壓縮、去重、加密、快取優勢。
環境準備:分區表結構對齊
建立來源表 TRBTKT.TICKETS (BasicFile) 與目標表 TRBTKT.SECURE_TICKETS (SecureFile),均按 STATUS 列表分區 (OPEN/PENDING/CLOSED/OTHER)。目標表各分區針對 LOB 獨立設定壓縮/去重策略:
- OPEN:文檔保留重複/無壓縮,影像保留重複/壓縮
- PENDING:文檔保留重複/無壓縮,影像去重/壓縮
- CLOSED/OTHER:文檔與影像均去重/高壓縮
使用 PL/SQL 套件 PKG_SECUREFILES.ADD_TROUBLE_TICKET 載入測試資料,並收集優化器統計資訊。
兩大遷移方案深度比較
方案 1:分區交換載入 (Partition Exchange Load, PEL)
原理:建立非分區暫存表,結構與目標分區完全一致 → 載入資料 → ALTER TABLE ... EXCHANGE PARTITION 交換。
優點:
- 本地索引自動維護
- 支援平行執行
- 可重複執行填充各分區
缺點:目標分區交換期間必須離線,影響可用性。
方案 2:在線重定義
原理:使用 DBMS_REDEFINITION 套件,在源表與目標表之間建立同步機制,完成後在資料字典中原子切換物件定義。
優點:
- 全程在線,目標表無需離線
- 支援表級與分區級操作
- 可平行處理多個分區
- 完成後 PL/SQL 物件引用自動生效,無需修改代碼
Oracle 官方推薦,生產環境首選。
關鍵提醒
遷移完成後,LOB 無法降級回 BasicFile,請務必先在測試環境驗證應用相容性。
SecureFile 中繼資料管理:數據字典視圖與 DBMS_SPACE
1. 關鍵數據字典視圖 (11g 增強)
| 視圖 | 用途 | 關鍵欄位 |
DBA_SEGMENTS | 段資訊 | SEGMENT_SUBTYPE (BASICFILE/SECUREFILE) |
DBA_LOBS | LOB 定義 | SECUREFILE, COMPRESSION, DEDUPLICATION, ENCRYPT, CACHE |
DBA_PART_LOBS | 分區 LOB 預設值 | DEF_SECUREFILE, DEF_COMPRESS, DEF_DEDUPLICATE |
DBA_LOB_PARTITIONS | 分區層級實際設定 | COMPRESSION, DEDUPLICATION, SECUREFILE |
2. 空間使用率分析:DBMS_SPACE.SPACE_USAGE
需啟用 ASSM (自動段空間管理)。BasicFile 僅報告 Full/Unformatted Blocks;SecureFile 提供 Used/Expired/Unexpired Blocks 詳細分析。
-- BasicFile 範例輸出
Full Blocks: 123 KB: .96
Unformatted Blocks: 379 KB: 2.96
-- SecureFile 範例輸出
Segment Blocks: 1024 KB: 8192
Used Blocks: 124 KB: 992
Expired Blocks: 882 KB: 7056
Unexpired Blocks: 0 KB: 0
Expired Blocks 表示已過保留期可重用空間,Unexpired 為保留期內不可覆寫空間,反映 SecureFile 進階空間管理能力。
動態調整 SecureFile 屬性
使用 ALTER TABLE ... MODIFY LOB 或 MODIFY PARTITION ... LOB 即時調整,僅影響新建/修改的 LOB,既有資料不自動重組。
-- 表級關閉壓縮
ALTER TABLE trbtkt.tickets MODIFY LOB(document) (NOCOMPRESS);
-- 表級關閉去重
ALTER TABLE trbtkt.tickets MODIFY LOB(scrnimg) (KEEP_DUPLICATES);
-- 分區級調整:PENDING 分區影像高壓縮
ALTER TABLE trbtkt.tickets MODIFY PARTITION sts_pending LOB(scrnimg) (COMPRESS HIGH);
-- 分區級調整:PENDING 分區文檔啟用去重
ALTER TABLE trbtkt.tickets MODIFY PARTITION sts_pending LOB(document) (DEDUPLICATE);
調整後可查詢 DBA_LOB_PARTITIONS 驗證生效狀態。
總結建議
- 生產環境優先採用 在線重定義,零停機遷移
- 規劃分區級壓縮/去重策略,依資料存取頻率與壽命週期差異化配置
- 善用
DBA_LOB_PARTITIONS 監控實際儲存屬性,DBMS_SPACE 追蹤空間效益
- 屬性調整僅對新資料生效,歷史資料需重組時可配合
ALTER TABLE ... MOVE LOB 或再次重定義
- 上一篇文章: Oracle 開發實戰經驗談:SQL*Plus 技巧、Forms/Reports 進階應用與 DBA 管理精要
- 下一篇文章: Oracle資料庫連結建立的兩種實用方法詳解
Copyright ©
程式碼之家 All Rights Reserved