今天在Oracle中新增数据时,出现了“ORA-01658: 无法为表空间xxx中的段创建 INITIAL 区”错误,这种情况一般都是当前Oracle数据库表空间不够导致的,需要扩容,网上搜了下解决办法都大同小异,这里简单整理并记录下,方便直接使用。
首先查询下表空间使用率,并查询出表空间文件位置
select t.file_name 文件路径,
t.tablespace_name 表空间名称,
t.bytes / 1024 / 1024 表空间大小M,
(t.bytes - sum(nvl(a.bytes, 0))) / 1024 / 1024 已使用M,
substr((t.bytes - sum(nvl(a.bytes, 0))) / (t.bytes) * 100, 1, 5) 利用率
from dba_free_space a, dba_data_files t
where a.file_id = t.file_id
group by t.tablespace_name, t.file_name, t.bytes
order by t.tablespace_name
执行后,可以在查询结果中找到报错的表空间名称以及文件路径,然后对其进行扩容,方法如下:
方法一:修改原表空间大小
alter database datafile 'D:\test\xxx.DBF' resize 10000m
这句将原表空间大小修改成10个G,注意:单个表空间最大为32G
方法二:增加数据文件个数
alter tablespace 'xxx' add datafile 'D:\test\xxx_2.DBF' size 10000m
除此之外,还可以将表空间设置为自动增长
alter database datafile 'D:\test\xxx.DBF' autoextend on next 300m maxsize 10000m
但这种方式,单个表空间依然受最大32G限制