4

我想知道如何停止 oracle 的撤消过程?我试图删除一个大表的数百万行,并且在过程中我终止了会话,但它开始撤消删除并且大约两个小时数据库变得非常缓慢。我不希望撤消过程继续进行。有什么办法可以阻止它?

4

3 回答 3

10

您无法停止回滚事务的过程,因为这样做会使数据库处于不一致的状态。

当您执行一个长时间运行的删除过程时,Oracle 可能会在您决定是提交还是回滚事务之前将更改的块写入您的数据文件。如果在执行事务的过程中中断了进程,磁盘上会有一些变化的块,内存中有一些变化的块,还有一些不变的块。回滚事务是将数据库返回到开始执行DELETE语句之前的状态的唯一方法。

于 2012-06-28T06:22:50.623 回答
2

如您所见,逐行删除过程可能非常缓慢。如果删除都在单个事务中完成,就像这里的情况一样,它们可能会变得更慢。您可能需要考虑以下选项:

  1. 如果要删除表中的所有行,您可能需要考虑使用TRUNCATE TABLE语句。

  2. 如果您没有删除表中的所有行,您可能应该在删除一定数量的行后将您的过程更改为 COMMIT。

与此同时,您将不得不等到回滚过程完成。

分享和享受。

于 2012-06-28T16:35:17.257 回答
0

and when you try truncating the table while it's still deleting you'll be seeing an ORA-00054 "resource busy and acquire with NOWAIT specified or timeout expired"

于 2016-12-01T18:29:26.687 回答