create bigfile tablespace语句必须严格按“create bigfile tablespace”顺序书写,bigfile紧接create后、tablespace前,仅支持一个datafile,且须显式指定extent management local和segment space management auto;漏写或错序将创建smallfile表空间。

CREATE BIGFILE TABLESPACE 语句必须严格按顺序写
Oracle 不会自动把大尺寸表空间变成 BIGFILE,哪怕你建一个 100GB 的表空间,漏掉 BIGFILE 关键字,它就是 SMALLFILE。关键不是大小,而是显式声明。
常见错误写法包括:CREATE TABLESPACE tbs_big BIGFILE DATAFILE ...(BIGFILE 位置错)、CREATE TABLESPACE tbs_big DATAFILE ...(完全没写),结果查 DBA_TABLESPACES.BIGFILE 列全是 NO,后续所有扩容逻辑都会跑偏。
正确写法只有一种顺序:
-
CREATE BIGFILE TABLESPACE必须连写,BIGFILE紧跟CREATE后、TABLESPACE前 - 只能指定一个
DATAFILE,不能用逗号列多个 - 必须显式带
EXTENT MANAGEMENT LOCAL和SEGMENT SPACE MANAGEMENT AUTO(即使 10g+ 默认,BIGFILE 不继承)
示例:
CREATE BIGFILE TABLESPACE tbs_big DATAFILE '/u01/oradata/db/tbs_big.dbf' SIZE 50G AUTOEXTEND ON NEXT 1G MAXSIZE 200G EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;
扩容只能操作那个唯一数据文件,不能 ADD DATAFILE
Bigfile 表空间在 DBA_DATA_FILES 中永远只有一行,FILE_ID 固定为 1。误执行 ALTER TABLESPACE tbs_big ADD DATAFILE 会立刻报 ORA-32771,这不是权限或语法问题,是设计限制。
扩容唯一合法方式是直接对那个单文件做 RESIZE 或依赖 AUTOEXTEND:
ALTER DATABASE DATAFILE '/u01/oradata/db/tbs_big.dbf' RESIZE 80G;ALTER DATABASE DATAFILE '/u01/oradata/db/tbs_big.dbf' AUTOEXTEND ON NEXT 512M MAXSIZE 150G;
注意:MAXSIZE 建议设具体值(如 150G),避免 UNLIMITED 触发文件系统限制(如 ext4 默认 16TB),导致后续 ORA-01144。
OLTP 场景下默认表空间别设成 BIGFILE
执行 ALTER DATABASE DEFAULT TABLESPACE tbs_big 后,所有未显式指定表空间的用户、临时段、甚至部分 Oracle 内部对象都会落到这个单文件里。这不是简化,是风险集中。
典型后果包括:
- RMAN 备份片体积过大,网络传输或磁盘 IO 成瓶颈
- 闪回日志压力集中,
FLASH_RECOVERY_AREA容易爆满 - 单点故障恢复慢:一个 100GB 文件损坏,比 10 个 10GB 文件更难并行恢复
- 不兼容老 RMAN 补丁集,
ORA-01274可能在恢复阶段才暴露
真正需要 BIGFILE 的场景很窄:你确认单个文件要超 100GB,且运行在 64 位平台、使用 ASM 或支持条带化的 LVM,同时备份工具已适配大文件。
检查是否真建成了 BIGFILE,别只看名字或大小
建完后不能光看表空间名或文件大小就认定成功。必须查系统视图确认:
-
SELECT tablespace_name, bigfile FROM dba_tablespaces WHERE tablespace_name = 'TBS_BIG';——BIGFILE列必须是YES -
SELECT file_name, bytes/1024/1024/1024 AS gb FROM dba_data_files WHERE tablespace_name = 'TBS_BIG';—— 应只返回一行,gb值应与你设定一致
如果查出来 BIGFILE 是 NO,大概率是 SQL*Plus 里语句没加分号、连接用户权限不足、或用了错误的关键字顺序。这时候删掉重建比硬调更省时间。
Bigfile 的“大”不在容量,而在管理契约:你接受一个文件管到底,就别再想着增删文件、手动分段、或者拿它当通用默认表空间。











