oracle表空间已满解决

       在日常的oralce使用中最长遇到的问题就是oralce的表空间满了,数据无法写入报错,这种情况下通常是磁盘没有足够的空间或者表空间的数据文件达到32G(linux最大限制单个文件不超过32G)无法继续自动扩展。

 

1、首先分享一个查看表空间使用情况的语句(看着有点恶心但是不用怕,不用看不用去理解,保存好用的时候拿来直接用即可),只用看如下红色框起来的部分即可,只要表空间大小没有到32G(一个表空间文件32G,n个表空间文件32G*n)即使后面使用率高了也不用管,不够他会自动扩展。(创建的时候开启了表空间自动扩展)。

SELECT UPPER(F.TABLESPACE_NAME) AS "表空间名", D.TOT_GROOTTE_MB AS "表空间大小(M)", D.TOT_GROOTTE_MB - F.TOTAL_BYTES AS "已使用空间(M)"
    , TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100, 2), ‘990.99‘) AS "使用比"
    , F.TOTAL_BYTES AS "空闲空间(M)", F.MAX_BYTES AS "最大块(M)"
FROM (
    SELECT TABLESPACE_NAME
        , ROUND(SUM(BYTES) / (1024 * 1024), 2) AS TOTAL_BYTES
        , ROUND(MAX(BYTES) / (1024 * 1024), 2) AS MAX_BYTES
    FROM SYS.DBA_FREE_SPACE
    GROUP BY TABLESPACE_NAME
) F, (
        SELECT DD.TABLESPACE_NAME
            , ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) AS 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

oracle表空间已满解决

 

2、查看已有的表空间物理文件在什么位置

select * from  dba_data_files

注:只看第一列即可,一看现有的表空间对应的数据文件存在/u01/app/oracle/oradata/orcl目录下,知道这个就可以了

oracle表空间已满解决

 

3、给空间快满的表空间增加新的表空间文件并设置为可以自动扩展的(这样相当于给快满的表空间又增加了32G的可以空间)

alter tablespace <tablespace_name> add datafile ‘filepath‘ size <filesize> autoextend on next <autosize> maxsize filemaxsize[unlimited];

例如:alter tablespace sales add  datafile ‘/u01/app/oracle/oradata/orcl/newsales.dbf‘ size 1G autoextend on next 10m maxsize unlimited

如上语句的含义是给名称为为sales的表空间新增一个物理文件/u01/app/oracle/oradata/orcl/newsales.dbf,文件初始大小为1G,是自动扩展的每次自动扩展的空间为10m。到此表空间已满无法写入的问题基本就可以解决了。

 

补充如何新创建一个可以自动扩展空间的表空间

create tablespace <tablespace_name> datafile ‘<filepath>‘ size <filesize> autoextend on next <autosize> maxsize <maxsize [unlimited]>

eg:

 create tablespace sales datafile ‘/u01/app/oracle/oradata/orcl/test.dbf‘  size 1G  autoextend on next 10m maxsize unlimited extent management local;

 

oracle表空间已满解决

上一篇:mysql(centos8)-RPM安装


下一篇:navicat连接数据库报1130错误