分类: Oracle
2010-01-06 14:19:40
方法1:
当出现类似错误时,首先检查tablespace的空间是否足够大,如果不够大,说明tablespace的空间不够扩展了,这时候需要将tablespace的datafile的size变大,方法很简单我就不讲了,或增加新的datafile到此tablespace中,使用alter tablespace mytablespace add datafile 'XXX' size xxxx就OK啦.
先了解表空间
1、查看表空间的名称及大小
select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_size
from dba_tablespaces t, dba_data_files d
where t.tablespace_name = d.tablespace_name
group by t.tablespace_name;
2、查看表空间物理文件的名称及大小
select tablespace_name, file_id, file_name,
round(bytes/(1024*1024),0) total_space
from dba_data_files
order by tablespace_name;
3、查看表空间的使用情况
select sum(bytes)/(1024*1024) as free_space,tablespace_name
from dba_free_space
group by tablespace_name;
发现确实空间满了
同时发现2个文件不能自己扩展。
于是手动进行扩展
alter tablespace users add datafile '/home/oracle/oradata/xxx/users02.dbf' size 10000M autoextend on ;
实际有2中方法,一个是增大原有数据文件,一个是新添加数据文件
添加后,问题解决
sql> select segment_name,file_id,blocks from dba_extents where file_id=5;
no rows selected
删除表空间中的空数据文件:
sql> alter tablespace users drop datafile '/opt/oracle/oradata/eygle/users02.dbf';
tablespace altered.
如果操作过程中空间不能释放可能因为其他操作导致,例如被归到undotbs空间里
这时候可以如此操作:
首先,要查清楚数据文件的真实使用空间。可以通过查询dba_extents达到这个目的。users表空间使用的数据文件为D:\ORACLE\ORADATA\EPCIT\DATA_FILE\EPCITUSERS01.DBF
可以看出EPCITUSERS01.DBF实际使用空间只有143MB。resize datafile的时候不可以小过这个大小。