原因分析
出现该错误的原因是由于“表空间数据太大”问题导致,Oracle数据库在创建表的时候会默认给一个表空间作为表数据存储的默认表空间,当数据库中某个表空间数据无法新增(存满了,一个数据文件最大为32G)的时候,恰好系统调用数据库应用到了该表空间,就会报错异常!
如何处理
- 查看数据库中所有表空间相关信息,执行一下SQL:
SELECT T.TABLESPACE_NAME,D.FILE_NAME,
D.AUTOEXTENSIBLE,D.BYTES,D.MAXBYTES,D.STATUS
FROM DBA_TABLESPACES T,DBA_DATA_FILES D
WHERE T.TABLESPACE_NAME =D.TABLESPACE_NAME
ORDER BY TABLESPACE_NAME,FILE_NAME;
该SQL可以查看表空间是否有自动扩展能力,同时BYTES是表空间已使用值,MAXBYTES是表空间可存储最大值,如下图所示:
第一条记录就是我的USERS表空间数据已经无法存储,所以我创建了第二个数据存储文件来保证该表空间可以正常运行。
- 创建新数据文件,并且允许数据文件自动增长,执行SQL:
ALTER TABLESPACE app_data ADD DATAFILE
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\EDWTEST\APP04.DBF' SIZE 1G
AUTOEXTEND ON NEXT 5M MAXSIZE 100M;
其中设置的每个文件初始分配空间为1G, AUTOEXTEND ON为自动增长大小,oracle单个文件大小最大不超过32G,创建好以后就有了上图的第二条数据。
当然,还有其他一些方式,比如 允许已存在的数据文件自动增长 或者 手工改变已存在数据文件的大小等等,不过上面新增数据文件的方式应该可以解决以上类似问题!