暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【干货攻略】OUT OF SPACE报错处理

达梦E学 2023-12-18
1522



前提
空间充足时,为什么会报错没空间呢?本期重点解析“OUT OF SPACE报错“的处理思路。




问题描述


简单的执行一个建表sql,报错OUT OF SPACE。如下所示:
    [dmdba@dm ~]$ cd home/dmdba/dmdbms/bin
    [dmdba@dm bin]$ ./disql test
    SQL> create table t1(id int);





    问题排查


    (1)首先检查数据库服务器是否还有磁盘空间。通过执行df -h检查,检查发现磁盘空间充足。
    (2)再检查表空间是否还有空间,可以通过下面的命令进行检查:
    SQL1:
      SELECT F.TABLESPACE_NAME,
      ROUND((T.TOTAL_SPACE - F.FREE_SPACE) 1024,2) "USED (GB)",
      ROUND(F.FREE_SPACE 1024,2) "FREE (GB)",
      ROUND(T.TOTAL_SPACE 1024,2) "TOTAL (GB)",
      (ROUND((F.FREE_SPACE T.TOTAL_SPACE),4)* 100) || '% ' PER_FREE,
      (ROUND((T.TOTAL_SPACE - F.FREE_SPACE) T.TOTAL_SPACE, 4) * 100)||'%' PER_USED,
      T.AUTOEXTENSIBLE
      FROM (
      SELECT TABLESPACE_NAME,ROUND(SUM(BLOCKS * page/1024/ 1024)) FREE_SPACE
      FROM DBA_FREE_SPACE
      GROUP BY TABLESPACE_NAME
      ) F,
      ( SELECT TABLESPACE_NAME,AUTOEXTENSIBLE, ROUND(SUM(BYTES 1048576)) TOTAL_SPACE
      FROM DBA_DATA_FILES
      GROUP BY TABLESPACE_NAME,AUTOEXTENSIBLE
      ) T
      WHERE F.TABLESPACE_NAME = T.TABLESPACE_NAME;
       SQL2:
        select t2.name,
        path,
        t1.total_size*page/1024/1024 as total_size,
        t1.free_size*page/1024/1024 as free_size,
        t1.real_free_size*page/1024/1024 as real_free_size,
        t1.max_size,
        t1.next_size,
        t1.auto_extend
        from v$datafile t1,
        v$tablespace t2
        where t1.group_id=t2.id
        order by name;
        经过一番检查,也没有发现是表空间不足导致的。
        (3)检查是否给用户限制了磁盘配额。通过下面的命令进行检查。
        老版本:
          SQL> select  cast(dbms_metadata.get_ddl('USER','TEST') as VARCHAR) from dual; --看创建用户的DDL,有没有DISKSPACE LIMIT,大小是页的个数*page
          新版本:
            SQL> SELECT QUOTAS.TABLESPACE_NAME, QUOTAS.USERNAME, MAX_BYTES FROM DBA_TS_QUOTAS QUOTAS WHERE QUOTAS.USERNAME = 'TEST';






            问题解决


            经过以上3步检查后,发现是给用户设置了磁盘限额,才导致OUT OF SPACE。最后取消磁盘限额或放大磁盘限额解决这个问题。

            放大磁盘限额:

              SQL> alter user "TEST" diskspace limit 500; --单位是M

              取消磁盘限额:

                SQL> alter user "TEST" diskspace UNLIMITED;

                以上为本期分享,希望能带给大家帮助。


                点击了解相关分享:

                【干货攻略】达梦数据库防误删表的小探索

                【干货攻略】间隔分区表merge into报错-2903:间隔分区不支持自动扩展

                【干货攻略】SQL优化之like与in

                【干货攻略】达梦数据库通过JDBC批量获取clob数据较慢的问题

                【开班通知】DM8-DCP线上培训班招生中(2023-12月)

                【开班通知】DM8-DCA线上培训班招生中(2023年12月20日开班)



                END

                达梦知识普及

                扫码关注我们
                学习共享
                知识普及

                作者:CSW
                审核:林夕
                排版:达梦培训中心
                原文:引用自“达梦在线服务平台”



                文章转载自达梦E学,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                评论