问题:
在oracle里,使用delete删除数据以后,数据库的存储容量不会减少,而且使用delete删除某个表的数据以后,查询这张表的速度和删除之前一样,不会发生变化。
原因:
因为oralce有一个HWM高水位,它是oracle的一个表使用空间最高水位线。当插入了数据以后,高水位线就会上涨,但是如果你采用delete语句删除数据的话,数据虽然被删除了,但是高水位线却没有降低,还是你刚才删除数据以前那么高的水位。除非使用truncate删除数据。那么,这条高水位线在日常的增删操作中只会上涨,不会下跌,所以数据库容量也只会上升,不会下降。而使用select语句查询数据时,数据库会扫描高水位线以下的数据块,因为高水位线没有变化,所以扫描的时间不会减少,所以才会出现使用delete删除数据以后,查询的速度还是和delete以前一样。
解决方案:
1.首先导出表,然后truncate这张表,最后导入这张表。
2.在存储空间当中移动表,但是由于rowid会被打乱,所以需要重建索引.
3.如果是oracle 10g.可是直接更新表的高水位线。
对应的SQL:
9i中:
create table aa_bak as select * from aa where record_time > sysdate - 10;
truncate table aa;
insert into aa select * from aa_bak;
drop table aa_bak;
10g 版本
alter tablename enable row movement;
alter tablename shrink space;
分享到:
- 2007-07-05 14:46
- 浏览 3959
- 评论(3)
- 论坛回复 / 浏览 (3 / 14638)
- 查看更多
相关推荐
利用oracle 系统触发器防止用户使用drop table 或truncate table 命令。
Oracle表删除大量数据(千万)后查询变慢问题(原因分析)
高手的Oracle大批量删除数据的方法.htm
1、Windows XP + Oracle 10g ...6、删除自动存储管理(ASM),在DOS命令行中执行如下命令:oracle -delete -asmsid +asm 7、运行regedit命令,打开注册表窗口。删除注册表中与Oracle相关的内容,具体如下:
必须说清楚一点:Oracle不提供如删除表、视图一样删除数据文件的方法,数据文件是表空间的一部分,所以不能“移走”表空间
当表中的数据不需要时,则应该删除该数据并释放所占用的空间,删除表中的数据可以使用Delete语句或者Truncate语句,下面分别介绍。 一、delete语句 (1)有条件删除 语法格式:delete [from] table_name [where ...
oracle通过游标批量删除数据方法,对于大批量数据的删除比较有帮助。
1、使用存储过程的方法 2、使用游标的方法 3、进行对表数据的维护 4、执行表正确的CBO操作
#功能:自动删除ORACLE归档日志文件 #删除方式:rman ,deletearchivelog #调用方式:可单独调用,或在job_clean_archivlog.sh脚本中根据需要调用见另外的附件) ##############################################
oracle数据库删除数据Delete语句和Truncate语句的对比.docx
找回时操作的数据库为oracle 10g , 之前删除方式为delete
某大型央企SAP系统目前记录了2006年到2017年所有业务数据,随着时间的增长数据越来越多,数据的维护和备份也越来越麻烦,根据用户的需求需要将2006年到2015年的数据删除。 但是由于数据较多整个库大概有7T的数据量,...
Oracle中大批量删除数据的方法
Oracle中删除超过50w条记录的数据,如果直接使用更新会造成资源溢出锁表等问题,需要批量提交。
使用方法 crontab 增加 0 0 * * * /home/oracle/delete_arch.sh orcl >/dev/null 2>/dev/null
Ora我们都都知道在controlfile中记录着每一个archivelog的相关信息,当然们在OS下把这些物理文件delete掉后,在我们的 controlfile中仍然记录着这些archivelog的信息,在oracle的OEM管理器中有可视化的日志展现出,...
从Oracle8i开始,Oracle引入了特殊的触发器,这些触发器并不是和特殊的DML事件相关联的(DML事件,如,INSERT,UPDATE和DELETE)。这些系统级别的触发器包括数据库启动触发器,DDL触发器和最终用户登陆/注销触发器。...
pl/sql,Oracle数据库中,不小心delete数据并提交后如何恢复被删数据? 提供了两种办法
批量删除海量数据通常都是很复杂及缓慢的,方法也很多,但是通常的概念... 下面是删除过程,数据表可以通过主键删除,测试过Delete和For all两种方法,for all在这里并没有带来性能提高,所以仍然选择了批量直接删除。