ORACLE如何修改用户表空间

问题描述:
  
ORACLE如何修改用户表空间
产生原因:需要对用户表空间进行修改
解决方法:
  
  软件在建立帐套时,表空间使用了默认设定,表空间可以自动增加。如果用户为了提升速度进行了优化,关闭了此选项,则在年结前也应该检查一下表空间的使用情况,如果已经使用空间小于剩余空间,也应该进行扩充。
查看表空间使用情况:
SELECT * FROM DBA_FREE_SPACE

举例:
在实际操作中请根据实际数据库路径等信息作适当的调整,切记不可生搬硬套!
另外,请在调整之前,对oracle 作一全备份!

假设表空间名称为GS_ORADB_001,数据文件‘C:\ORADATA\GS_ORADB_001.DBF',
索引表空间名称为GS_ORADB_IDX_001,数据文件‘C:\ORADATA\GS_ORADB_IDX_001.DBF'

ORACLE8i:
首先在DOS命令行方式中执行
C:\>SVRMGRL

SVRMGRL>CONNECT INTERNAL
SVRMGRL>SHUTDOWN
SVRMGRL>STARTUP MOUNT

ORACLE9i:
首先在DOS命令行方式中执行
C:\>SQLPLUS /NOLOG

SQL>CONNECT / AS SYSDBA
SQL >SHUTDOWN
SQL >STARTUP MOUNT

1、增加表空间尺寸
增加一个数据文件:
SQL>ALTER TABLESPACE GS_ORADB_001 ADD DATAFILE ‘C:\ORADATA\GS_ORADB_ADD_001.DBF' SIZE 500M; 
2、扩大原有文件大小:
SQL>ALTER DATABASE DATAFILE ‘C:\ORADATA\GS_ORADB_001.DBF' RESIZE 1000M; 
3、移动表空间数据文件
假如要求将C:\ORADATA 下GS_ORADB_001.DBF移至D:\ORADATA 下,并把文件名改为GS_ORADB_ALT_001.DBF
步骤:
3.1、将实例处于关闭状态
首先在DOS命令行方式中执行(ORACLE9i)
C:\>SQLPLUS /NOLOG

SQL>CONNECT / AS SYSDBA
SQL >SHUTDOWN
SQL >STARTUP MOUNT

3.2、把数据文件C:\ORADATA 下GS_ORADB_001.DBF移动到D:\ORADATA下,并把文件名改为GS_ORADB_ALT_001.DBF
3.3、再到SQLPLUS 环境中
SQL>ALTER DATABASE RENAME FILE ‘C:\ORADATA\GS_ORADB_001.DBF' TO ‘D:\ORADATA\GS_ORADB_ALT_001.DBFF'; 

SQL>ALTER TABLESPACE GS_ORADB_001 RENAME DATAFILE ‘C:\ORADATA\GS_ORADB_001.DBF' TO ‘D:\ORADATA\GS_ORADB_ALT_001.DBFF'; 

SQL>ALTER DATABASE OPEN; 

4、查看剩余空间
SQL>SELECT TABLESPACE_NAME,SUM(BYTES),MAX(BYTES) FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME; 
注意:空闲数据块总和sum(bytes) 够用并不意味每个空闲块都满足分配需要,所以当表空间不够分配扩展块的时候,还要查看最大空闲数据块max(bytes)的大小。

5、合并空闲块
如果表空间上的数据对象经常发生类似drop-create 的变动,加之未采用统一的扩展块尺寸,使那些采用较大扩展块的数据对象不能利用较小的空间碎片,造成空间浪费。可通过将较小的空闲块合并成较大的空闲块的方法,减少空间浪费。
SQL>ALTER TABLESPACE GS_ORADB_001 COALESCE;

6、删除表空间
删除表空间及其包含的所有数据
SQL>DROP TABLESPACE GS_ORADB_001 INCLUDING CONTENTS;