用Drop table(100000条记录)后磁盘可用空间没增大?怎样真正删除,以增大磁盘可用空间? 如题 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 oracle中新建一个全局数据库时会分配一个固定大小空间的,尽管不插入任何表也是这么大的空间,想得到空间得删除全局数据库; Drop table后空间被ORACLE回收了,但并没有还给操作系统,所以系统磁盘可用空间不变。想增大磁盘可用空间很麻烦,目前只有把先想删的那个表空间内容移走再删除表空间及其数据文件的方式进行。 其实空间是已经释放了的,只不过由于高水位线的缘故,看起来仍然被占用。如果想彻底删除并一次释放空间,可以加上PURGE选项。drop table xxx PURGE; 目前已经drop table A怎样释放A占用的空间? truncate,delete,drop的比较.注意:这里说的delete是指不带where子句的delete语句相同点:truncate和不带where子句的delete, 以及drop都会删除表内的数据 不同点: 1. truncate和 delete只删除数据不删除表的结构(定义) drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid状态. 2.delete语句是DML,这个操作会放到rollback segement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发. truncate,drop是DDL, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger. 3.delete语句不影响表所占用的extent, 高水线(high water)保持原位置不动 显然drop语句将表所占用的空间全部释放 truncate 语句缺省情况下见空间释放到 minextents个 extent,除非使用reuse storage; truncate会将高水线复位(回到最开始). 4.速度,一般来说: drop> truncate > delete 5.安全性:小心使用drop 和truncate,尤其没有备份的时候.否则哭都来不及 使用上,想删除部分数据行用delete,注意带上where子句. 回滚段要足够大. 想删除表,当然用drop 想保留表而将所有数据删除. 如果和事务无关,用truncate即可. 如果和事务有关,或者想触发trigger,还是用delete. 如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据 你直接在em工具中编辑表空间,把数据文件的大小改小就可以三,只要改后的大小大于现在表空间中数据占用的大小就OK 原因已知道,不需重复。要怎样删除表空间?是主要问题,要怎样做呢?我用了purge recyclebin;但也没见效。 可以通过修改数据文件的大小来回收空间alter database datafile 'your_file_path\file_name' resize xxxxM; 用TRUNCATE TABLE 表名 TRUNCATE TABLE 表名;因为用DROP TABLE,DELETE * FROM 表名时,TABLESPACE表空间该表的占用空间并未释放,反复几次DROP,DELETE操作后,该TABLESPACE上百兆的空间就被耗光了。 如果该表所有的数据都不要了的话就用truncate tableName; 如果全表数据删除 ,建议用truncate table xx 这样程序会把该表磁盘空间复位, 需要的是磁盘空间alter database datafile 'your_file_path\file_name' resize xxxxM; 正解,既然已经删掉了那个表了,就只好resize一下datafile了。truncate本身只能回缩表空间占用,不能回缩HWM。回缩数据文件对磁盘占用的方法有修改datafile大小(如上),和把一些数据对象移动到其他表空间(Move)。 比较趋向:alter database datafile 'your_file_path\file_name' resize xxxxM; 谢过各位参与,散分了.. 求助关于tnsnames.ora配置后无法连接的问题 请问C++用PROC怎么远程连接数据库呢? oracle 数据汇总 一道sql面试题目,有哪个高手写得出来,帮忙下 关于超大型数据库设计的讨论。 大侠帮改改一个存储过程(处理空值的) 20分请教一个很简单的问题~在线等。着急·! 求一条统计的sql语句 关于Oracle 谁能提供一些ORACLE中交叉报表的示例!! 关于ORACLE中删除数据的一些问题 Oracle 怎么查询哪个表中包含某字符串
想增大磁盘可用空间很麻烦,目前只有把先想删的那个表空间内容移走再删除表空间及其数据文件的方式进行。
如果想彻底删除并一次释放空间,可以加上PURGE选项。drop table xxx PURGE;
怎样释放A占用的空间?
注意:这里说的delete是指不带where子句的delete语句
相同点:truncate和不带where子句的delete, 以及drop都会删除表内的数据
不同点:
1. truncate和 delete只删除数据不删除表的结构(定义)
drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid状态.
2.delete语句是DML,这个操作会放到rollback segement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发.
truncate,drop是DDL, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger.
3.delete语句不影响表所占用的extent, 高水线(high water)保持原位置不动
显然drop语句将表所占用的空间全部释放
truncate 语句缺省情况下见空间释放到 minextents个 extent,除非使用reuse storage; truncate会将高水线复位(回到最开始).
4.速度,一般来说: drop> truncate > delete
5.安全性:小心使用drop 和truncate,尤其没有备份的时候.否则哭都来不及
使用上,想删除部分数据行用delete,注意带上where子句. 回滚段要足够大.
想删除表,当然用drop
想保留表而将所有数据删除. 如果和事务无关,用truncate即可. 如果和事务有关,或者想触发trigger,还是用delete.
如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据
truncate tableName;
truncate本身只能回缩表空间占用,不能回缩HWM。
回缩数据文件对磁盘占用的方法有修改datafile大小(如上),和把一些数据对象移动到其他表空间(Move)。