zoukankan      html  css  js  c++  java
  • oracle表空间增长异常或表空间占用过高问题分析

    项目上反馈说业务表空间增长越来越快,上次新增的30G数据文件,不到一个月就提示表空间不足了,并且由于安全考虑,需要每天备份,导致备份异常缓慢,需要12h以上,表空间占用150G。

    表空间占用高问题,只要定位到占用磁盘高的表或lob对象,处理掉就好了(根据业务实际情况处理)。

    查询表空间情况

    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 1;

    发现业务表空间占用150G左右。

    查看表及lob对象占用情况

    在ORACLE数据库中,LOB(Large Objects —— 大对象)是用来存储大量的二进制和文本数据的一种数据类型(一个LOB字段可存储可多达4GB的数据)。

    select owner,segment_name,segment_type,bytes from dba_segments order by bytes desc;

    发现排在前5的均为lob对象,总占用在100G左右。一般的表占用空间不会太高,基本不会超过10G(表中的lob对象是单独存储)。某些项目上,出现较大的lob对象也是正常的。

    查询lob字段属于哪张表

    lob对象占用高不一定意味着异常,得看lob属于业务表还是其他情况。

    select owner,table_name,column_name,segment_name from dba_lobs where segment_name='SYS_LOB0000112457C00002$$';

    查询发现这些lob对象均属于SYS_EXPORT_SCHEMA%这种表,像SYS_EXPORT_SCHEMA_01,SYS_EXPORT_FULL_01这种表,基本都是expdp方式导出备份产生的,正常导出完毕,oracle会自动清除,如果没有自动清除的话,说明导出过程中出现了异常中断情况。

    select * from dba_tables where table_name like 'SYS_EXPORT_SCHEMA%';

    通过查询dba_tables表,LAST_ANALYZED字段的时间都是在晚上备份时间,客户也确认过出现过导出异常,可确认是中断所致。

    清理相关表

    接下来就好办了,drop掉就可以,这种就不要走回收站了。

    drop table 'SYS_EXPORT_SCHEMA_01' PURGE;

    如果lob对象所在的表为业务表或者不清楚是什么表,谨慎处理。

    处理完表后,释放表空间

    如果是drop操作,表空间就已经自动释放了。

    如果是清理了下表数据(如删除行等),表空间不会自动释放,需要手动释放一下。

    alter table GSPMETAVERSIONHISTORY move tablespace cwbase01 lob(content) store as (tablespace cwbase01);

    其中GSPMETAVERSIONHISTORY 为业务表,cwbase01为表空间,content为lob所在的字段名。

  • 相关阅读:
    Iconfont在Vue中的使用
    yarn安装依赖报错
    动漫
    伤痛的魅力。绷带男子特辑
    记STM32F103C8T6+STLINK下载器在Keil中的设置
    JQuery浮动对象插件
    树莓派RTL8723BU_LINUX驱动安装
    python虚拟环境相关设置备忘
    解决树莓派控制台命令行乱码
    python模块wifi使用小记
  • 原文地址:https://www.cnblogs.com/Invokerr/p/6839889.html
Copyright © 2011-2022 走看看