我们系统中有一个用于交换的表,最初考虑这个表最多只能容纳100万人
的照片信息(出于系统容量的限制),其它系统把数据添加到这个表中,我们来取得这些数据。
现在的问题是这些数据是分批添加的,我们也是分批接收的。
我们接收完一批之后,这批数据就没有用了,就可以删除了。
但是据说 delete 语句只是把数据删除了,并没有真正回收空间,只能用 truncate table 语句才可以回收空间。可是truncate是全表删除,我们不能这样做,因为表中还有未接收的数据。请教各位高手在技术上有好的办法吗?能够实现我的上述要求。
先谢谢了。
的照片信息(出于系统容量的限制),其它系统把数据添加到这个表中,我们来取得这些数据。
现在的问题是这些数据是分批添加的,我们也是分批接收的。
我们接收完一批之后,这批数据就没有用了,就可以删除了。
但是据说 delete 语句只是把数据删除了,并没有真正回收空间,只能用 truncate table 语句才可以回收空间。可是truncate是全表删除,我们不能这样做,因为表中还有未接收的数据。请教各位高手在技术上有好的办法吗?能够实现我的上述要求。
先谢谢了。
解决方案 »
- 跨库查询 报ora-12170连接超时
- 9i 和 10g安装在同一机器上,有成功的没?
- oracle 服务全都关掉了也没有oracle进程只启动了plsql(有plsql进程)
- 一个ORACLE多重查询的SQL问题
- 存储过程和事务的关系
- oracle odbc 分发问题
- oracle定时作业的新问题。高手请进
- ORACLE数据移值(ORACLE for LINUX V. TO ORACLE FOR w2k V.)
- 求SQL。当一个时间字段>系统时间返回'否',否则返回'是'怎么写?
- 为什么按oracle8一开始就出错
- 权限resource与quotas的关系??
- oracle中blob类型放什么数据
临时表tableB方法描述:
create table tableB as select * from tableA;
truncate table tableA;
insert into tableA select * from tableB;
drop table tableB;
会不会非常慢?还有什么好方法吗?多谢热心肠的兄弟。
标准有做法应该是这样的
1、以compress=y选项导出表
exp username/password tables=table1 compress=y file=table1.dmp
2、sql>truncate table1
3、导入表
imp username/password file=table1.dmp ignore=y tables=table1
2、alter table tab move.......真好重整空间了。
3、alter table tab rename to temp;
create table tab
nologging parallel
as select * from temp;
drop table temp;
alter table move
如果有index 还要alter index rebuild
create table tab
nologging parallel
as select * from temp;
是不是只是9i才开始支持?这样的语句和
create table tab
insert into tab as select * from temp比效率有多大的提高?
另:
如果作过图片数据导入导出的话,就会知道几十万包括图片的数据的操作是非常耗时的,楼上的简单的用中间表和exp/imp的方法都是不可接受的,因为这样做的后果很可能是数据库24小时光做这件事了
alter table move tablespaces
alter index rebuild tablespaces
转移到别的表空间,将表空间回收。
多谢各位,开始加分了。