数据库表空间占用过大,缩减表空间大小。 1、首先确认表空间,空闲空间比例比较大。 SELECT C.TABLESPACE_NAME,A.BYTES/1048576 MEGS_TOTAL,(A.BYTES-B.BYTES)/1048576 MEGS_USED, B.BYTES/1048576 MEGS_FREE,(A.BYTES-B.BYTES)/A.BYTES * 100 PCT_USED, B.BYTES/A.BYTES * 100 PCT_FREE FROM (SELECT TABLESPACE_NAME,SUM(A.BYTES) BYTES,MIN(A.BYTES) MINBYTES,MAX(A.BYTES) MAXBYTES FROM SYS.DBA_DATA_FILES A GROUP BY TABLESPACE_NAME) A,(SELECT A.TABLESPACE_NAME,NVL(SUM(B.BYTES),0) BYTES FROM SYS.DBA_DATA_FILES A,SYS.DBA_FREE_SPACE B WHERE A.TABLESPACE_NAME = B.TABLESPACE_NAME (+) AND A.FILE_ID = B.FILE_ID (+) GROUP BY A.TABLESPACE_NAME) B,SYS.DBA_TABLESPACES C WHERE A.TABLESPACE_NAME = B.TABLESPACE_NAME(+) AND A.TABLESPACE_NAME = C.TABLESPACE_NAME ORDER BY 6;
2、查询表空间数据占用数据文件空间最大值。
- --查file_id、file_name
select T.FILE_ID,T.FILE_NAME from DBA_DATA_FILES T where T.TABLESPACE_NAME='XXX';
--查占用最大空间(mb)
select max(block_id)*8/1024 from dba_extents where file_id='YYY';
--缩减表空间
ALTER DATABASE DATAFILE '/opt/oracle/oradata/XXX.dbf' RESIZE 300M;
/opt/oracle/oradata/XXX.dbf 是要缩减的表空间文件。 RESIZE 300M 根据表空间大小确定。
|