有时管理员图方便,给业务表空间设置自动增长空间的权限,在管理员疏忽的情况下,表空间会长满,导致磁盘空间紧张,为了给磁盘瘦身,就测试如下想法是否可行
搭建环境 oracle10g windows2003系统
创建一个test表空间,大小为50m
create tablespace test_tablespace datafile 'D:\jxj\test\test_data.dbf' size 50m;
创建用户test,默认表空间为test_tablespace
create user test identified by test123 default tablespace test_tablespace;
赋予用户相应权限
grant connect,resource to test;
grant dba to test;
计划是这样,创建一个表,使用pl/sql的文本导入器导入数据,在将现有的50m空间占满后,再增加一个数据文件给test_tablespace,容量同样是50m;
alter tablespace test add datafile 'D:\jxj\test\test_data2.dbf' size 50m;
然后再次导入数据,当数据达到表空间使用量的70%时,开始测试。
question1:删除表数据,使表空间低于50%表空间容量,试着删除增加表空间,看数据库是否正常运行?
操作
1将表空间数据exp导出
C:\>exp test/test123 file=c:\test_tablespace3.dmp log=c:\test_tablespace3.log owner=test
2将表空间删除,并删除文件
drop tablespace test_tablespace including contents and datafiles cascade constraints;
删除表空间文件
3重建表空间,可重新设计表空间大小
create tablespace test_tablespace datafile 'D:\jxj\test\test_data.dbf' size 80m;
4将表空间设置为test用户的默认表空间
alter user test default tablespace test_tablespace;
5将exp导出数据imp导入
C:\>imp test/test123 file=c:\test_tablespace3.dmp log=c:\test_tablespace3.log fromuser=test touser=test
ok,导入完成,无报错。
至此,数据库空间由原先的100m,变成了80m,表空间瘦身完成,无异常。
数据库是出于非归档模式下测试操作完成。