oracle 21c中临时表空间强制采用system管理方式,不支持uniform size;建临时表空间时若指定uniform会报ora-12907错误,正确写法应省略uniform子句,仅用create temporary tablespace配合tempfile。

系统分配 vs 统一大小:两种区分配方式的本质区别
Oracle本地管理表空间中,区(extent)分配只有两种模式:SYSTEM 和 UNIFORM。选错直接影响段增长效率、空间碎片和SHRINK效果。系统分配由Oracle自动控制区大小,初始小、后期大;统一大小则所有区严格等长,建表空间时就固定死。
关键不是“哪个更好”,而是“哪个更匹配你的写入模式”。比如高频小批量插入(如订单明细流水),SYSTEM能减少早期空间浪费;而大批量定期导入(如月结报表加载),UNIFORM可避免区大小跳变导致的HWM异常抬升。
12c与19c在区分配上的兼容性差异
Oracle 12c起,SYSTEM分配的默认增长阶梯已固化:前16个区64KB,之后63个1MB,再之后120个8MB,最后是64MB区。19c未改变该阶梯,但强化了对UNIFORM SIZE参数的校验——若指定非2的幂次(如UNIFORM SIZE 10M),19c会直接报错ORA-14519,而12c可能静默转为最接近的合法值。
这意味着:跨版本迁移表空间时,不能假设UNIFORM SIZE 10M在两边行为一致;生产环境若用19c,必须显式写成UNIFORM SIZE 8M或16M。
什么时候该强制用UNIFORM SIZE
以下场景必须用UNIFORM,否则后续维护成本陡增:
跨平台系统监控工具,支持 Linux 和 Windows,监控硬盘、内存、CPU 使用情况,记录历史数据,支持变化对比和预警。**适合定时任务**。触发场景:(1) 定时系统健康检查(推荐每6小时),(2) 用户询问系统状态、资源使用情况,(3) 资源异常预警,(4) 查看历史监控数据对比。
- 需要稳定预测
SHRINK SPACE COMPACT后释放的块数——SYSTEM因区大小不均,收缩后空闲空间可能分散在多个小区内,无法合并成连续大块 - 使用Oracle ASM且启用了
DISK_REPAIR_TIME,大区(如64MB)能降低ASM重平衡频率;小而碎的区会触发更多元数据同步操作 - 分区表中某分区预计长期只存固定量数据(如每月日志约1.2GB),设
UNIFORM SIZE 128M可让该分区恰好占10个区,便于容量审计和归档判断
容易被忽略的存储参数联动影响
区分配方式会悄悄改变其他参数的实际意义:
— INITIAL:在SYSTEM下仅决定第一个区大小(固定64KB),后续全由Oracle接管;在UNIFORM下才真正代表每个区大小。
— NEXT:12c/19c中该参数对SYSTEM完全无效,仅在UNIFORM下生效,且必须等于UNIFORM SIZE,否则建表空间失败。
— PCTINCREASE:已被废弃,在12c+中设了也无作用,但误写进脚本可能导致DBA误判区增长逻辑。
真正要盯住的,是建表空间时是否显式写了EXTENT MANAGEMENT LOCAL AUTOALLOCATE(即SYSTEM)还是UNIFORM SIZE——其余参数只是配角。










