oracle 11g与19c表空间管理无本质架构变更,但19c在压缩表加字段(取消ora-39726限制)、加密表空间在线转换、assm段创建时机及只读表空间加列容错性等方面显著增强。

Oracle 11g与19c的表空间管理核心差异在哪
没有本质性架构变更,表空间仍是逻辑存储单元,但19c在高级特性支持、默认行为和错误容忍上做了关键收敛。最直接影响生产操作的是:压缩表空间、加密表空间、自动段空间管理(ASSM)的边界处理方式不同。
压缩表空间添加字段是否报ORA-39726
这是最容易踩坑的点。11g对压缩表(尤其是COMPRESS FOR OLTP)添加带默认值字段时,若未加NOT NULL,极大概率触发ORA-39726: unsupported add column operation on a compressed table;19c已彻底移除此限制,即使表启用压缩,执行ALTER TABLE t ADD c VARCHAR2(10) DEFAULT 'X'也能成功且走元数据默认值路径。
- 11g中必须显式加
NOT NULL才能绕过该错误 - 19c中该错误仅在极少数混合压缩+LOB列场景下偶发,官方文档已将其标记为“deprecated behavior”
- 验证方法:
SELECT compression FROM dba_tables WHERE table_name = 'T'
表空间加密支持范围变化
11g企业版支持表空间级TDE(Transparent Data Encryption),但仅限于新建表空间;对已有非加密表空间,无法在线转换为加密状态。19c则支持ALTER TABLESPACE ... ENCRYPTION ONLINE,可在业务不中断前提下完成加密迁移。
- 11g中加密表空间创建后,所有新对象自动继承加密属性,但已有对象不受影响
- 19c中加密表空间支持更细粒度控制,如
ENCRYPTION USING 'AES256'可指定算法 - 注意:11g的
DBMS_TTS.TRANSPORT_SET_CHECK对加密表空间检查较松,19c会严格校验密钥句柄一致性
自动段空间管理(ASSM)的隐式行为差异
两者都默认启用ASSM,但19c对SEGMENT CREATION DEFERRED的处理更激进:11g中首次INSERT才分配段,而19c在某些DDL(如添加约束)后可能提前触发段创建,导致表空间占用比预期早出现增长。
- 11g中
CREATE TABLE t (x INT) SEGMENT CREATION DEFERRED建表后dba_segments无记录 - 19c中执行
ALTER TABLE t ADD CONSTRAINT t_pk PRIMARY KEY(x)后,dba_segments可能立即出现该表段 - 这个差异会影响空间预估脚本——若依赖
dba_segments判断“空表”,19c下可能误判
真正容易被忽略的是:19c中ALTER TABLESPACE ... READ ONLY后,对其中表执行ADD COLUMN DEFAULT不会失败,但11g会直接报ORA-01603: segment is read only。这个细节决定了降级回退方案里能否安全做元数据补丁。











