数据库使用了一段时间有时候突然会爆出表没有足够的空间,一般来说是用户配额空间满了,或者是表空间、磁盘空间满了。大部分情况还是表空间满了。
如果你经常看数据库的告警日志(日志位置$find /u01 -iname "alert*.log")和OEM上的信息很容易发现警告或者错误信息。但是我们大部分项目没有这样的条件,只能在pl/sql中看看。
查询表空间‘空间’使用情况sql语句:
SELECT F.TABLESPACE_NAME,
TO_CHAR ((T.TOTAL_SPACE - F.FREE_SPACE),'999,999') "USED (MB)",
TO_CHAR (F.FREE_SPACE, '999,999') "FREE (MB)",
TO_CHAR (T.TOTAL_SPACE, '999,999') "TOTAL (MB)",
TO_CHAR(T.MAX_SPACE,'999,999') "MAXSIZE(MB)",
TO_CHAR ((ROUND ((F.FREE_SPACE/T.TOTAL_SPACE)*100)),'999')||' %' PER_FREE,
CASE T.MAX_SPACE
WHEN 0 THEN 'autoextensible=no'
ELSE 'autoextensible=yes'
END AS AUTOEXTEN
FROM (
SELECT TABLESPACE_NAME,
ROUND (SUM (BLOCKS*(SELECT VALUE/1024
FROM V$PARAMETER
WHERE NAME = 'db_block_size')/1024)
) FREE_SPACE
FROM DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME
) F,
(
SELECT TABLESPACE_NAME,
ROUND (SUM (BYTES/1048576)) TOTAL_SPACE,
ROUND (SUM(MAXBYTES/1024/1024)) MAX_SPACE
FROM DBA_DATA_FILES
GROUP BY TABLESPACE_NAME
) T
WHERE F.TABLESPACE_NAME = T.TABLESPACE_NAME;
说明:TOTAL 表空间对应的数据文件占用磁盘空间
MAXSIZE 数据文件可以增长的最大值
USED 数据库实际使用的块
FREE 空闲块
TOTAL = USED + FREE oracle数据库中数据块和空闲块都占用磁盘空间的。