错误信息
【汉】ORA-01653:无法在表空间中扩展表
【英】ORA-01653:unable to extend table string.string by string in tablespace string
例
在对表进行数据操作(例如插入、更新、删除)时报错。
版本
在所有版本中都会遇到。
原因
在数据操作时,Oracle无法继续为表段分配该操作所需的数据块(表空间没有可用空间分配)时,会抛出此错误。
简单来说,就是在操作数据的过程中,如果发现当前表段中的区不够,则会使用表空间中的可用空间为其分配区(区中包含一定数量的数据块,数据块是Oracle的最小单位),直至本次数据操作完成。需要注意,扩充的并不是说本次操作需要多少就扩充多少,而是按照区的类型来扩充,这里暂不说明相关原理,会在另外文档中说明表空间、段、区、块的概念。
解决方法
在解决问题之前,需要先排查该表空间使用的是大数据文件还是小数据文件。
如果是大数据文件,则表明服务器磁盘空间不足,需要增加磁盘空间。如果是小数据文件,则需要继续排查服务器磁盘空间是否还有空间可以使用,有可用空间的情况下可以增加数据文件数量或改变数据文件大小来扩充表空间,没有可用空间的情况下需要先增加磁盘容量,再使用一样的方式扩充表空间。
1、排查
--查询表空间类型
select bigfile from dba_tablespaces where tablespace_name='TEST';
参数说明:
- tablespace_name 表空间名称
- bigfile 表空间类型,NO表示时小数据文件,YES表示大数据文件。
2、解决
由排查发现该TEST表空间使用的是小数据文件。
# 查看磁盘空间
[oracle@localhost ~]$ df -h
发现还有剩余空间可用后,选择下面其中一种方法扩充表空间大小。如果没有可用空间,则需要先扩容磁盘,再执行下面二选一操作。
新增数据文件
对于小数据文件,最大可以设置为34359721984 bytes,约等于32G。因此,在设置时,需要注意不能直接写为32G,会报错。
# 增加数据文件
alter tablespace test add datafile '/home/oracle/oradata/orcl/test01.dbf'size 34359721984;
重设数据文件大小
对于小数据文件,最大可以设置成34359721984 bytes。如果你的数据文件达不到该大小,则可以在原文件的基础上,增加到如此大。
alter database datafile'/home/oracle/oradata/orcl/example01.dbf'resize 34359721984;