`
fantasy
  • 浏览: 516130 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

关于oracle使用delete删除的问题

阅读更多

问题:

在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;

分享到:
评论
3 楼 fantasy 2007-07-06  
这个问题出现的案例是:
当一张表有1000万行数据的时候,查询需要20分钟左右,但是当你删除了900万行,查询速度还是20分钟左右。没有变化。

当然使用这个方案会出现一个问题,就是表不能被锁定,如果表被锁定的话就不能更新表的高水位线。
2 楼 fantasy 2007-07-06  
那你有什么更好的解决方案呢?可以提出来大家研究下!~
1 楼 Fenng 2007-07-06  
这个解决方案对于 OLTP 数据库来说,还不如不做的

即使做了,也未必能达到更快的查询速度

相关推荐

    Oracle表删除大量数据(千万)后查询变慢问题(原因分析)

    在解决问题之前,首先需要使用 delete 语句删除大量数据,然后使用 truncate table 语句清空表空间。接着,使用 analyze table 语句重新分析表的统计信息,以便提高查询效率。 analyze 语句的作用是收集表的统计...

    sql恢复oracle数据库delete的数据

    本文将深入探讨如何利用SQL和Oracle数据库特性来尝试恢复被DELETE语句删除的数据。 首先,了解Oracle的数据恢复基础至关重要。Oracle数据库提供了Redo日志系统,用于记录所有对数据库的事务性更改。当数据被删除时...

    ORACLE-delete后的回复

    在Oracle数据库中,删除操作(DELETE)是不可逆的,一旦数据被删除,如果没有备份或者没有启用归档日志模式,通常无法直接恢复。但是,Oracle提供了一些高级特性,如闪回查询(Flashback Query)和闪回事务...

    利用 Oracle 系统触发器防止误删除表操作

    ### 利用Oracle系统触发器防止误删除表操作 #### 背景介绍 在企业级应用中,数据库的安全性和稳定性至关重要。Oracle作为一款广泛使用的数据库管理系统,提供了丰富的功能来保障数据安全。其中,系统触发器是Oracle...

    Oracle恢复误删除数据

    在 Oracle 中,delete 方法可以使用闪回方法恢复删除的数据。如果在删除数据后还没有进行大量的操作(只要保证被删除数据的块没有被覆写),就可以利用闪回方式直接找回删除的数据。 首先,需要确定删除数据的时间...

    Oracle数据库误删除数据的不同恢复方法整理

    当使用`DELETE`命令误删除表中的数据后,如果没有立即执行其他大量更新操作,那么被删除的数据块可能还没有被覆盖。此时,可以利用Oracle提供的闪回功能直接恢复数据。 **2. 具体步骤** - **确定删除时间点**:...

    oracle实例删除

    - **权限检查**: 确保使用的oracle用户拥有足够的权限来执行删除操作。 - **多节点同步**: 删除操作只在一个节点上执行,但需要确保所有节点上的状态保持一致,避免出现数据不一致的问题。 #### 五、总结 通过上述...

    oracle批量删除数据

    ### Oracle批量删除数据知识点 #### 一、Oracle批量删除数据的优势与限制 ##### 优势: - **删除速度快**:在Oracle数据库中,采用特定的方法进行批量删除数据时,可以显著提高处理速度。根据描述中的信息,批量...

    oracle数据库删除数据Delete语句和Truncate语句的对比.docx

    Oracle 数据库删除数据 Delete 语句和 Truncate 语句的对比 Delete 语句和 Truncate 语句是 Oracle 数据库中两种常用的删除数据的方法,但是它们之间存在着明显的差异。 一、Delete 语句 Delete 语句是一种 DML...

    ORACLE数据库误操作执行了DELETE,该如何恢复数据?

    误执行DELETE操作是Oracle数据库管理中常见的问题之一。通过了解当前SCN值、利用AS OF SCN查询数据以及使用Flashback Table功能,可以在很大程度上减少数据丢失的风险。然而,在实际操作中,还需要注意以下几个方面...

    如何正确删除Oracle归档日志

    ### 如何正确删除Oracle归档日志 #### 一、问题背景 在Oracle数据库的日常运维工作中,归档日志的管理和清理是一项重要的任务。随着业务的发展和数据的增长,归档日志会不断累积,占据大量的磁盘空间。如果不及时...

    Oracle数据库误删除数据的不同恢复方法整理(超级实用)

    ### Oracle数据库误删除数据的不同恢复方法 #### 一、引言 在Oracle数据库管理中,误删除数据是一种常见的错误操作,可能导致重要的业务数据丢失。为了应对这种情况,Oracle提供了多种数据恢复的方法,包括闪回恢复...

    oracle删除数据方法。

    ### Oracle删除数据方法详解 在Oracle数据库管理过程中,对于数据的增删改查操作是非常常见的需求之一。特别是在处理大量数据时,如何高效地执行删除操作成为了一项重要的技能。本文将详细介绍一种通过游标批量删除...

    oracle归档日志删除

    以下是关于 Oracle 归档日志删除的知识点: 查看 Oracle 归档日志大小 查看 Oracle 归档日志大小可以使用以下命令: ```sql crosscheck archivelog all; ``` 这个命令可以检查控制文件和实际物理文件的差别,...

    高手的Oracle大批量删除数据的方法.htm

    高手的Oracle大批量删除数据的方法.htm

    delete all delete all delete all delete all

    以下是关于"delete all"这一操作的详细知识点: 1. 文件删除:在操作系统(如Windows、Mac OS或Linux)中,"Delete All"操作意味着删除一个目录下的所有文件或选定的所有文件。执行此操作后,文件会被移动到回收站...

    \win 7下oracle服务被删除怎么办

    在Windows 7操作系统中,如果Oracle数据库服务被意外删除或者丢失,可能会导致数据无法访问、应用程序故障等问题。本文将详细介绍如何在Windows 7环境下,利用`oradim`工具重建Oracle数据库实例,并解决可能出现的...

    Oracle删除亿级表数据的参考方法

    1、使用存储过程的方法 2、使用游标的方法 3、进行对表数据的维护 4、执行表正确的CBO操作

    oracle数据库删除数据Delete语句和Truncate语句的对比.pdf

    在示例中,当表中有4194304条数据时,使用Delete删除花费了90.964秒,而使用Truncate仅需2.215秒。 然而,值得注意的是,Delete语句提供事务管理和回滚功能,对于误操作有一定的保护。而Truncate不支持回滚,一旦...

Global site tag (gtag.js) - Google Analytics