问题:
在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
- 浏览 4015
- 评论(3)
- 论坛回复 / 浏览 (3 / 14661)
- 查看更多
相关推荐
在解决问题之前,首先需要使用 delete 语句删除大量数据,然后使用 truncate table 语句清空表空间。接着,使用 analyze table 语句重新分析表的统计信息,以便提高查询效率。 analyze 语句的作用是收集表的统计...
本文将深入探讨如何利用SQL和Oracle数据库特性来尝试恢复被DELETE语句删除的数据。 首先,了解Oracle的数据恢复基础至关重要。Oracle数据库提供了Redo日志系统,用于记录所有对数据库的事务性更改。当数据被删除时...
在Oracle数据库中,删除操作(DELETE)是不可逆的,一旦数据被删除,如果没有备份或者没有启用归档日志模式,通常无法直接恢复。但是,Oracle提供了一些高级特性,如闪回查询(Flashback Query)和闪回事务...
### 利用Oracle系统触发器防止误删除表操作 #### 背景介绍 在企业级应用中,数据库的安全性和稳定性至关重要。Oracle作为一款广泛使用的数据库管理系统,提供了丰富的功能来保障数据安全。其中,系统触发器是Oracle...
在 Oracle 中,delete 方法可以使用闪回方法恢复删除的数据。如果在删除数据后还没有进行大量的操作(只要保证被删除数据的块没有被覆写),就可以利用闪回方式直接找回删除的数据。 首先,需要确定删除数据的时间...
当使用`DELETE`命令误删除表中的数据后,如果没有立即执行其他大量更新操作,那么被删除的数据块可能还没有被覆盖。此时,可以利用Oracle提供的闪回功能直接恢复数据。 **2. 具体步骤** - **确定删除时间点**:...
- **权限检查**: 确保使用的oracle用户拥有足够的权限来执行删除操作。 - **多节点同步**: 删除操作只在一个节点上执行,但需要确保所有节点上的状态保持一致,避免出现数据不一致的问题。 #### 五、总结 通过上述...
### Oracle批量删除数据知识点 #### 一、Oracle批量删除数据的优势与限制 ##### 优势: - **删除速度快**:在Oracle数据库中,采用特定的方法进行批量删除数据时,可以显著提高处理速度。根据描述中的信息,批量...
Oracle 数据库删除数据 Delete 语句和 Truncate 语句的对比 Delete 语句和 Truncate 语句是 Oracle 数据库中两种常用的删除数据的方法,但是它们之间存在着明显的差异。 一、Delete 语句 Delete 语句是一种 DML...
误执行DELETE操作是Oracle数据库管理中常见的问题之一。通过了解当前SCN值、利用AS OF SCN查询数据以及使用Flashback Table功能,可以在很大程度上减少数据丢失的风险。然而,在实际操作中,还需要注意以下几个方面...
### 如何正确删除Oracle归档日志 #### 一、问题背景 在Oracle数据库的日常运维工作中,归档日志的管理和清理是一项重要的任务。随着业务的发展和数据的增长,归档日志会不断累积,占据大量的磁盘空间。如果不及时...
### Oracle数据库误删除数据的不同恢复方法 #### 一、引言 在Oracle数据库管理中,误删除数据是一种常见的错误操作,可能导致重要的业务数据丢失。为了应对这种情况,Oracle提供了多种数据恢复的方法,包括闪回恢复...
### Oracle删除数据方法详解 在Oracle数据库管理过程中,对于数据的增删改查操作是非常常见的需求之一。特别是在处理大量数据时,如何高效地执行删除操作成为了一项重要的技能。本文将详细介绍一种通过游标批量删除...
以下是关于 Oracle 归档日志删除的知识点: 查看 Oracle 归档日志大小 查看 Oracle 归档日志大小可以使用以下命令: ```sql crosscheck archivelog all; ``` 这个命令可以检查控制文件和实际物理文件的差别,...
高手的Oracle大批量删除数据的方法.htm
以下是关于"delete all"这一操作的详细知识点: 1. 文件删除:在操作系统(如Windows、Mac OS或Linux)中,"Delete All"操作意味着删除一个目录下的所有文件或选定的所有文件。执行此操作后,文件会被移动到回收站...
在Windows 7操作系统中,如果Oracle数据库服务被意外删除或者丢失,可能会导致数据无法访问、应用程序故障等问题。本文将详细介绍如何在Windows 7环境下,利用`oradim`工具重建Oracle数据库实例,并解决可能出现的...
1、使用存储过程的方法 2、使用游标的方法 3、进行对表数据的维护 4、执行表正确的CBO操作
在示例中,当表中有4194304条数据时,使用Delete删除花费了90.964秒,而使用Truncate仅需2.215秒。 然而,值得注意的是,Delete语句提供事务管理和回滚功能,对于误操作有一定的保护。而Truncate不支持回滚,一旦...