Oracle 12c中PDB最大表空间限制由CDB$ROOT执行的ALTER PLUGGABLE DATABASE ... STORAGE (MAXSIZE)设定,管控PDB所有数据文件总容量;该操作必须在PDB MOUNTED状态下执行,否则报ORA-65015,且需严格按CLOSE→STORAGE修改→OPEN顺序操作。
oracle 12c 的 pdb 级别最大表空间限制,不是靠“表空间自身配置”实现的,而是通过 alter pluggable database ... storage (maxsize) 在 cdb$root 中设置的硬性总容量上限——它管的是整个 pdb 所有数据文件加起来能占多少磁盘空间,不是单个表空间的限额。
为什么 ALTER PLUGGABLE DATABASE STORAGE 必须在 MOUNTED 状态下执行
你不能在 PDB 已经 OPEN READ WRITE 时修改 STORAGE 属性。Oracle 强制要求先关闭再改再开,否则报 ORA-65015: cannot modify storage attributes of a pluggable database that is open。
-
ALTER PLUGGABLE DATABASE hrpdb CLOSE IMMEDIATE—— 必须用IMMEDIATE,否则可能 hang 住 -
ALTER PLUGGABLE DATABASE hrpdb STORAGE (MAXSIZE 5G)—— 只能在MOUNTED状态执行,此时 PDB 不接受连接 -
ALTER PLUGGABLE DATABASE hrpdb OPEN—— 漏掉这步,PDB 就卡在MOUNTED,应用连不上
顺序错一步,MAXSIZE 就不生效,且不会报错提示你漏了哪步。
如何确认 PDB 是否设置了 MAXSIZE 限额
查 CDB_PDB_STORAGE_LIMITS(注意是 CDB_ 前缀),不是 PDB_STORAGE_LIMITS,且必须在 CDB$ROOT 下查:
SELECT con_id, pdb_name, storage_unlimited, max_size FROM CDB_PDB_STORAGE_LIMITS WHERE pdb_name = 'HRPDB';
关键看三列:
-
storage_unlimited = 'NO':说明设过MAXSIZE,max_size是字节数(如5368709120) -
storage_unlimited = 'YES':没设过,max_size是NULL,不是0 - 查不到记录:等同于
storage_unlimited = 'YES',只是视图不显式存这一行
别在 PDB 内查这个视图——它不存在;也别指望从 DBA_DATA_FILES 或 DBA_TABLESPACES 里反推出限额,那是物理文件清单,和策略无关。
MAXSIZE 和表空间 AUTOEXTEND 的冲突怎么处理
MAXSIZE 是逻辑总控,但表空间自己的 AUTOEXTEND ON MAXSIZE 会先触发。比如 PDB 设了 STORAGE (MAXSIZE 5G),但里面一个表空间建成了 AUTOEXTEND ON MAXSIZE 10G,那么:
- 当该表空间扩展到 5G 时,不会立刻报错——因为 Oracle 先检查表空间级
MAXSIZE(10G),还没到 - 等到它真要写第 5.001G 字节时,才触发
ORA-65029: exceeded maximum size for pluggable database - 但如果表空间先撑满自己设的 10G,就会先报
ORA-01237: cannot extend datafile
所以:必须同步控制两层——PDB 级 STORAGE + 表空间级 AUTOEXTEND,否则限额形同虚设。尤其警惕脚本自动建表空间时默认带 AUTOEXTEND ON 的行为。
用户级配额(QUOTA)和 PDB 级 MAXSIZE 的关系
MAXSIZE 是容器级总闸门,QUOTA 是用户级分水阀,二者不替代、不覆盖、必须共存:
- 即使 PDB 设了
MAXSIZE 5G,如果用户在USERS表空间没配QUOTA,建表仍报ORA-01950 -
GRANT UNLIMITED TABLESPACE会绕过所有QUOTA检查,但不影响MAXSIZE——超了照样报ORA-65029 - 临时表空间限额走另一套:用
STORAGE (MAX_SHARED_TEMP_SIZE)控制共享 TEMP 配额,和QUOTA无关
最容易被忽略的点:MAXSIZE 是“允许最多用多少”,不是“当前已用多少”。真要监控剩余空间,得联合 CDB_DATA_FILES 和 CDB_FREE_SPACE,按 CON_ID 对齐计算,不能只看 CDB_PDB_STORAGE_LIMITS。


















