• Oracle收缩表空间


    可以使用 alter database datafile 'file path...' resize xM 的命令来缩小数据文件。

    SELECT 'alter database datafile ''' || A.FILE_NAME || ''' resize ' ||
            ROUND(A.FILESIZE - (A.FILESIZE - C.HWMSIZE - 100) * 0.8) || 'M;',
           A.FILESIZE || 'M' AS "数据文件的总大小", C.HWMSIZE || 'M' AS "数据文件的实用大小"
    FROM   (SELECT FILE_ID, FILE_NAME, ROUND(BYTES / 1024 / 1024) AS FILESIZE
             FROM   DBA_DATA_FILES) A,
           (SELECT FILE_ID, ROUND(MAX(BLOCK_ID) * 8 / 1024) AS HWMSIZE
             FROM   DBA_EXTENTS
             GROUP  BY FILE_ID) C
    WHERE  A.FILE_ID = C.FILE_ID AND
           A.FILESIZE - C.HWMSIZE > 100;
    

    or

    SELECT 'alter database ' || A.NAME || ' datafile ''' || B.FILE_NAME || '''' ||
            ' resize ' ||
            GREATEST(TRUNC(BYTES_FULL / .7), (BYTES_TOTAL - BYTES_FREE)) ||
            CHR(10) || '--tablespace was ' ||
            TRUNC(BYTES_FULL * 100 / BYTES_TOTAL) || '% full now ' ||
            TRUNC(BYTES_FULL * 100 /
                  GREATEST(TRUNC(BYTES_FULL / .7), (BYTES_TOTAL - BYTES_FREE))) || '%'
    FROM   V$DATABASE A, DBA_DATA_FILES B,
           (SELECT TABLESPACE_NAME, SUM(BYTES) BYTES_FULL
             FROM   DBA_EXTENTS
             GROUP  BY TABLESPACE_NAME) C,
           (SELECT TABLESPACE_NAME, SUM(BYTES) BYTES_TOTAL
             FROM   DBA_DATA_FILES
             GROUP  BY TABLESPACE_NAME) D,
           (SELECT A.TABLESPACE_NAME, A.FILE_ID, B.BYTES BYTES_FREE
             FROM   (SELECT TABLESPACE_NAME, FILE_ID,
                             MAX(BLOCK_ID) MAX_DATA_BLOCK_ID
                      FROM   DBA_EXTENTS
                      GROUP  BY TABLESPACE_NAME, FILE_ID) A, DBA_FREE_SPACE B
             WHERE  A.TABLESPACE_NAME = B.TABLESPACE_NAME AND
                    A.FILE_ID = B.FILE_ID AND
                    B.BLOCK_ID > A.MAX_DATA_BLOCK_ID) E
    WHERE  B.TABLESPACE_NAME = C.TABLESPACE_NAME AND
           B.TABLESPACE_NAME = D.TABLESPACE_NAME AND
           BYTES_FULL / BYTES_TOTAL < .7 AND
           B.TABLESPACE_NAME = E.TABLESPACE_NAME AND
           B.FILE_ID = E.FILE_ID;
    

      

    alter tablespace TABLESPACENAME coalesce

    此语句是整合表空间的碎片增加表空间的连续性,但是他不会收缩一个文件的大小的

    选择某个表空间中超过Nblockssegments,通过此语句可以看出那个表占用的空间大  

    SELECT OWNER, SEGMENT_NAME, SEGMENT_TYPE, BLOCKS
    FROM   DBA_SEGMENTS
    WHERE  TABLESPACE_NAME = 'RISK' AND
           BLOCKS > 1000
    ORDER  BY BLOCKS DESC;
    

      分析表,得知表的一些信息

    analyze table TABLENAME estimate statistics;
    SELECT INITIAL_EXTENT, NEXT_EXTENT, MIN_EXTENTS, BLOCKS, EMPTY_BLOCKS
    FROM   DBA_TABLES
    WHERE  TABLE_NAME = 'xx' AND
           OWNER = 'xx';
    

      alter table ... deallocate unused 命令回收表的空间

    alter table user.tablename deallocate unused keep 1k;
    

      

  • 相关阅读:
    滚动页面时DIV到达顶部时固定在顶部
    【Java学习笔记】拾遗
    【Java学习笔记】文件信息
    【Java学习笔记】使用BufferedReader类(流的读写)
    【Java学习笔记】可变参数
    【Java学习笔记】控制台读写
    【Java学习笔记】关于默认值
    【Java学习笔记】FileChannel的学习
    【JAVA学习笔记】静态导入
    【Java学习笔记】Java中关于tostring方法的误操作
  • 原文地址:https://www.cnblogs.com/jmax/p/3754331.html
Copyright © 2020-2023  润新知