这是近期在对一个Oracle 19C RAC 含PDB库进行表空间扩容时遇到的问题,特记录整理,以便下次遇到可以更好处理,也希望对其他有此需求的朋友提供些帮助。
下午在对一个Oracle 19C 含有PDB的数据库进行表空间扩容时遇到ORA-65114: space usage in container is too high报错:
SQL> select file_id,sum(bytes/1024/1024/1024) from dba_data_files where tablespace_name='T_XXX_DATA' group by file_id;FILE_ID SUM(BYTES/1024/1024/1024)---------- -------------------------22 547.167969SQL> alter database datafile 22 resize 570G;alter database datafile 22 resize 570G*ERROR at line 1:ORA-65114: space usage in container is too high
我很诧异,平时在对一些数据库进行表空间扩容时都是用此方法,为什么这次会报错呢。
出现如上报错,是因为该环境使用CDB-PDB模式,在创建PDB的时候,指定了容器可使用的容量上限。
可通过如下语句查询该PDB的容量配额。
alter session set container=PDB_NAME;
select con_id, name, open_mode, total_size from v$pdbs;

原因是:在 Oracle 数据库中,为 PDB配置存储空间配额涉及为每个 PDB 设置可用于表空间的存储容量上限。这样会有助于控制每个 PDB 中用户或角色可以使用的存储资源,防止一个 PDB 使用过多的存储资源影响其他 PDB。
对于在创建pdb时设置了存储空间配额,可上调该PDB的容量配额,如果空间比较充分,可执行如下操作:
-- 切换到对应PDBALTER SESSION SET CONTAINER = pdb_name;-- 设置/修改存储空间配额alter pluggable database storage ( maxsize XXXg);或者alter pluggable database storage unlimited;
重新调整PDB的容量大小后,然后再使用alter database datafile xxx resize xxx;就不再报错了。
原文作者:尚雷的驿站;如有侵权,请联系管理员删除。