不是搞数据库的,项目中遇到这个疑问,公司用的是9i,请高手帮忙。
解决方案 »
- sql语句 50次上限问题
- ORA-01041 internal error. HOSTDEF extension does not exist是怎么回事?
- 有关UPdate语句的吐血问题
- oracle9i中导入数据出现922错误,是版本问题吗?怎样解决
- 那位有oracle项目可做,无偿劳动,新手只为学习!
- oracle初学者问题
- 怎么将orcale和java连接起来?
- 求一存储过程,可以改变几个表的结构。是不是用alter table ?在线等待。
- 安装oracle_client时报Oracle Net Configuration Assistant 失败的错误。
- oracle语言翻译
- WebResource.axd
- oracle中有无'在1个字符串中查找非数字'的函数
SQL> select owner,segment_name,bytes,blocks,extents from dba_segments
where segment_name = 'EMP';
SQL> alter table emp enable row movement;
SQL> alter table emp shrink space;
SQL> select owner,segment_name,bytes,blocks,extents from dba_segments
where segment_name = 'EMP';
如果希望回收利用数据量较少,但占用空间较多的空间,目前为止应该有两种方式可以实现;
1,move table
通过移动表的存储位置,重组所有的数据存储达到回收空间的目的;这个在执行过程中会对对应table对象的性能产生较大影响;并且在执行完成后所有的索引将会失效;需要重建;
2,在线重定义表
比如:delete table_name where rownum<=100;
alter table table_name move.
也试过了,没啥反应!
flashback table tb to timestamp to_timestamp('时间','yyyy-mm-dd hh24:mi:ss');
--时间是指你在删除表记录的时间的前面某个时间。
网上有比较多的解答
需要注意的是:不管是使用alter table ..move 还是使用online redefinition,都需要额外的空间所以你用truncate吧呵呵。
重建索引不是问题,我也知道可以用导入导出的办法来实现,truncate虽然能够降低HWM,但是是将数据全部清空了啊,我只想删除其中一小部分的数据。效率也是问题啊。关键还是9i,而且我的硬盘空间没有那么大再素质一份好像没有很好的解决方案哦。