在Oracle数据库中,我们如何增加表空间的大小?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Oracle数据库中,我们如何增加表空间的大小?相关的知识,希望对你有一定的参考价值。

参考技术A 表空间在初始建立的时候最好设置成自动扩展的,如果没有设置成扩展的,则有四种方法可以增加表空间的大小,其中增加数据文件是经常用的一种。四种方法如下:
Meathod1:给表空间增加数据文件
ALTER TABLESPACE app_data ADD DATAFILE
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\EDWTEST\APP03.DBF' SIZE 50M;

Meathod2:新增数据文件,并且允许数据文件自动增长
ALTER TABLESPACE app_data ADD DATAFILE
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\EDWTEST\APP04.DBF' SIZE 50M
AUTOEXTEND ON NEXT 5M MAXSIZE 100M;

Meathod3:允许已存在的数据文件自动增长
ALTER DATABASE DATAFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\EDWTEST\APP03.DBF'
AUTOEXTEND ON NEXT 5M MAXSIZE 100M;

Meathod4:手工改变已存在数据文件的大小
ALTER DATABASE DATAFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\EDWTEST\APP02.DBF'
RESIZE 100M;

Oracle下表空间收缩

   在Oracle下在创建表空间时一般没有特殊的需求时都是使用可自动扩展的表空间以便于日常的管理,这样在日常情况下就不用监控表空间大小,在没有使用自动增长的表空间建议在80%左右的时候就要增加新的物理文件已保障其稳定,而在Oracle中使用自动增长的表空间,在使用中其物理文件会随着表空间的增加而增加而在实际情况中可能会因为业务的改变而没有使用那么多的表空间,这时我们就可以通过Oracle下的表空间缩减回收来回收为使用的表空间物理文件所使用的磁盘资源,在Oracle下回收表空间很简单,在Oracle的系统下除了用户自行定义的表空间还有如下几个默认表空间:

表空间
说明
EXAMPLE
如果在安装时有选择“实例方案”选项,则在Oracle中会有该表空间,如未选择则没有,此表空间中存放的是各样例的数据
SYSAUXSYSTEM表空间的辅助空间。主要用于存储数据字典的其他数据对象,这可以减少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;#回收表空间


以上是关于在Oracle数据库中,我们如何增加表空间的大小?的主要内容,如果未能解决你的问题,请参考以下文章

oracle数据库如何增加表空间的大小?

如何查看oracle中某个用户占用表空间大小情况

oracle10g数据库如何扩充表空间

oracle表空间如何自动扩展?

Oracle表空间基础

关于Oracle增加表空间大小方法