Oracle下表空间收缩深入理解

表空间 说明
EXAMPLE 如果在安装时有选择“实例方案”选项,则在Oracle中会有该表空间,如未选择则没有,此表空间中存放的是各样例的数据
SYSAUX SYSTEM表空间的辅助空间。主要用于存储数据字典的其他数据对象,这可以减少SYSTEM表空间的负荷
SYSTEM 存放数据字典,其中包括表、视图、存储过程等等相关数据
TEMP 存放SQL语句处理的表和索引的信息,如:在数据排序时就会占用此表空间
UNDOTBS1 存放撤销数据的表空间
USERS 一般用于存放Oracle的用户数据

而默认的表空间的相关详细信息可以通过sys用户下的DBA_DATA_FILES、DBA_FREE_SPACE、DBA_SEGMENTS这3张字典表查到相关表空间所存放的数据对象、类型及表空间的相关物理文件和拥有者的相关记录,如下用于查询Oracle下表空间的使用详细情况

SELECT 
    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
        AND  F.TABLESPACE_NAME <>  'EXAMPLE'
        AND  F.TABLESPACE_NAME <>  'SYSAUX'
        AND  F.TABLESPACE_NAME <>  'SYSTEM'
        AND  F.TABLESPACE_NAME <>  'UNDOTBS1'
        AND  F.TABLESPACE_NAME <>  'USERS'
        AND  F.TABLESPACE_NAME <>  'EXAMPLE'
   ORDER  BY  1;

而在使用表空间收缩也很简单:

SELECT  FILE_NAME  FROM  SYS.DBA_DATA_FILES  WHERE  TABLESPACE_NAME =  'TEST' ;#查询出TEST表空间的物理文件路径
ALTER  TABLESPACE TEST  COALESCE ;#回收表空间碎片
ALTER  DATABASE  DATAFILE  '/usr/local/u01/oracle/oradata/oracle/test.dbf'  RESIZE 2M;#回收表空间

猜你喜欢

转载自www.linuxidc.com/Linux/2018-01/150221.htm