背景
今天发现系统异常,无法新增数据了,检查了下系统日志,有如下报错:
1 | ORA-01653: 表xxx.xxx 无法通过 8 (在表空间xxx中)扩展 |
直接登录数据库,手工插入一条数据,果然报错一样。
解决办法
既然有oracle问题编号,直接百度,解决过程如下:
查看表空间使用情况:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17SELECT UPPER(F.TABLESPACE_NAME) "表空间名",
D.TOT_GROOTTE_MB "表空间大小(M)",
D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)",
TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,2),'990.99') "使用比",
F.TOTAL_BYTES "空闲空间(M)",
F.MAX_BYTES "最大块(M)"
FROM (SELECT TABLESPACE_NAME,
ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,
ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES
FROM SYS.DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME) F,
(SELECT DD.TABLESPACE_NAME,
ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB
FROM SYS.DBA_DATA_FILES DD
GROUP BY DD.TABLESPACE_NAME) D
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME
ORDER BY 4 DESC;查询结果如下:
可是问题出现了,在log中报错的表空间并不存在,直接下一步。
查询表空间是否可扩展
1
2
3
4
5SELECT 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;查询结果如下:
发现都是不可扩展的,
MAXBYTES
为0,问题应该就在这儿了。将表空间改为可扩展
1
2
3ALTER DATABASE
DATAFILE 'xxxDAT1.DBF' AUTOEXTEND
ON NEXT 100M MAXSIZE UNLIMITED改完之后再次查询是否可扩展(上一步),结果如下:
再次尝试插入数据,已经成功了。
扩展
由于有oracle的问题号,所以问题定位比较明确。虽然在查询表空间大小的时候查询不到,但是如果我们直接搜索所有表空间:
1 | SELECT T.TABLESPACE_NAME FROM DBA_TABLESPACES T |
还是可以搜索到的,所以不必怀疑。
另外需要注意的是,在第三步,将表空间改为可扩展。是需要sys用户的,普通用户会提示权限不够。
1 | ORA-01031: insufficient privileges |