如何解决表空间不足即数据文件达到最大值问题
Oracle在实际业务应用中,随着业务的发展,数据量逐渐增多,会遇到一个普遍性问题,那就是表空间不足的问题。表空间不足问题的本质是数据文件中存储数据的大小达到了数据文件容量的最大值。
如果,不幸的遇到了表空间不足的问题时,我们要该如何处理呢?
1、可以先查询对应的表空间的最大空间,和可用空间,查找出哪个表空间查找不足的情况,具体代码如下:
SELECT 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 F.TABLESPACE_NAME
结果如下:
2、然后可以根据表空间的使用情况,查询表空间对应的具体数据文件的使用情况,代码如下:
select t.TABLESPACE_NAME, --表空间名 t.FILE_NAME, --文件名 t.AUTOEXTENSIBLE, --是否自动扩展 t.BYTES / 1024 / 1024, --表空间初始大小 t.MAXBYTES / 1024 / 1024, --表空间最大扩展到多少 b.CONTENTS, --表空间类型 b.EXTENT_MANAGEMENT --表空间管理模式 from dba_data_files t, dba_tablespaces b where t.TABLESPACE_NAME = b.TABLESPACE_NAME
结果如下:
3、通过上图,可以发现USERS表空间对应的数据文件USERS01.DBF对应的数据文件大小只有5M。这里数据文件的大小明显太小,不用多久就会出现空间不足的情况(这里可能大家觉得数据文件是自动扩展的,而且最大值有3G,怎么还会出现表空间不足的情况,那是由于在某些事物中会进行大批量数据处理时,特别是数据导入或者迁移的过程中,要大批量的插入数据,这时由于可用空间只有5M,明显过小,因此就会出现表空间不足的情况)。
这里可以通过两种方法解决表空间不足的问题:
3.1、可以对数据文件USERS01.DBF进行扩充,具体代码如下:
alter database datafile 'C:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS01.DBF' resize 100M ;
3.2、可以直接再增加一个数据文件USERS02.DBF,初始化大小为100M,自动扩展,最大值为500M的数据文件,具体代码如下:
alter tablespace USERS add datafile 'C:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS02.DBF' size 100m autoextend on next 10m maxsize 500m
再次通过查询数据文件使用情况语句,查询一下刚刚增加和改变的数据文件,结果如下:
总结:本文介绍如何解决表空间不足问题,即数据文件大小达到最大值时,该如何对其进行扩充或增加,从而从根本解决表空间不足的问题。