错误
java.sql.SQLException: ORA-01688: unable to extend table XXX partition YYY by 1024 in tablespace ZZZ
往Oracle table中导入大量数据时,遇到上面的数据库错误。
注意:
我在错误信息中隐藏了真实的表名、分区名、表空间名,下面的sql也将用它们来代替,如果要解决自己项目中的问题,根据自己的情况进行替换:
XXX: table name
YYY: partition name
ZZZ: tablespace name
错误解释:
该表所属的表空间大小不够。
解决方案
有以下3种解决办法:
-
给指定的tablespace增加data file
alter tablespace ZZZ add datafile 'path\to\data\file2' size 1G;
-
增加当前data file的大小
alter database datafile 'path\to\data\file' resize 10G;
-
设置当前的data file为自动增长
alter database datafile 'path\to\data\file' autoextend on maxsize unlimited;
注意:
上面的sql是例子,具体的限制根据自己项目的实际情况来。
如果是测试环境,可以考虑删除不用的老数据,达到清理空间的效果。例子如下:
alter table table_name truncate partition partition_name
update indexes;
# 清理某个表的某个partition中的数据
分析(相关知识)
解决这样的问题,首先分析当前表空间的实用情况,主要实用下面一些比较重要的系统view或者table等:
DBA_TABLESPACES
USER_TABLESPACES
DBA_DATA_FILES
DBA_FREE_SPACE
V$DATAFILE
DBA_SEGMENTS
Oracle提供了很多有用的系统表或者视图,可以参见下面的博客:
脚本1
查出当前数据库中表空间使用率情况。
不出意外,错误信息里的表空间ZZZ应该排在最前面。
SELECT a.TABLESPACE_NAME, a.BYTES/1024/1024 "sum MB",
(a.BYTES-b.BYTES)/1024/1024 "used MB",B.BYTES/1024/1024 "free MB",
ROUND (((a.BYTES-b.BYTES)/a.BYTES)*100,2) "used%" FROM
(SELECT TABLESPACE_NAME, SUM(BYTES) BYTES FROM DBA_DATA_FILES GROUP BY TABLESPACE_NAME) a,
(SELECT TABLESPACE_NAME, SUM(BYTES) BYTES, MAX(BYTES) LARGEST FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME) b
WHERE a.TABLESPACE_NAME = b.TABLESPACE_NAME
ORDER BY ((a.BYTES-b.BYTES)/a.BYTES) DESC;
脚本2
查出表空间ZZZ的所有data file的大小
SELECT TABLESPACE_NAME, FILE_ID, FILE_NAME, ROUND(BYTES/(1024*1024),0) TOTAL_SPACE_MB
FROM DBA_DATA_FILES WHERE TABLESPACE_NAME = 'ZZZ'
ORDER BY TOTAL_SPACE_MB DESC, FILE_ID ASC;
脚本3
按照大小顺序列出所有使用表空间ZZZ的数据库对象,
注意 SEGMENT_TYPE字段。
SELECT OWNER, TABLESPACE_NAME, SEGMENT_NAME, SEGMENT_TYPE, PARTITION_NAME, ROUND(BYTES/(1024*1024),2) SIZE_MB
FROM DBA_SEGMENTS
WHERE SEGMENT_TYPE IN ('TABLE', 'TABLE PARTITION', 'TABLE SUBPARTITION',
'INDEX', 'INDEX PARTITION', 'INDEX SUBPARTITION', 'TEMPORARY', 'LOBINDEX', 'LOBSEGMENT', 'LOB PARTITION')
AND TABLESPACE_NAME = 'ZZZ'
ORDER BY BYTES DESC;
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/155833.html