Oracle LOB 架构详解

Oracle LOB 架构详解

适用版本:Oracle Database 10g / 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07


1. 概述

LOB(Large Object)存储大对象数据[1]:

详细见:Oracle 数据块结构与 PCTFREE PCTUSEDOracle 段类型与分配


2. 类型

2.1 CLOB

- 字符大对象
- 文本
- 字符集

2.2 BLOB

- 二进制大对象
- 图片/视频
- 二进制

2.3 NCLOB

- 国家字符集 CLOB
- 多字节

2.4 BFILE

- 外部文件
- 只读
- 文件指针

3. 存储

3.1 BasicFiles

- 传统 LOB
- 11g 之前
- 默认(11g 之前)

3.2 SecureFiles

- 11g+
- 高级
- 压缩/加密/去重

3.3 存储位置

- INLINE:小 LOB 存行内
- OUT OF LINE:大 LOB 存 LOB Segment

4. 创建

4.1 BasicFiles

CREATE TABLE docs (
  id NUMBER,
  content CLOB
) LOB(content) STORE AS BASICFILE (
  TABLESPACE users
  ENABLE STORAGE IN ROW
  CHUNK 8192
  PCTVERSION 10
  RETENTION
  NOCACHE
);

4.2 SecureFiles

CREATE TABLE docs (
  id NUMBER,
  content CLOB
) LOB(content) STORE AS SECUREFILE (
  TABLESPACE users
  COMPRESS HIGH
  DEDUPLICATE
  ENCRYPT
  CACHE
);

5. 参数

5.1 ENABLE STORAGE IN ROW

- 行内存储
- < 4000 字节
- 性能

5.2 DISABLE STORAGE IN ROW

- 全部 LOB Segment
- 行外

5.3 CHUNK

- LOB 块大小
- 表空间块倍数
- 默认 8K

5.4 RETENTION / PCTVERSION

- 一致性读
- RETENTION:时间
- PCTVERSION:百分比

5.5 CACHE / NOCACHE

- CACHE:缓存
- NOCACHE:不缓存
- CACHE READS:读缓存

6. SecureFiles 特性

6.1 压缩

COMPRESS HIGH
-- 压缩 LOB
-- 节省空间

6.2 去重

DEDUPLICATE
-- 相同内容共享
-- 节省空间

6.3 加密

ENCRYPT USING 'AES256'
-- TDE
-- 安全

7. 操作

7.1 DBMS_LOB

DECLARE
  v_lob CLOB;
BEGIN
  SELECT content INTO v_lob FROM docs WHERE id = 1 FOR UPDATE;
  DBMS_LOB.WRITEAPPEND(v_lob, 100, '...');
  COMMIT;
END;
/

7.2 常用

DBMS_LOB.READ
DBMS_LOB.WRITE
DBMS_LOB.APPEND
DBMS_LOB.SUBSTR
DBMS_LOB.INSTR
DBMS_LOB.GETLENGTH
DBMS_LOB.COPY
DBMS_LOB.ERASE
DBMS_LOB.TRIM

8. 性能

8.1 INLINE

- 小 LOB 行内
- 单次读
- 快

8.2 CACHE

- 缓存
- 频繁读

8.3 CHUNK

- 合理
- I/O

9. 监控

9.1 视图

SELECT table_name, column_name, segment_name, 
       in_row, chunk, cache
FROM user_lobs;

9.2 大小

SELECT segment_name, bytes/1024/1024 AS mb
FROM user_segments
WHERE segment_type = 'LOBSEGMENT';

9.3 等待

SELECT event, time_waited
FROM v$system_event
WHERE event LIKE 'lob%';

10. 应用场景

10.1 文档

- CLOB
- 文本
- 内容管理

10.2 多媒体

- BLOB
- 图片/视频
- 存储

10.3 XML

- XMLType
- CLOB
- 存储

11. 常见问题

11.1 LOB 空间

- 高水位
- RETENTION
- 清理

11.2 性能

- CACHE
- CHUNK
- INLINE

11.3 ORA-01555

- LOB 一致性
- RETENTION
- 调整

12. 最佳实践

  1. SecureFiles:11g+
  2. INLINE:小 LOB
  3. CACHE:频繁读
  4. CHUNK:合理
  5. RETENTION:一致性
  6. 压缩:SecureFiles
  7. 加密:敏感
  8. 监控:大小
  9. 文档:设计
  10. 演练:定期

13. 参考资料

[1] Oracle Database SecureFiles and Large Objects Developer’s Guide 19c https://docs.oracle.com/en/database/oracle/oracle-database/19/adlob/