Oracle表空间大小查询和清理


-- 统计表空间
SELECT TABLESPACE_NAME 表空间,
       TO_CHAR(ROUND(BYTES / 1024, 2), '99990.00') || '' 实有,
       TO_CHAR(ROUND(FREE / 1024, 2), '99990.00') || 'G' 现有,
       TO_CHAR(ROUND((BYTES - FREE) / 1024, 2), '99990.00') || 'G' 使用,
       TO_CHAR(ROUND(10000 * USED / BYTES) / 100, '99990.00') || '%' 比例
  FROM (SELECT A.TABLESPACE_NAME TABLESPACE_NAME,
               FLOOR(A.BYTES / (1024 * 1024)) BYTES,
               FLOOR(B.FREE / (1024 * 1024)) FREE,
               FLOOR((A.BYTES - B.FREE) / (1024 * 1024)) USED
          FROM (SELECT TABLESPACE_NAME TABLESPACE_NAME, SUM(BYTES) BYTES
                  FROM DBA_DATA_FILES
                 GROUP BY TABLESPACE_NAME) A,
               (SELECT TABLESPACE_NAME TABLESPACE_NAME, SUM(BYTES) FREE
                  FROM DBA_FREE_SPACE
                 GROUP BY TABLESPACE_NAME) B
         WHERE A.TABLESPACE_NAME = B.TABLESPACE_NAME)
  --WHERE TABLESPACE_NAME LIKE 'CDR%'
 ORDER BY FLOOR(10000 * USED / BYTES) DESC; 
  
--3 查看Oracle用户占了哪几个表空间及大小
select *
  from (select owner || '.' || tablespace_name name, sum(b) g
          from (select owner,
                       t.segment_name,
                       t.partition_name,
                       round(bytes / 1024 / 1024 / 1024, 2) b,
                       tablespace_name
                  from dba_segments t)
         where owner not in
               ('SYS', 'OUTLN', 'SYSTEM', 'TSMSYS', 'DBSNMP', 'WMSYS')
         group by owner || '.' || tablespace_name)
 order by name;
 

--4. 查看表、索引占用空间大小
 select owner,segment_name,bytes/1024/1024 from dba_segments where owner='某用户' order by 3 desc;

--5.清空回收站

purge user_recyclebin;

purge dba_recyclebin;

--6.收缩表

alter table hkta.TSHAREDETAIL enable row movement; 
alter table hkta.TSHAREDETAIL shrink space cascade;
alter table hkta.TSHAREDETAIL disable row movement; 

--7收缩索引

alter index ITREQUEST_HIS shrink space;
 

 

你可能感兴趣的:(Oracle)