Oracle下表空间收缩

前端之家收集整理的这篇文章主要介绍了Oracle下表空间收缩前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

在Oracle下在创建表空间时一般没有特殊的需求时都是使用可自动扩展的表空间以便于日常的管理,这种机制有点类似于Unix系统下的LVM磁盘管理,在没有使用自动增长的表空间建议在80%左右的时候就要增加新的物理文件已保障其稳定,而在Oracle中使用自动增长的表空间,在使用中其物理文件会随着表空间的增加增加而在实际情况中可能会因为业务的改变而没有使用那么多的表空间,一般而言自动增长的表空间后表空间会容量会变为90%常规是在使用99.9%的时开始扩容,这时我们就可以通过Oracle下的表空间缩减回收来回收未使用的表空间物理文件所使用的磁盘资源,不过在使用Oracle的自动增长表空间时需要注意的是使用自动增长的表空间也是有限制的,一般而言单个数据文件(Oracle表空间物理文件)最大能创建到32GB,即自动增长时也只能增长到32GB,一旦超过就不会再进行扩展,如下:

CREATETABLESPACEtablespacenameDATAFILE'/usr/local/u01/oracle/oradata/oracle/data01.dbf'SIZE1024MAUTOEXTENDONMAXSIZEUNLIMITED;#在创建表空间时创建一个1GB初始大小的表空间,无上限
ALTERTABLESPACEtablespacenameADDDATAFILE'/usr/local/u01/oracle/oradata/oracle/data02.dbf'size2MAUTOEXTENDONMAXSIZEUNLIMITED;#给已创建的表空间增加一个数据文件,初始2MB,无上限

所以在日常监控表空间时得知自动增长且仅有一个数据文件的表空间一旦到达30GB左右时就考虑要给表空间添加物理数据文件以扩展表空间。

在Oracle下回收表空间也很简单,在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(SELECTTABLESPACE_NAME,  ROUND(SUM(BYTES)/(1024*1024),2)TOTAL_BYTES,  ROUND(MAX(BYTES)/(1024*1024),2)MAX_BYTES
  FROMSYS.DBA_FREE_SPACE
  GROUPBYTABLESPACE_NAME)F,  (SELECTDD.TABLESPACE_NAME,  ROUND(SUM(DD.BYTES)/(1024*1024),2)TOT_GROOTTE_MB
  FROMSYS.DBA_DATA_FILESDD
  GROUPBYDD.TABLESPACE_NAME)D
  WHERED.TABLESPACE_NAME=F.TABLESPACE_NAME
ANDF.TABLESPACE_NAME<>'EXAMPLE'
ANDF.TABLESPACE_NAME<>'SYSAUX'
ANDF.TABLESPACE_NAME<>'SYSTEM'
ANDF.TABLESPACE_NAME<>'UNDOTBS1'
ANDF.TABLESPACE_NAME<>'USERS'
ANDF.TABLESPACE_NAME<>'EXAMPLE'
  ORDERBY1;

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

SELECTFILE_NAMEFROMSYS.DBA_DATA_FILESWHERETABLESPACE_NAME='TEST';#查询出TEST表空间的物理文件路径
ALTERTABLESPACETESTCOALESCE;#回收表空间碎片
ALTERDATABASEDATAFILE'/usr/local/u01/oracle/oradata/oracle/test.dbf'RESIZE2M;#回收表空间
原文链接:https://www.f2er.com/oracle/206631.html

猜你在找的Oracle相关文章