zoukankan      html  css  js  c++  java
  • 数据库表空间一夜之间爆满 查看最大的表却才几百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;

  • 相关阅读:
    Double 四舍五入保留小数
    QQ在线人数统计图数据解析
    Errors running builder 'Android Resource Manager' on project 'DeskClock'.
    批处理脚本学习笔记——程序猿版
    BZOJ 1002: [FJOI2007]轮状病毒
    《逆袭大学——传给IT学子的正能量》文件夹
    webservice 开发规范
    webservice面试题
    jdbc连接oracle数据库问题
    jdbc连接 orale 和 mysql 所需要的jar包
  • 原文地址:https://www.cnblogs.com/atwo/p/14023490.html
Copyright © 2011-2022 走看看