使用SQL * Plus和Oracle来删除数据

时间:2013-12-02 09:02:19

标签: sql oracle

我有超过60M的行要从2个单独的表(38M和19M)中删除。我之前从未删除过这么多行,而且我知道它会导致回滚错误等等,并且可能无法完成。

删除此行数的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

您可以一次删除一些行并重复执行。

delete from *your_table*
where *conditions*
  and rownum <= 1000000

上面的sql语句将一次删除1M行,你可以手动或使用PL / SQL块执行38次。

我能想到的另一种方式是......如果要删除大部分数据,你可以否定条件并将insert数据(应该保留)添加到新表中,之后insert,删除原始表并重命名新表。

create table *new_table* as
select * from *your_table*
where *conditions_of_remaining_data*

完成上述操作后,您可以删除旧表,并重命名该表。

drop table *your_table*;
alter table *new_table* rename to *your_table*;