前言:
在oracle使用中,当某一个用户的表数据达到千万级别的时候,很容易出现用户表空间不足,导致用户在前端页面新增数据时提示”系统错误,请联系管理员“。出现这种情况常见处理方式有两种:
a、删除该用户备份表(临时解决)
b、新增表空间文件(一个表空间可以有多个表空间文件)
解决方法:当前表空间 新增加表空间文件(需要DBA权限)
据我了解,oracle单个表空间文件上限为32G,当使用达到32G的时候,就不能增加了。但是一个表空间可以有多个表空间文件,理论表空间是没有上限的。(理解不一定正确,可作参考)
1、查询表空间使用情况:
-- 查询表空间使用情况
SELECT UPPER(F.TABLESPACE_NAME) AS "表空间名",
D.TOT_GROOTTE_MB AS "表空间大小(G)",
D.NUM_FILES AS "文件数量",
D.AUTO_EXTENSIBLE AS "自动扩展",
D.MAX_SIZE_GB AS "最大大小(G)",
D.FILE_PATH AS "表空间文件全路径",
D.TOT_GROOTTE_MB - F.TOTAL_BYTES AS "已使用空间(G)",
TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100, 2), '990.99') || '%' AS "使用比",
F.TOTAL_BYTES AS "空闲空间(G)",
F.MAX_BYTES AS "最大块大小(G)"
FROM (SELECT DD.TABLESPACE_NAME,
COUNT(*) AS NUM_FILES,
DECODE(SUM(DECODE(DD.AUTOEXTENSIBLE, 'YES', 1, 0)), COUNT(*), 'YES', 'NO') AS AUTO_EXTENSIBLE,
ROUND(SUM(DD.BYTES) / (1024 * 1024 * 1024), 2) AS TOT_GROOTTE_MB,
MAX(ROUND(DD.MAXBYTES / (1024 * 1024 * 1024), 2)) AS MAX_SIZE_GB,
LISTAGG(DD.FILE_NAME)
WITHIN GROUP(ORDER BY DD.TABLESPACE_NAME) AS FILE_PATH
FROM SYS.DBA_DATA_FILES DD GROUP BY DD.TABLESPACE_NAME) D,
(SELECT TABLESPACE_NAME,
ROUND(SUM(BYTES) / (1024 * 1024 * 1024), 2) AS TOTAL_BYTES,
ROUND(MAX(BYTES) / (1024 * 1024 * 1024), 2) AS MAX_BYTES
FROM SYS.DBA_FREE_SPACE GROUP BY TABLESPACE_NAME) F
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME ORDER BY 1;
2、根据查询到的路径新增表空间文件:(速度较慢,请耐心等待)
--在 USERS 表空间新增表空间文件,默认100m,自动扩展,最小100m,最大1G,上限32G。
ALTER TABLESPACE USERS ADD DATAFILE '/home/oracle/app/oradata/orcl/USER02.dbf' SIZE 100M AUTOEXTEND ON NEXT 100M MAXSIZE 1G;
这里给 USERS 表空间新增了一个100M的表空间文件,由于测试环境存储空间不足就不附截图。等待执行完成之后,使用第一条sql查询表空间使用情况即可看到结果。