• 数据库表空间一夜之间爆满 查看最大的表却才几百M 原来是大字段对象CLOB造成的


    遇到一个怪事 数据库表空间一夜之间爆满。
    没有多想 想将数据库表空间扩容了一下 恢复正常业务。
    ALTER TABLESPACE xxx ADD DATAFILE '/data/oracle/oradata/xxx.dbf' size 4096MB autoextend on MAXSIZE UNLIMITED;

    恢复正常业务之后 就想找到是什么表造成了数据库表空间爆满。
    应用反馈了由于其他应用之间的接口有问题 造成了一个表新增了几十万条数据。table info.
    查看了info这个表的大小 发现才200多M。
    select round(BYTES/1024/1024,2)||'M' from user_segments where segment_name='info';
    又确认了下这个表空间下 最大的表是什么?发现的确是info表。就在想 数据库空间都被用到哪里了?
    最后发现是Info表中 有一个字段是CLOB类型,SQL CLOB为内置类型,它将大字段对象(Character Large Object)存储为数据库表某一行中的一个列值。

    获取容量大的CLOB的SEGMENT_NAME
    SELECT SEGMENT_NAME, ROUND(SUM(BYTES / 1024 / 1024 / 1024), 2) G FROM DBA_SEGMENTS --WHERE SEGMENT_NAME IN -- (SELECT TABLE_NAME FROM USER_TAB_COLUMNS WHERE DATA_TYPE = 'CLOB') GROUP BY SEGMENT_NAME ORDER BY 2 DESC;

    查询是哪个表将数据写到了这个CLOB
    SELECT B.TABLE_NAME, B.COLUMN_NAME, A.SEGMENT_NAME, a.SEGMENT_TYPE, ROUND(SUM(A.BYTES / 1024 / 1024 / 1024), 2) G FROM DBA_SEGMENTS A LEFT JOIN DBA_LOBS B ON A.OWNER = B.OWNER AND A.SEGMENT_NAME = B.SEGMENT_NAME --WHERE B.SEGMENT_NAME = 'SYS_LOB0000026212C00002$$' HAVING ROUND(SUM(A.BYTES / 1024 / 1024 / 1024), 2) >1 GROUP BY B.TABLE_NAME, B.COLUMN_NAME, A.SEGMENT_NAME,a.SEGMENT_TYPE;

  • 相关阅读:
    esp32(M5STACK)在线体验(Ubuntu)
    esp32(M5STACK)程序烧写(Ubuntu)
    在Ubuntu环境下搭建esp32开发环境
    markdown让文字居中和带颜色
    Doxyfile中插入图片
    System.load 与 System.loadLibrary 的使用
    常见mysql的数据迁移
    mysql中有关树的函数
    spring整合quartz实现动态定时器
    javaweb项目中发布webservices服务
  • 原文地址:https://www.cnblogs.com/atwo/p/14023490.html
Copyright © 2020-2023  润新知